Desk9 AI Content Disclosure

Àpèjúwe

Desk9 AI Content Disclosure 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 “tools used” line or badge-style hints.

Everything runs on your server—settings 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.

Deutsch (Kurzfassung)

Mit diesem Plugin kennzeichnen Sie KI-unterstützte Inhalte klar für Besucherinnen und Besucher. Die ausführliche Anleitung folgt auf Englisch (Standard für WordPress.org). Übersetzungen über die Community: https://translate.wordpress.org/

Features

  • Global settings under Settings Desk9 AI Content Disclosure: 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).
  • Block editor: insert the dynamic disclosure block, adjust disclaimer length, AI-usage wording, and tools per instance—multiple blocks per post are supported when you need them.
  • Per-post document sidebar (supported post types): inherit global defaults, override text or tools, hide the inherited notice, or skip auto-append for that entry.
  • Shortcode [deskaico_disclosure] for precise placement in classic layouts, page builders, or template parts.
  • Optional auto-append after post content when a post is marked as AI-relevant—handy when authors should not forget a notice on long-form content.
  • Optional Beta JSON-LD (off by default): experimental machine-readable hints for advanced use cases; not canonical schema.org output and may change over time.
  • WPML-ready configuration file included for teams running multilingual sites (see FAQ).

Development

Official releases include readable source under src/ (JavaScript and Sass) plus package.json and webpack.config.js, so you can audit or fork the plugin without a separate repository. The compiled bundles that WordPress loads live in build/ and match what ships on WordPress.org when you run the production build.

Rebuild compiled assets (optional):

  1. Install Node.js (current LTS recommended) which includes npm.
  2. In the plugin directory, run npm install once to install dev dependencies.
  3. Run npm run build to regenerate the build/ assets.
  4. For active development with auto-rebuild, use npm run start.

Layout reference: src/disclosure/ contains the Gutenberg block; src/post-sidebar/ powers the document sidebar; webpack.config.js extends @wordpress/scripts so both entry points compile.

Translators and maintainers: translations are not bundled with the plugin; they are served as WordPress.org language packs, and WordPress generates the editorÌtumọ̀ Yorùbá: ’s JSON translation files from those packs itself. Contribute at https://translate.wordpress.org/projects/wp-plugins/desk9-ai-content-disclosure/ — languages/desk9-ai-content-disclosure.pot in this repository is the current string template.

Privacy / Data handling

  • No outbound analytics or telemetry are added by this plugin for its own purposes.
  • Data stays on your site: a serialized option and post meta are stored in the database with normal WordPress capability checks.
  • Deleting the plugin removes that data again: uninstall.php drops the deskaico_options option and every _deskaico_* post meta key (on each site of a multisite network).
  • No cookies are introduced by default.
  • Users with manage_options configure global defaults; authors and editors update per-entry values according to their roles.

Internationalisation

Translations are delivered as WordPress.org language packs. WordPress downloads them automatically into wp-content/languages/plugins/ and loads them for both the PHP interface and the block editor — nothing is bundled inside the plugin folder, so updating a translation never requires a plugin release.

Tip: The dashboard language often follows Users Profile Language. If the site is localized but your user profile is still English, some strings may stay in English until you change that setting.

Help translate the plugin into your language at https://translate.wordpress.org/projects/wp-plugins/desk9-ai-content-disclosure/ — once a locale reaches the release threshold, every site in that language receives the pack automatically.

Àwọn àwòrán ìbòjú

Àwọn ìdí

Plugin yìí pèsè 1 ìdí.

  • AI Disclosure Displays an AI-assisted content disclosure with optional badges and semantic markup.

Ìgbéwọlẹ̀

From the WordPress.org plugin directory (recommended)

  1. In your admin dashboard, go to Plugins Add New.
  2. Search for Desk9 AI Content Disclosure.
  3. Click Install Now, then Activate.

Upload a ZIP file

  1. Download the plugin ZIP (from WordPress.org or your maintainer).
  2. Go to Plugins Add New Upload Plugin, choose the ZIP, and click Install Now.
  3. Click Activate Plugin.

Install via SFTP or hosting file manager

  1. Unzip the package on your computer if needed. You should have a folder named desk9-ai-content-disclosure.
  2. Upload that folder to wp-content/plugins/ on your site.
  3. In the dashboard, open Plugins and activate Desk9 AI Content Disclosure.

After activation: open Settings Desk9 AI Content Disclosure, review defaults, then add the block or shortcode where readers should see the notice. No command line or NPM is required for normal use.

FAQ

Do I need Node.js or NPM?

No. Pre-built scripts and styles ship in the build/ folder. Developers who want to rebuild from source can use Node—see Development below.

Does this plugin guarantee legal compliance (for example EU AI Act or Article 50)?

No. It helps you disclose AI use visibly, but laws and interpretations differ by region and use case. Consult qualified counsel for compliance questions.

What does “experimental JSON-LD” mean?

When enabled, the plugin can emit a non-standard JSON-LD script plus related data-* attributes once per page load. Treat it as beta: it is not a guaranteed schema.org pattern and may evolve.

Does the plugin send data to external services?

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.

Does it work with WPML, Polylang, or other multilingual plugins?

Yes. A wpml-config.xml ships with the plugin so WPML can register admin strings, translate the custom disclaimer meta field, and translate the text attribute on the shortcode (HTML allowed) while keeping structural fields consistent across languages. Other multilingual setups can use similar approaches or WordPress filters—see the FAQ entry on hooks in older documentation if you customize output.

Àwọn àgbéyẹ̀wò

Kò sí àwọn àgbéyẹ̀wò fún plugin yìí.

Àwọn Olùkópa & Olùgbéejáde

“Desk9 AI Content Disclosure” jẹ́ ètò ìṣàmúlò orísun ṣíṣí sílẹ̀. Àwọn ènìyàn wọ̀nyí ti ṣe ìkópa sí plugin yìí.

Àwọn Olùkópa

Túmọ̀ “Desk9 AI Content Disclosure” sí èdè rẹ.

Ṣe o nífẹ̀ẹ́ sí ìdàgbàsókè?

Ṣàwárí koodu, ṣàyẹ̀wò ibi ìpamọ́ SVN, tàbí ṣe àgbékalẹ̀ sí àkọsílẹ̀ ìdàgbàsókè nípasẹ̀ RSS.

Àkọsílẹ̀ àwọn àyípadà

1.2.0

  • The block editor preview is now produced by the blockÌtumọ̀ Yorùbá: ’s own PHP renderer through the block-renderer REST route, so the canvas shows the exact markup and styling the front end outputs. It replaces a separate JavaScript approximation that had drifted apart from the real output: it showed placeholder badges (“OAI ⋯”) instead of your configured tools, truncated the disclaimer at 220 characters, dropped the AI usage lead sentence, and — because the front-end stylesheet was only ever enqueued during rendering — displayed no card, border, background or badge styling at all.
  • The front-end stylesheet is now loaded into the editor canvas as well, so preview and front end are styled by one and the same file.
  • Fix: alignment and margin set on the block applied in the editor but were dropped on the front end, because the renderer builds its own element and never called get_block_wrapper_attributes(). Both are now carried through to the published markup.
  • Fix: per-post overrides were resolved against no post at all when rendering outside a singular view; the renderer now falls back to the post the REST request sets up.
  • Removed roughly 400 lines of duplicated preview logic in JavaScript along with the deskaicoEditorConfig payload that only fed it.

1.1.0

  • Breaking (CSS only): every CSS class, HTML id and CSS custom property now uses the deskaico- prefix instead of the legacy acd- shorthand (.acd-disclosure .deskaico-disclosure, --acd-bg --deskaico-bg, and so on). The old three-letter prefix predates the plugin’s rename and no longer matched anything else in the codebase. Custom CSS targeting the old names needs updating; settings, content and stored data are untouched.
  • Translations now ship exclusively as WordPress.org language packs instead of files bundled in /languages/, so a corrected translation reaches sites without a plugin release. Help translate at https://translate.wordpress.org/projects/wp-plugins/desk9-ai-content-disclosure/
  • Fix: the block’s front-end stylesheet targeted .wp-block-ai-content-disclosure-disclosure, a class generated by the block namespace used before the plugin was renamed. The rule never matched anything; it now targets .wp-block-deskaico-disclosure.
  • Compatibility: all runtime registrations (block, shortcode, post meta, auto-append, JSON-LD collector) now boot on init instead of plugins_loaded. This removes the WordPress 6.7+ debug notices about _load_textdomain_just_in_time and about wp_register_script / wp_register_style running before the enqueue hooks.
  • Fix: an empty or invalid border color fell back to the background default, so the card border became invisible. Background, border and accent colors now each fall back to their own default.
  • New: uninstall.php removes the plugin option and all _deskaico_* post meta when the plugin is deleted (multisite-aware).
  • Housekeeping: declared Tested up to 7.1; removed a stray temporary file from the plugin folder.

1.0.6

  • Settings/runtime: fix global long / short presets accidentally saved as only the informational usage-scope lead (no preset body)—options are rebuilt from the bundled texts plus your selected scope whenever that pattern is detected, so Settings and the front end stay consistent until you intentionally edit the presets.

1.0.5

  • Settings: fixing how AI usage scope merges its introductory paragraph into long and short disclaimer presets in the browser—strip legacy leads whether they appear as plaintext or wrapped in a leading <p>…</p>, refresh both textareas once on page load, and clarify the helper text beneath the dropdown (German strings updated).

1.0.4

  • Block: when AI usage extent is Inherit site setting and the block uses global site disclaimer text, the front end now outputs the wording stored under Settings as-is (the admin screens already merge the usage-scope sentence into those textareas when you save). Applying the programmatic prefix twice no longer hides or duplicates the canonical Settings copy compared with choosing None.

1.0.3

  • Frontend: prevent duplicated AI usage-scope lead sentences. Saved disclaimer HTML from Settings often wraps the introductory sentence inside <p>…</p>; stripping only matched raw prefixes at the beginning of the string, so WordPress appended the same lead again—now trimmed whether it is plaintext or first matching paragraph (deskaico_strip_leading_usage_scope_prefixes).

1.0.2

  • Frontend: fixing disclaimer resolution so Settings Disclaimer text is honored whenever a disclosure block or shortcode explicitly uses global site defaults, even if the document sidebar uses “Custom message & tools” for auto-append/overrides on the same entry.
  • Front-end ignores “empty-looking” markup (such as stray empty paragraphs): only real visible text satisfies custom disclaimer fields, preventing the notice from collapsing to nothing.
  • Document sidebar help text clarified for how per-post customs interact with globally defaulted blocks.

1.0.1

  • Block editor preview: the canvas now reflects Settings Default disclaimer length (long vs short) and the saved long/short disclaimer texts, including the block inserter preview—no more “blank” or always-long English placeholder when the short template is selected.
  • Developer note: deskaicoEditorConfig now passes defaultDisclaimerVariant, disclaimerPlainLong, and disclaimerPlainShort for editor preview only (front-end markup is unchanged).

1.0.0

  • 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 [deskaico_disclosure], document sidebar (post overrides and optional auto-append layout), Beta JSON-LD collector, German translation starter pack.
  • Distinctive listing title Desk9 AI Content Disclosure, slug desk9-ai-content-disclosure, Text Domain aligned with the slug; all PHP identifiers use the deskaico / DESKAICO / Deskaico prefix for Plugin Check compliance.
  • Toolbar buttons load from @wordpress/components for current WordPress block editor compatibility; block namespace deskaico/disclosure.
  • Show selected tools as: abbreviations, bundled SVG icons, or plain full names (comma-separated).
  • Front-end compact layout uses neutral “Tools used:” wording (no automatic plugin credits or outbound promotional links on the public site).
  • Source transparency: human-readable JavaScript and Sass under src/ with package.json and webpack.config.js; Development section in this readme documents npm install / npm run build; compiled assets ship in build/.
  • Defense-in-depth output escaping: Deskaico_Renderer::render() runs final HTML through wp_kses() with allow-list deskaico_kses_allowed_disclosure.
  • Beta JSON-LD emitted via wp_print_inline_script_tag() with safe JSON encoding flags.
  • Bundled PHP translations via Text Domain + Domain Path with WordPress JIT loading (per Plugin Check). Ship languages/desk9-ai-content-disclosure-{locale}.mo; duplicate msgid removed in de_DE.po.
  • Verified with WordPress Plugin Check “plugin-review” PHPCS ruleset and relevant security/naming sniffs.