{"id":312098,"date":"2026-05-17T21:39:21","date_gmt":"2026-05-17T21:39:21","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/ai-content-disclosure\/"},"modified":"2026-05-17T23:15:08","modified_gmt":"2026-05-17T23:15:08","slug":"desk9-ai-content-disclosure","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/desk9-ai-content-disclosure\/","author":23303522,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.1","stable_tag":"1.0.1","tested":"6.9.4","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"Desk9 AI Content Disclosure","header_author":"Tobias Kurth","header_description":"Helps site owners visibly document AI-assisted content and optionally output experimental machine-readable disclosures. Supports transparency documentation; does not provide legal advice.","assets_banners_color":"dd3a76","last_updated":"2026-05-17 23:15:08","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/desk9-ai-content-disclosure\/","header_author_uri":"https:\/\/desk9.design\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":91,"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":"desk9","date":"2026-05-17 21:52:17"},"1.0.1":{"tag":"1.0.1","author":"desk9","date":"2026-05-17 23:15:08"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3534877,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3534877,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500}},"assets_blueprints":{},"all_blocks":{"deskaico\/disclosure":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"deskaico\/disclosure","title":"AI Disclosure","category":"widgets","icon":"privacy","description":"Displays an AI-assisted content disclosure with optional badges and semantic markup.","keywords":["ai","disclosure","transparency"],"version":"1.0.4","textdomain":"desk9-ai-content-disclosure","supports":{"align":true,"className":true,"spacing":{"margin":true,"padding":false},"html":false,"multiple":true},"example":{"attributes":{"useGlobalDefaults":true,"variant":"card","iconsMode":"inherit","machineReadableMode":"inherit","customText":"","overrideTools":[],"disclaimerLength":"inherit","usageScope":"inherit"},"viewportWidth":520},"usesContext":["postId","postType"],"attributes":{"useGlobalDefaults":{"type":"boolean","default":true},"customText":{"type":"string","default":""},"overrideTools":{"type":"array","default":[]},"disclaimerLength":{"type":"string","default":"inherit"},"usageScope":{"type":"string","default":"inherit"},"variant":{"type":"string","default":"card"},"iconsMode":{"type":"string","default":"inherit"},"machineReadableMode":{"type":"string","default":"inherit"},"bgColor":{"type":"string","default":""},"borderColor":{"type":"string","default":""},"borderRadiusPx":{"type":"string","default":""},"paddingPx":{"type":"string","default":""},"fontSizePx":{"type":"string","default":""}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css"}},"tagged_versions":["1.0.0","1.0.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3534877,"resolution":"1","location":"assets","locale":"","width":1280,"height":800},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3534877,"resolution":"2","location":"assets","locale":"","width":1280,"height":800},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3534877,"resolution":"3","location":"assets","locale":"","width":1280,"height":800}},"screenshots":{"1":"Settings page demonstrating provider selection and WCAG reminders.","2":"Block editor inspector with transparency-focused controls.","3":"Front-end disclosure card with neutral badges and accessible <code>&lt;aside&gt;<\/code> scaffolding."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[2353,148857,23968,148076,25098],"plugin_category":[],"plugin_contributors":[244725],"plugin_business_model":[],"class_list":["post-312098","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-block-editor","plugin_tags-disclosure","plugin_tags-gutenberg","plugin_tags-transparency","plugin_contributors-desk9","plugin_committers-desk9"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/desk9-ai-content-disclosure\/assets\/icon-256x256.png?rev=3534877","icon_2x":"https:\/\/ps.w.org\/desk9-ai-content-disclosure\/assets\/icon-256x256.png?rev=3534877","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/desk9-ai-content-disclosure\/assets\/screenshot-1.png?rev=3534877","caption":"Settings page demonstrating provider selection and WCAG reminders."},{"src":"https:\/\/ps.w.org\/desk9-ai-content-disclosure\/assets\/screenshot-2.png?rev=3534877","caption":"Block editor inspector with transparency-focused controls."},{"src":"https:\/\/ps.w.org\/desk9-ai-content-disclosure\/assets\/screenshot-3.png?rev=3534877","caption":"Front-end disclosure card with neutral badges and accessible <code>&lt;aside&gt;<\/code> scaffolding."}],"raw_content":"<!--section=description-->\n<p><strong>Desk9 AI Content Disclosure<\/strong> helps you document AI-assisted work in a calm, readable way. Choose tools (like OpenAI or Gemini), add a short or long disclaimer, pick a layout that fits your theme, and optionally expose a compact \u201ctools used\u201d line or badge-style hints.<\/p>\n\n<p>Everything runs on your server\u2014settings and post options are stored in your WordPress database. This plugin is a practical transparency aid; statutes and obligations depend on your context, so treat the copy as informational, not a legal guarantee.<\/p>\n\n<h3>Deutsch (Kurzfassung)<\/h3>\n\n<p>Mit diesem Plugin kennzeichnen Sie KI-unterst\u00fctzte Inhalte klar f\u00fcr Besucherinnen und Besucher. Die ausf\u00fchrliche Anleitung folgt auf Englisch (Standard f\u00fcr WordPress.org). \u00dcbersetzungen \u00fcber die Community: https:\/\/translate.wordpress.org\/<\/p>\n\n<h3>Features<\/h3>\n\n<ul>\n<li><strong>Global settings<\/strong> under <em>Settings \u2192 Desk9 AI Content Disclosure<\/em>: pick AI tools, edit long and short disclaimers (English defaults), control card styling (including an optional accent stripe), toggle badges, and set how tool names appear (short labels, bundled icons, or full names).<\/li>\n<li><strong>Block editor<\/strong>: insert the dynamic disclosure block, adjust disclaimer length, AI-usage wording, and tools per instance\u2014multiple blocks per post are supported when you need them.<\/li>\n<li><strong>Per-post document sidebar<\/strong> (supported post types): inherit global defaults, override text or tools, hide the inherited notice, or skip auto-append for that entry.<\/li>\n<li><strong>Shortcode<\/strong> <code>[deskaico_disclosure]<\/code> for precise placement in classic layouts, page builders, or template parts.<\/li>\n<li><strong>Optional auto-append<\/strong> after post content when a post is marked as AI-relevant\u2014handy when authors should not forget a notice on long-form content.<\/li>\n<li><strong>Optional Beta JSON-LD<\/strong> (off by default): experimental machine-readable hints for advanced use cases; not canonical schema.org output and may change over time.<\/li>\n<li><strong>WPML-ready<\/strong> configuration file included for teams running multilingual sites (see FAQ).<\/li>\n<\/ul>\n\n<h3>Development<\/h3>\n\n<p>Official releases include <strong>readable source<\/strong> under <code>src\/<\/code> (JavaScript and Sass) plus <code>package.json<\/code> and <code>webpack.config.js<\/code>, so you can audit or fork the plugin without a separate repository. The compiled bundles that WordPress loads live in <code>build\/<\/code> and match what ships on WordPress.org when you run the production build.<\/p>\n\n<p><strong>Rebuild compiled assets (optional):<\/strong><\/p>\n\n<ol>\n<li>Install <strong>Node.js<\/strong> (current LTS recommended) which includes <code>npm<\/code>.<\/li>\n<li>In the plugin directory, run <code>npm install<\/code> once to install dev dependencies.<\/li>\n<li>Run <code>npm run build<\/code> to regenerate the <code>build\/<\/code> assets.<\/li>\n<li>For active development with auto-rebuild, use <code>npm run start<\/code>.<\/li>\n<\/ol>\n\n<p>Layout reference: <code>src\/disclosure\/<\/code> contains the Gutenberg block; <code>src\/post-sidebar\/<\/code> powers the document sidebar; <code>webpack.config.js<\/code> extends <code>@wordpress\/scripts<\/code> so both entry points compile.<\/p>\n\n<p><strong>Translators and maintainers:<\/strong> string extraction and JSON translation files for the editor often use WP-CLI <code>wp i18n<\/code> (see WordPress developer docs). Community translations are coordinated at https:\/\/translate.wordpress.org\/<\/p>\n\n<h3>Privacy \/ Data handling<\/h3>\n\n<ul>\n<li>No outbound analytics or telemetry are added by this plugin for its own purposes.<\/li>\n<li>Data stays on your site: a serialized option and post meta are stored in the database with normal WordPress capability checks.<\/li>\n<li>No cookies are introduced by default.<\/li>\n<li>Users with <code>manage_options<\/code> configure global defaults; authors and editors update per-entry values according to their roles.<\/li>\n<\/ul>\n\n<h3>Internationalisation<\/h3>\n\n<p>Translations load automatically from <code>wp-content\/plugins\/desk9-ai-content-disclosure\/languages\/<\/code> using the plugin\u2019s <strong>Text Domain<\/strong> and <strong>Domain Path<\/strong> headers, and from language packs under <code>wp-content\/languages\/plugins\/<\/code> when available.<\/p>\n\n<p><strong>Tip:<\/strong> The dashboard language often follows <strong>Users \u2192 Profile \u2192 Language<\/strong>. If the site is localized but your user profile is still English, some strings may stay in English until you change that setting.<\/p>\n\n<p>Community volunteers can translate the plugin at https:\/\/translate.wordpress.org\/<\/p>\n\n<!--section=installation-->\n<h4>From the WordPress.org plugin directory (recommended)<\/h4>\n\n<ol>\n<li>In your admin dashboard, go to <em>Plugins \u2192 Add New<\/em>.<\/li>\n<li>Search for <strong>Desk9 AI Content Disclosure<\/strong>.<\/li>\n<li>Click <strong>Install Now<\/strong>, then <strong>Activate<\/strong>.<\/li>\n<\/ol>\n\n<h4>Upload a ZIP file<\/h4>\n\n<ol>\n<li>Download the plugin ZIP (from WordPress.org or your maintainer).<\/li>\n<li>Go to <em>Plugins \u2192 Add New \u2192 Upload Plugin<\/em>, choose the ZIP, and click <strong>Install Now<\/strong>.<\/li>\n<li>Click <strong>Activate Plugin<\/strong>.<\/li>\n<\/ol>\n\n<h4>Install via SFTP or hosting file manager<\/h4>\n\n<ol>\n<li>Unzip the package on your computer if needed. You should have a folder named <code>desk9-ai-content-disclosure<\/code>.<\/li>\n<li>Upload that folder to <code>wp-content\/plugins\/<\/code> on your site.<\/li>\n<li>In the dashboard, open <em>Plugins<\/em> and activate <strong>Desk9 AI Content Disclosure<\/strong>.<\/li>\n<\/ol>\n\n<p><strong>After activation:<\/strong> open <em>Settings \u2192 Desk9 AI Content Disclosure<\/em>, review defaults, then add the block or shortcode where readers should see the notice. No command line or NPM is required for normal use.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20node.js%20or%20npm%3F\"><h3>Do I need Node.js or NPM?<\/h3><\/dt>\n<dd><p>No. Pre-built scripts and styles ship in the <code>build\/<\/code> folder. Developers who want to rebuild from source can use Node\u2014see <strong>Development<\/strong> below.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20guarantee%20legal%20compliance%20%28for%20example%20eu%20ai%20act%20or%20article%2050%29%3F\"><h3>Does this plugin guarantee legal compliance (for example EU AI Act or Article 50)?<\/h3><\/dt>\n<dd><p>No. It helps you disclose AI use visibly, but laws and interpretations differ by region and use case. Consult qualified counsel for compliance questions.<\/p><\/dd>\n<dt id=\"what%20does%20%E2%80%9Cexperimental%20json-ld%E2%80%9D%20mean%3F\"><h3>What does \u201cexperimental JSON-LD\u201d mean?<\/h3><\/dt>\n<dd><p>When enabled, the plugin can emit a non-standard JSON-LD script plus related <code>data-*<\/code> attributes once per page load. Treat it as beta: it is not a guaranteed schema.org pattern and may evolve.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20send%20data%20to%20external%20services%3F\"><h3>Does the plugin send data to external services?<\/h3><\/dt>\n<dd><p>No dedicated telemetry or analytics endpoints are bundled. Settings and per-post data stay in your WordPress database. Output is rendered on your pages like other theme and plugin content.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20wpml%2C%20polylang%2C%20or%20other%20multilingual%20plugins%3F\"><h3>Does it work with WPML, Polylang, or other multilingual plugins?<\/h3><\/dt>\n<dd><p>Yes. A <code>wpml-config.xml<\/code> ships with the plugin so WPML can register admin strings, translate the custom disclaimer meta field, and translate the <code>text<\/code> attribute on the shortcode (HTML allowed) while keeping structural fields consistent across languages. Other multilingual setups can use similar approaches or WordPress filters\u2014see the FAQ entry on hooks in older documentation if you customize output.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.1<\/h4>\n\n<ul>\n<li><strong>AI usage scope (informational category) \u2013 cleaner wording.<\/strong> Each scope (Inspiration, Draft assistance, Substantial portion) now ships <strong>one coherent long and short preset<\/strong> instead of concatenating an introductory sentence with a generic body, so the duplicated <em>\u201cresponsible for accuracy and lawfulness\u201d<\/em> wording is gone. Selecting <em>\u201cNot specified\u201d<\/em> uses the original generic preset.<\/li>\n<li><strong>Settings textareas stay accurate.<\/strong> Switching the scope swaps the long and short fields automatically; previously, leftover paragraphs or lead-only saves could remain on screen or be duplicated by paragraph-wrapped HTML. Hand-edited custom copy is preserved when you change the scope.<\/li>\n<li><strong>Migration of older saves.<\/strong> Auto-generated values from earlier dev builds (lead-only, lead + default body, or default body with an active scope) are detected and replaced with the new per-scope preset transparently\u2014no data loss for customized text.<\/li>\n<li><strong>Block editor preview<\/strong> now reflects <strong>Settings \u2192 Default disclaimer length<\/strong> (long vs. short) and the saved long\/short disclaimer copy, including the inserter preview. <code>deskaicoEditorConfig<\/code> exposes <code>defaultDisclaimerVariant<\/code>, <code>disclaimerPlainLong<\/code>, <code>disclaimerPlainShort<\/code> (editor preview only; front-end markup is unchanged).<\/li>\n<li><strong>Front end + auto-append<\/strong> honor <em>Settings \u2192 Disclaimer text<\/em> whenever a block or shortcode uses global site defaults, even if the document sidebar uses <em>Custom message &amp; tools<\/em> on the same entry. Empty-looking custom markup (stray empty paragraphs) no longer collapses the notice to nothing.<\/li>\n<li><strong>Restore default plugin settings.<\/strong> A new button at the bottom of the Settings screen resets every option to bundled defaults (destructive, with a confirmation dialog and nonce).<\/li>\n<li><strong>Renderer<\/strong> runs <code>deskaico_disclaimer_apply_usage_scope_prefix()<\/code> as a safe strip only\u2014no more accidental double leads from older callers; block editor, shortcode, and auto-append all read the stored preset as-is.<\/li>\n<li><strong>German translation updated<\/strong> for the new per-scope presets and helper texts; bundled <code>.mo<\/code> recompiled.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First public release on WordPress.org: settings UI, disclosure renderer, dynamic block (inspector presets for disclaimer length, AI usage extent, per-block tools, multiple blocks per post) and shortcode <strong><code>[deskaico_disclosure]<\/code><\/strong>, document sidebar (post overrides and optional auto-append layout), Beta JSON-LD collector, German translation starter pack.<\/li>\n<li>Distinctive listing title <strong>Desk9 AI Content Disclosure<\/strong>, slug <code>desk9-ai-content-disclosure<\/code>, <strong>Text Domain<\/strong> aligned with the slug; all PHP identifiers use the <strong><code>deskaico<\/code> \/ <code>DESKAICO<\/code> \/ <code>Deskaico<\/code><\/strong> prefix for Plugin Check compliance.<\/li>\n<li>Toolbar buttons load from <code>@wordpress\/components<\/code> for current WordPress block editor compatibility; block namespace <strong><code>deskaico\/disclosure<\/code><\/strong>.<\/li>\n<li><strong>Show selected tools as<\/strong>: abbreviations, bundled SVG icons, or plain full names (comma-separated).<\/li>\n<li>Front-end compact layout uses neutral <strong>\u201cTools used:\u201d<\/strong> wording (no automatic plugin credits or outbound promotional links on the public site).<\/li>\n<li>Source transparency: human-readable JavaScript and Sass under <code>src\/<\/code> with <code>package.json<\/code> and <code>webpack.config.js<\/code>; <strong>Development<\/strong> section in this readme documents <code>npm install<\/code> \/ <code>npm run build<\/code>; compiled assets ship in <code>build\/<\/code>.<\/li>\n<li>Defense-in-depth output escaping: <code>Deskaico_Renderer::render()<\/code> runs final HTML through <code>wp_kses()<\/code> with allow-list <code>deskaico_kses_allowed_disclosure<\/code>.<\/li>\n<li>Beta JSON-LD emitted via <code>wp_print_inline_script_tag()<\/code> with safe JSON encoding flags.<\/li>\n<li>Bundled PHP translations via <strong>Text Domain<\/strong> + <strong>Domain Path<\/strong> with WordPress JIT loading (per Plugin Check). Ship <code>languages\/desk9-ai-content-disclosure-{locale}.mo<\/code>; duplicate <code>msgid<\/code> removed in <code>de_DE.po<\/code>.<\/li>\n<li>Verified with WordPress Plugin Check \u201cplugin-review\u201d PHPCS ruleset and relevant security\/naming sniffs.<\/li>\n<\/ul>","raw_excerpt":"Disclose AI-assisted content with a block, shortcode, or auto-append. No telemetry. Supports transparency\u2014not legal advice.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/312098","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=312098"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/desk9"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=312098"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=312098"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=312098"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=312098"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=312098"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=312098"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}