{"id":321645,"date":"2026-06-03T11:43:47","date_gmt":"2026-06-03T11:43:47","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/oriole-one-instant-copy\/"},"modified":"2026-06-03T11:43:28","modified_gmt":"2026-06-03T11:43:28","slug":"oriole-one-instant-copy","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/oriole-one-instant-copy\/","author":23463292,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.0","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Oriole One Instant Copy","header_author":"Oriole One","header_description":"Automatically adds a lightweight, accessible Copy button to every WordPress Gutenberg code block. No shortcodes, no database changes, pure progressive enhancement.","assets_banners_color":"","last_updated":"2026-06-03 11:43:28","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/oriole-one-instant-copy\/","header_author_uri":"https:\/\/www.orioleone.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":44,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"rashidsharafat","date":"2026-06-03 11:43:28"}},"upgrade_notice":{"1.0.0":"<p>Initial release. No upgrade steps required.<\/p>"},"ratings":[],"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3559325,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Copy button visible on a Gutenberg code block (light theme).","2":"Copy button in \"Copied!\" success state.","3":"Settings page under Settings \u2192 Oriole One Instant Copy."}},"plugin_section":[],"plugin_tags":[17897,1214,24363,2738,148076],"plugin_category":[],"plugin_contributors":[260528],"plugin_business_model":[],"class_list":["post-321645","plugin","type-plugin","status-publish","hentry","plugin_tags-clipboard","plugin_tags-code","plugin_tags-code-block","plugin_tags-copy","plugin_tags-gutenberg","plugin_contributors-rashidsharafat","plugin_committers-rashidsharafat"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/oriole-one-instant-copy\/assets\/icon-256x256.png?rev=3559325","icon_2x":"https:\/\/ps.w.org\/oriole-one-instant-copy\/assets\/icon-256x256.png?rev=3559325","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>Oriole One Instant Copy<\/strong> enhances the standard WordPress Gutenberg Code block (<code>core\/code<\/code>) by injecting a small, accessible \"Copy\" button into the top-right corner of every code block on your site \u2014 automatically, on every existing and future post.<\/p>\n\n<p>No shortcodes. No block-editor changes. No database modifications. Pure progressive enhancement.<\/p>\n\n<h4>How it works<\/h4>\n\n<p>The plugin uses vanilla JavaScript to detect every <code>pre.wp-block-code<\/code> element after the page loads and appends a lightweight Copy button. When clicked, the button copies the code text to the system clipboard using the modern <code>navigator.clipboard<\/code> API, with a <code>document.execCommand<\/code> fallback for older browsers.<\/p>\n\n<p>The stored post content is never touched. If you deactivate or uninstall the plugin, your posts are exactly as they were before.<\/p>\n\n<h4>Key Features<\/h4>\n\n<ul>\n<li><strong>Automatic<\/strong> \u2014 works on all existing and future posts without any editor involvement.<\/li>\n<li><strong>Lightweight<\/strong> \u2014 total asset footprint under 5 KB combined (CSS + JS). Zero dependencies.<\/li>\n<li><strong>Accessible<\/strong> \u2014 keyboard navigable, <code>aria-label<\/code> support, <code>focus-visible<\/code> outlines, screen-reader text, reduced-motion aware, high-contrast mode support.<\/li>\n<li><strong>Smart enqueueing<\/strong> \u2014 assets are loaded only on pages that actually contain a Gutenberg code block, not on every page of your site.<\/li>\n<li><strong>Clipboard API with fallback<\/strong> \u2014 uses <code>navigator.clipboard.writeText()<\/code> on secure contexts and falls back to <code>execCommand('copy')<\/code> for legacy environments.<\/li>\n<li><strong>Duplicate-proof<\/strong> \u2014 skips any code block that already has a copy button to avoid conflicts with other plugins.<\/li>\n<li><strong>Theme-safe<\/strong> \u2014 uses <code>currentColor<\/code> and semi-transparent backgrounds; works with light and dark themes without hardcoding colours.<\/li>\n<li><strong>No jQuery<\/strong> \u2014 vanilla JavaScript only.<\/li>\n<li><strong>No tracking, no telemetry, no external requests<\/strong> \u2014 100% self-hosted.<\/li>\n<li><strong>Multisite compatible<\/strong>.<\/li>\n<\/ul>\n\n<h4>Settings<\/h4>\n\n<p>Find the settings under <strong>Settings \u2192 Oriole One Instant Copy<\/strong>:<\/p>\n\n<ul>\n<li><strong>Enable \/ Disable<\/strong> the button globally.<\/li>\n<li><strong>Button text<\/strong> \u2014 customise the label shown on the button (default: \"Copy\").<\/li>\n<li><strong>Success text<\/strong> \u2014 customise the label shown after copying (default: \"Copied!\").<\/li>\n<li><strong>Position<\/strong> \u2014 Top Right (additional positions planned for v2).<\/li>\n<\/ul>\n\n<h4>Developer Notes<\/h4>\n\n<p>All settings use the WordPress Settings API with <code>sanitize_callback<\/code> and proper nonce handling via <code>settings_fields()<\/code>. No custom REST endpoints, no Gutenberg\/React dependencies, no build tools required.<\/p>\n\n<p>The plugin defines the following PHP constant and classes:<\/p>\n\n<ul>\n<li><code>ORIOLE_OIC_VERSION<\/code> \u2014 current plugin version string.<\/li>\n<li><code>Oriole_OIC_Plugin<\/code> \u2014 main bootstrap class (singleton).<\/li>\n<li><code>Oriole_OIC_Settings<\/code> \u2014 settings page and storage class.<\/li>\n<\/ul>\n\n<p>Option stored in <code>wp_options<\/code>: <code>oriole_oic_settings<\/code> (autoloaded, single serialised array).<\/p>\n\n<!--section=installation-->\n<h4>Automatic (recommended)<\/h4>\n\n<ol>\n<li>In your WordPress admin, go to <strong>Plugins \u2192 Add New<\/strong>.<\/li>\n<li>Search for <strong>Oriole One Instant Copy<\/strong>.<\/li>\n<li>Click <strong>Install Now<\/strong>, then <strong>Activate<\/strong>.<\/li>\n<\/ol>\n\n<h4>Manual<\/h4>\n\n<ol>\n<li>Download the plugin zip file.<\/li>\n<li>Go to <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>.<\/li>\n<li>Upload the zip, then click <strong>Install Now<\/strong> and <strong>Activate<\/strong>.<\/li>\n<\/ol>\n\n<h4>From source<\/h4>\n\n<ol>\n<li>Upload the <code>oriole-one-instant-copy<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> screen in WordPress.<\/li>\n<\/ol>\n\n<p>No additional configuration is required. The Copy button will appear immediately on all pages containing Gutenberg code blocks.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20work%20with%20the%20classic%20editor%3F\"><h3>Does this work with the Classic Editor?<\/h3><\/dt>\n<dd><p>The plugin targets <code>pre.wp-block-code<\/code>, which is the HTML class added exclusively by the Gutenberg (Block Editor) Code block. Classic Editor <code>&lt;pre&gt;<\/code> tags will not be affected.<\/p><\/dd>\n<dt id=\"will%20it%20work%20with%20my%20theme%3F\"><h3>Will it work with my theme?<\/h3><\/dt>\n<dd><p>Yes. The plugin uses <code>position: absolute<\/code> to overlay the button, so it does not affect your theme layout. Colours are set using <code>currentColor<\/code> and semi-transparent layers, making the button readable on virtually any background.<\/p><\/dd>\n<dt id=\"does%20it%20conflict%20with%20syntax%20highlighting%20plugins%20%28e.g.%20prism.js%2C%20highlight.js%29%3F\"><h3>Does it conflict with syntax highlighting plugins (e.g. Prism.js, Highlight.js)?<\/h3><\/dt>\n<dd><p>No. The plugin appends a button element to the <code>&lt;pre&gt;<\/code> container but does not modify the <code>&lt;code&gt;<\/code> content or any of its attributes. Syntax highlighting plugins operate on the code text and are unaffected.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20another%20plugin%20already%20adds%20a%20copy%20button%3F\"><h3>What happens if another plugin already adds a Copy button?<\/h3><\/dt>\n<dd><p>If a copy button with the class <code>oriole-oic-copy-btn<\/code> already exists inside a code block, this plugin will skip it. This prevents duplicate buttons when used alongside other copy plugins.<\/p><\/dd>\n<dt id=\"does%20it%20slow%20down%20my%20site%3F\"><h3>Does it slow down my site?<\/h3><\/dt>\n<dd><p>The impact is negligible. The CSS and JS files are each under 5 KB. Assets are only enqueued on pages that contain at least one Gutenberg code block, so other pages are completely unaffected.<\/p><\/dd>\n<dt id=\"does%20it%20work%20on%20https%20only%3F\"><h3>Does it work on HTTPS only?<\/h3><\/dt>\n<dd><p>The <code>navigator.clipboard<\/code> API requires a secure context (HTTPS or localhost). On non-secure HTTP pages, the plugin automatically falls back to <code>document.execCommand('copy')<\/code>, which works in most modern browsers regardless of protocol.<\/p><\/dd>\n<dt id=\"is%20it%20multisite%20compatible%3F\"><h3>Is it multisite compatible?<\/h3><\/dt>\n<dd><p>Yes. Settings are stored per site. On uninstall, options are removed from every site in the network.<\/p><\/dd>\n<dt id=\"can%20i%20translate%20it%3F\"><h3>Can I translate it?<\/h3><\/dt>\n<dd><p>Yes. The plugin is fully internationalised using standard WordPress i18n functions. A <code>.pot<\/code> file is included in the <code>languages\/<\/code> directory. Translations can be submitted via <a href=\"https:\/\/translate.wordpress.org\/\">translate.wordpress.org<\/a>.<\/p><\/dd>\n<dt id=\"where%20are%20the%20settings%3F\"><h3>Where are the settings?<\/h3><\/dt>\n<dd><p><strong>WordPress Admin \u2192 Settings \u2192 Oriole One Instant Copy<\/strong>.<\/p><\/dd>\n<dt id=\"what%20data%20does%20the%20plugin%20store%3F\"><h3>What data does the plugin store?<\/h3><\/dt>\n<dd><p>Only one row in <code>wp_options<\/code> with the key <code>oriole_oic_settings<\/code>. It stores your button text, success text, position preference, and the enabled\/disabled toggle. The option is removed cleanly when you delete the plugin.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20phone%20home%20or%20load%20external%20resources%3F\"><h3>Does the plugin phone home or load external resources?<\/h3><\/dt>\n<dd><p>No. There are no external HTTP requests, no CDN-loaded assets, no analytics, no telemetry, and no licence checks of any kind.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Auto-injects accessible Copy button on all <code>pre.wp-block-code<\/code> elements.<\/li>\n<li>Settings page with enable toggle, custom button text, and custom success text.<\/li>\n<li><code>navigator.clipboard<\/code> with <code>execCommand<\/code> fallback.<\/li>\n<li>Keyboard accessible with <code>focus-visible<\/code> outline and <code>aria-label<\/code>.<\/li>\n<li>Reduced-motion and forced-colour (high-contrast) CSS support.<\/li>\n<li>Smart asset enqueueing: loads only on pages with code blocks.<\/li>\n<li>Duplicate-button guard for coexistence with other copy plugins.<\/li>\n<li>Multisite-aware uninstall cleanup.<\/li>\n<\/ul>","raw_excerpt":"Automatically adds a lightweight, accessible Copy button to every Gutenberg code block. No shortcodes, no database changes.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/321645","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=321645"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/rashidsharafat"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=321645"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=321645"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=321645"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=321645"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=321645"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=321645"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}