Pick one option on an image – generated by AI, or a real image modified using AI – and every place that image shows up on your site carries the matching disclosure label – featured images, images in content, galleries, images your theme renders through the standard WordPress functions.
The mark is stored on the attachment, not on the post. Mark a file once and it stays marked wherever it is reused. Deleting the plugin leaves those marks on your images, so you never come back to a media library that needs marking from scratch; a setting removes them on uninstall if you want a clean slate.
Why this exists
The EU AI Act (Article 50) has applied since 2 August 2026. Among other things, anyone who publishes AI-generated or AI-manipulated images of real people, objects, places or events in a way that could pass for authentic has to disclose it visibly. This plugin does not decide which of your images need that – you do. It makes publishing the disclosure a single checkbox instead of a manual caption you will forget on the fifth post.
Two kinds of disclosure
A fully synthetic image and a real photograph an AI has altered both need disclosing, but they are not the same claim, and a reader can tell the difference. So each gets its own label text, which you control.
What it does
Where it reaches automatically
post_thumbnail_html).wp_get_attachment_image() – most themes, most custom loops.Images the theme prints itself (ACF, sliders, page builders)
A template that prints <img src="<?php echo $field['url']; ?>"> straight from an ACF field passes through no WordPress filter at all, so there is nothing to hook. Switch on Images the theme prints itself in the settings and the finished page is scanned instead.
It is not a general image parser: the plugin already knows which attachments you marked – usually a handful – so it builds a file-name list for those files only (original plus every registered size) and looks for exactly those names. No database query per image, and because the match is on the file name, a CDN or an offloaded upload path still matches. <picture> elements from WebP converters are handled as a whole.
If you would rather not have the page scanned, put the label in the template yourself:
<?php aidl_label( $attachment_id ); ?>
or in content: [aidl_disclosure id="123"]
Filters
aidl_label_text – ( $text, $attachment_id, $variant, $mode )aidl_badge_text – ( $text, $attachment_id, $mode )Languages
Written in English. Translations, Polish included, are delivered by WordPress.org from translate.wordpress.org – help translate it there.