Title: Desk9 AI Content Disclosure
Author: Desk9 Design
Published: <strong>mai 17, 2026</strong>
Last modified: septembre 16, 2026

---

Search plugins

![](https://ps.w.org/desk9-ai-content-disclosure/assets/banner-772x250.png?rev=3640300)

![](https://ps.w.org/desk9-ai-content-disclosure/assets/icon-256x256.png?rev=3534877)

# Desk9 AI Content Disclosure

 By [Desk9 Design](https://profiles.wordpress.org/desk9/)

[Download](https://downloads.wordpress.org/plugin/desk9-ai-content-disclosure.1.4.2.zip)

 * [Details](https://tah.wordpress.org/plugins/desk9-ai-content-disclosure/#description)
 * [Reviews](https://tah.wordpress.org/plugins/desk9-ai-content-disclosure/#reviews)
 *  [Installation](https://tah.wordpress.org/plugins/desk9-ai-content-disclosure/#installation)
 * [Development](https://tah.wordpress.org/plugins/desk9-ai-content-disclosure/#developers)

 [Support](https://wordpress.org/support/plugin/desk9-ai-content-disclosure/)

## Description

**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-unterstuetzte Inhalte klar fuer Besucherinnen
und Besucher. Die ausfuehrliche Anleitung folgt auf Englisch (Standard fuer WordPress.
org). Uebersetzungen ueber 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).
 * **Per-image marking**: flag individual images as AI generated or edited – from
   the media library or straight from the image block – optionally naming the tool,
   and show a small pill over them on featured images, archives and images inside
   content.
 * **Six designs, six color schemes**: keep the Classic notice or switch to an accent-
   bar, minimal, editorial, technical or soft direction, each with contrast-checked
   colors and an optional dark variant.
 * **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’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.

### Icon credits

The four provider icons under `assets/icons/providers/` – OpenAI, Google Gemini,
Anthropic and Meta – come from [Simple Icons](https://github.com/simple-icons/simple-icons)
and are released under **CC0 1.0**, which is GPL-compatible. Full details, including
what was removed and why, are listed in `assets/icons/providers/ATTRIBUTION.md`.

An icon is bundled **only where it is the provider’s actual mark**, with no generic
fallback artwork. Every other provider is shown as a short text abbreviation instead,
because an invented symbol would tell a reader nothing about which tool was used.

Trademarks remain the property of their respective owners. The icons identify the
tool an author worked with and imply no affiliation with, or endorsement by, those
companies.

### 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.

## Screenshots

[⌊Settings page demonstrating provider selection and WCAG reminders.⌉⌊Settings page
demonstrating provider selection and WCAG reminders.⌉[

Settings page demonstrating provider selection and WCAG reminders.

[⌊Block editor inspector with transparency-focused controls.⌉⌊Block editor inspector
with transparency-focused controls.⌉[

Block editor inspector with transparency-focused controls.

[⌊Front-end disclosure card with neutral badges and accessible <aside> scaffolding.⌉⌊
Front-end disclosure card with neutral badges and accessible <aside> scaffolding
.⌉[

Front-end disclosure card with neutral badges and accessible `<aside>` scaffolding.

## Blocks

This plugin provides 1 block.

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

## Installation

#### 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.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Desk9 AI Content Disclosure” is open source software. The following people have
contributed to this plugin.

Contributors

 *   [ Desk9 Design ](https://profiles.wordpress.org/desk9/)

[Translate “Desk9 AI Content Disclosure” into your language.](https://translate.wordpress.org/projects/wp-plugins/desk9-ai-content-disclosure)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/desk9-ai-content-disclosure/),
check out the [SVN repository](https://plugins.svn.wordpress.org/desk9-ai-content-disclosure/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/desk9-ai-content-disclosure/)
by [RSS](https://plugins.trac.wordpress.org/log/desk9-ai-content-disclosure/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.4.2

 * The **provider list under Settings** is now one bordered list instead of fifteen
   loose checkboxes stacked on top of each other: one row per tool, the whole row
   is the click target rather than the checkbox alone, and a selected row is shaded
   so the current choice reads at a glance.
 * Every row now carries the **mark the front end would draw** – the bundled logo
   where one exists, and the short text badge the renderer falls back to everywhere
   else. You can see which is which before you tick anything.
 * New: a **selected count** above the list, plus **Select all** and **Clear**.
 * **The list no longer hides anything.** Since 1.4.0, picking « Icons » removed
   every provider without a bundled logo from the list, which cut fifteen entries
   down to four and read like the plugin had dropped the rest. All fifteen are back
   and all of them stay selectable; while « Icons » is the display mode each one
   without a logo simply says _shows as a text badge_, which is what the renderer
   has always done for it anyway.
 * Keyboard focus outlines the whole row; previously it was only visible on the 
   checkbox itself.
 * Housekeeping: the plugin’s source now uses plain ASCII throughout. Typographic
   dashes and curly quotes in interface strings, in this readme and in code comments
   were replaced with `-` and straight quotes, because a site whose `blog_charset`
   is not UTF-8 rendered them as mojibake. The wording is otherwise the same, but
   the affected strings count as new for translators and need translating again.
   The separator on the image pill is unchanged and still renders as a middot.
 * Settings only. No stored option, no post meta and no front-end output changes,
   and a provider already ticked stays ticked.

#### 1.4.1

 * Repairs the **1.4.0 package**, which reached WordPress.org incomplete: several
   files – including `includes/class-deskaico-image-badge.php`, which the plugin
   loads on every request – were never committed to the release tag. Installing 
   or updating to 1.4.0 therefore ended in a fatal error. Nothing else changed; 
   1.4.1 is 1.4.0 with all of its files.

#### 1.4.0

 * New: **design directions** for the notice. The existing look is now named **Classic**
   and remains the default, joined by _Accent bar_ (clear and official, with a small
   heading and the same sparkle the image pill uses), _Minimal_ (reads like a footnote),
   _Editorial_ (serif, masthead tone), _Technical_ (monospace marker) and _Soft_(
   frameless, rounded, warm).
 * New: six **color schemes** – neutral grey, blue, warm grey/sand, green, violet
   and black-and-white – each setting background, border and text together at a 
   verified contrast ratio of at least 4.5:1. Every scheme also carries a dark variant
   that can follow the visitor’s system preference.
 * New: **Custom colors** as the seventh option. Choosing it reveals the individual
   color fields – background, border and now text as well – each as a WordPress 
   color picker: a swatch that opens the picker, with the hex value still editable
   as text. Picking a ready-made scheme hides those fields and shows that scheme’s
   palette as read-only swatches instead, including its dark variant.
 * The text color is new and defaults to empty, meaning the notice keeps inheriting
   the color from your theme exactly as before.
 * Existing sites are untouched: Classic plus Custom colors is what an update selects,
   so the notice keeps looking exactly as before until you change it.
 * Per-block color overrides still win over a scheme, so a single placement can 
   deviate deliberately.
 * New providers: **Mistral AI, xAI / Grok, DeepSeek, Perplexity, Adobe Firefly,
   Black Forest Labs (FLUX)** and **Leonardo.ai** – fifteen entries in total, still
   with « Other » for anything not listed.
 * Icons now ship **only where the provider’s actual logo is bundled**, with no 
   generic stand-in artwork at all – the « Other » gear and the generic sparkle 
   went too, so an unbranded chip is now always plain text. Invented motifs for 
   Midjourney and Stability AI were removed, and so was the Copilot icon, which 
   was in fact the _GitHub_ Copilot mark – a different product. Those providers 
   fall back to their abbreviation badge, which the renderer already did on its 
   own. A made-up logo tells a reader nothing about which tool was used, and one
   drawn close enough to be recognised would be a knock-off.
 * While **Icons** is the selected display style, the provider list only offers 
   the ones a real logo exists for. Anything you already ticked stays visible and
   keeps working, so no stored selection can go missing.
 * The provider list is now handed to the block editor from PHP instead of being
   repeated in three JavaScript bundles, where it had already fallen out of step.
 * Fix: `other.svg`, the icon for the **« Other » provider**, contained two raw 
   control characters in a comment and was therefore not well-formed XML. Browsers
   refused to render it, so the chip stayed blank whenever « Other » was shown in
   icon mode. Present since the first release.
 * New: a **Restore bundled wording** button under each disclaimer preset. Once 
   you have edited a preset there was previously no way back to the shipped text;
   the button rebuilds it from the plugin’s own wording plus the lead sentence of
   the selected usage scope.
 * All directions render from one shared markup tree and rearrange through CSS, 
   so the editor preview and the front end cannot drift apart.

#### 1.3.0

 * New: **mark individual images as AI generated or AI edited**. The marking is 
   stored on the image itself, so it follows the picture everywhere it is used –
   featured image, archive listings and images placed in post content, including
   inside galleries.
 * Mark images from wherever you happen to be: a pair of fields in the media library
   next to the alt text, or an **AI disclosure panel on the selected image block**,
   so a picture you just inserted can be flagged without opening the media library
   at all.
 * Record the **tool** that made the image and let the pill name it, for example«
   AI generated – Midjourney ».
 * New: an optional **overlay pill** on marked images – choose the corner, the size,
   icon-only or icon plus wording, and your own text. Icon-only keeps the wording
   available to screen readers rather than dropping it.
 * Marked images carry the pill **in the block editor too**, so you see the marking
   while writing rather than only after publishing.
 * The pill is drawn over the picture with CSS and never alters the image file, 
   so it disappears when the picture is downloaded or screenshotted – the settings
   screen says so plainly rather than implying a permanent watermark.
 * Styled entirely through CSS custom properties, so its look can be retuned from
   a child theme without touching plugin markup.
 * Off by default; enabling the pill under **Settings > Image marking** is what 
   makes marked images show it.

#### 1.2.0

 * The block editor preview is now produced by the block’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.

## Meta

 *  Version **1.4.2**
 *  Last updated **3 semaines ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.2 or higher **
 *  Tested up to **7.1.3**
 *  PHP version ** 7.4 or higher **
 *  Language
 * [English (US)](https://wordpress.org/plugins/desk9-ai-content-disclosure/)
 * Tags
 * [AI](https://tah.wordpress.org/plugins/tags/ai/)[block-editor](https://tah.wordpress.org/plugins/tags/block-editor/)
   [disclosure](https://tah.wordpress.org/plugins/tags/disclosure/)[gutenberg](https://tah.wordpress.org/plugins/tags/gutenberg/)
   [transparency](https://tah.wordpress.org/plugins/tags/transparency/)
 *  [Advanced View](https://tah.wordpress.org/plugins/desk9-ai-content-disclosure/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/desk9-ai-content-disclosure/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/desk9-ai-content-disclosure/reviews/)

## Contributors

 *   [ Desk9 Design ](https://profiles.wordpress.org/desk9/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/desk9-ai-content-disclosure/)