{"id":98259,"date":"2019-02-20T05:46:35","date_gmt":"2019-02-20T05:46:35","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/ultimate-watermark\/"},"modified":"2026-05-21T02:18:07","modified_gmt":"2026-05-21T02:18:07","slug":"ultimate-watermark","status":"publish","type":"plugin","link":"https:\/\/cn.wordpress.org\/plugins\/ultimate-watermark\/","author":16710861,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.1.4","stable_tag":"2.1.4","tested":"7.0","requires":"5.0","requires_php":"7.4","requires_plugins":null,"header_name":"Ultimate Watermark","header_author":"MantraBrain","header_description":"Watermark plugin for WordPress media.","assets_banners_color":"2a465a","last_updated":"2026-05-21 02:18:07","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/mantrabrain.com\/plugins\/ultimate-watermark","header_plugin_uri":"https:\/\/mantrabrain.com\/ultimate-watermark","header_author_uri":"https:\/\/mantrabrain.com","rating":3.3,"author_block_rating":0,"active_installs":1000,"downloads":28394,"num_ratings":11,"support_threads":2,"support_threads_resolved":2,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.1":{"tag":"1.0.1","author":"mantrabrain","date":"2019-04-14 11:51:22"},"1.0.10":{"tag":"1.0.10","author":"mantrabrain","date":"2023-02-04 16:08:06"},"1.0.11":{"tag":"1.0.11","author":"mantrabrain","date":"2023-11-25 13:53:35"},"1.0.2":{"tag":"1.0.2","author":"mantrabrain","date":"2019-04-14 11:51:22"},"1.0.3":{"tag":"1.0.3","author":"mantrabrain","date":"2020-04-04 12:39:47"},"1.0.4":{"tag":"1.0.4","author":"mantrabrain","date":"2022-02-01 11:30:38"},"1.0.5":{"tag":"1.0.5","author":"mantrabrain","date":"2022-02-01 11:46:22"},"1.0.6":{"tag":"1.0.6","author":"mantrabrain","date":"2022-04-06 16:31:54"},"1.0.7":{"tag":"1.0.7","author":"mantrabrain","date":"2022-04-07 10:00:07"},"1.0.8":{"tag":"1.0.8","author":"mantrabrain","date":"2022-05-26 05:32:30"},"1.0.9":{"tag":"1.0.9","author":"mantrabrain","date":"2022-12-13 15:09:43"},"1.1":{"tag":"1.1","author":"mantrabrain","date":"2025-07-23 12:44:41"},"1.1.1":{"tag":"1.1.1","author":"mantrabrain","date":"2025-10-06 01:47:52"},"2.0":{"tag":"2.0","author":"mantrabrain","date":"2026-02-19 12:02:04"},"2.0.1":{"tag":"2.0.1","author":"mantrabrain","date":"2026-02-20 05:00:16"},"2.0.2":{"tag":"2.0.2","author":"mantrabrain","date":"2026-02-20 05:42:16"},"2.0.3":{"tag":"2.0.3","author":"mantrabrain","date":"2026-02-20 08:37:05"},"2.0.4":{"tag":"2.0.4","author":"mantrabrain","date":"2026-02-26 05:52:20"},"2.0.5":{"tag":"2.0.5","author":"mantrabrain","date":"2026-03-21 04:47:52"},"2.0.6":{"tag":"2.0.6","author":"mantrabrain","date":"2026-04-05 10:53:12"},"2.0.7":{"tag":"2.0.7","author":"mantrabrain","date":"2026-04-05 11:17:38"},"2.0.8":{"tag":"2.0.8","author":"mantrabrain","date":"2026-04-27 12:54:02"},"2.1.0":{"tag":"2.1.0","author":"mantrabrain","date":"2026-05-10 12:24:58"},"2.1.1":{"tag":"2.1.1","author":"mantrabrain","date":"2026-05-11 02:14:55"},"2.1.2":{"tag":"2.1.2","author":"mantrabrain","date":"2026-05-11 02:19:09"},"2.1.3":{"tag":"2.1.3","author":"mantrabrain","date":"2026-05-20 13:43:13"},"2.1.4":{"tag":"2.1.4","author":"mantrabrain","date":"2026-05-21 02:18:07"}},"upgrade_notice":{"2.1.4":"<p>Compatibility bump for WordPress 7.0 \u2014 clears the &quot;untested on this version&quot; warning in the installer. No code changes; safe to upgrade.<\/p>","2.1.3":"<p>Critical fix for text watermarks on minimal\/shared hosts (IONOS and similar) where missing system fonts produced FreeType errors \u2014 the plugin now ships its own bundled TTFs. Also fixes the Cancel button on confirmation modals running the action, Pro Google Fonts not rendering on the actually-applied watermark, and a &quot;Remove All&quot; cleanup bug that could affect unrelated attachments. Recommended for everyone.<\/p>","2.1.0":"<p>Major reliability release: rules engine fixed (empty rules now apply everywhere, all 14+ operators implemented, multi-value taxonomies), Pro WooCommerce per-product\/per-category watermarks fire on save with variation support, Pro placeholders resolve to the attachment uploader and use locale-aware dates, Live Preview fixed, dashboard stats fixed, full design overhaul, new onboarding notice system. Recommended for everyone.<\/p>","2.0.8":"<p>Fixed legacy targeting rules and REST API watermarking compatibility.<\/p>","2.0.7":"<p>Fixes a media popup toggle issue affecting some editors. Recommended.<\/p>","2.0.5":"<p>Fixes Settings page JavaScript errors. Required if you can&#039;t save settings.<\/p>","2.0.0":"<p>Major architectural rewrite. Free version limited to 1 watermark \u2014 review the Pro plan if you need more.<\/p>"},"ratings":{"1":4,"2":1,"3":0,"4":0,"5":6},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3465576,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128}},"assets_banners":{"banner-772x250.png":{"filename":"banner-772x250.png","revision":3465576,"resolution":"772x250","location":"assets","locale":"","width":1824,"height":576}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.1","1.0.10","1.0.11","1.0.2","1.0.3","1.0.4","1.0.5","1.0.6","1.0.7","1.0.8","1.0.9","1.1","1.1.1","2.0","2.0.1","2.0.2","2.0.3","2.0.4","2.0.5","2.0.6","2.0.7","2.0.8","2.1.0","2.1.1","2.1.2","2.1.3","2.1.4"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3465062,"resolution":"1","location":"assets","locale":"","width":2552,"height":1520},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3465062,"resolution":"2","location":"assets","locale":"","width":2540,"height":1536},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3465062,"resolution":"3","location":"assets","locale":"","width":2530,"height":1540},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3465062,"resolution":"4","location":"assets","locale":"","width":2554,"height":1548},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3465062,"resolution":"5","location":"assets","locale":"","width":2202,"height":1452},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3465062,"resolution":"6","location":"assets","locale":"","width":2468,"height":1448},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3465062,"resolution":"7","location":"assets","locale":"","width":2704,"height":1388}},"screenshots":{"1":"Dashboard \u2014 at-a-glance stats: total images, protected images, protection rate, active templates.","2":"Watermark templates list \u2014 manage all your watermarks with status, position, opacity and usage at a glance.","3":"Add \/ Edit Watermark \u2014 full-form editor with live preview as you change settings.","4":"Live preview sidebar \u2014 see exactly how the watermark will sit on a real photo, refreshed instantly.","5":"Conditional rules builder \u2014 combine image size, post type, category, file size and more with AND \/ OR logic.","6":"Backups \u2014 every original is preserved; restore one or many in a click.","7":"WooCommerce per-product override (Pro) \u2014 set a different watermark on a single product.","8":"Searchable Google Fonts picker (Pro) \u2014 every typeface rendered in its own font, with instant search.","9":"Pro Features comparison page \u2014 see what's in free vs. Pro."}},"plugin_section":[],"plugin_tags":[19833,25087,163,3241,13833],"plugin_category":[50],"plugin_contributors":[166300],"plugin_business_model":[],"class_list":["post-98259","plugin","type-plugin","status-publish","hentry","plugin_tags-image-protection","plugin_tags-image-watermark","plugin_tags-images","plugin_tags-watermark","plugin_tags-watermarking","plugin_category-media","plugin_contributors-mantrabrain","plugin_committers-mantrabrain","plugin_committers-ughimire1"],"banners":{"banner":"https:\/\/ps.w.org\/ultimate-watermark\/assets\/banner-772x250.png?rev=3465576","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/ultimate-watermark\/assets\/icon-128x128.png?rev=3465576","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/ultimate-watermark\/assets\/screenshot-1.png?rev=3465062","caption":"Dashboard \u2014 at-a-glance stats: total images, protected images, protection rate, active templates."},{"src":"https:\/\/ps.w.org\/ultimate-watermark\/assets\/screenshot-2.png?rev=3465062","caption":"Watermark templates list \u2014 manage all your watermarks with status, position, opacity and usage at a glance."},{"src":"https:\/\/ps.w.org\/ultimate-watermark\/assets\/screenshot-3.png?rev=3465062","caption":"Add \/ Edit Watermark \u2014 full-form editor with live preview as you change settings."},{"src":"https:\/\/ps.w.org\/ultimate-watermark\/assets\/screenshot-4.png?rev=3465062","caption":"Live preview sidebar \u2014 see exactly how the watermark will sit on a real photo, refreshed instantly."},{"src":"https:\/\/ps.w.org\/ultimate-watermark\/assets\/screenshot-5.png?rev=3465062","caption":"Conditional rules builder \u2014 combine image size, post type, category, file size and more with AND \/ OR logic."},{"src":"https:\/\/ps.w.org\/ultimate-watermark\/assets\/screenshot-6.png?rev=3465062","caption":"Backups \u2014 every original is preserved; restore one or many in a click."},{"src":"https:\/\/ps.w.org\/ultimate-watermark\/assets\/screenshot-7.png?rev=3465062","caption":"WooCommerce per-product override (Pro) \u2014 set a different watermark on a single product."}],"raw_content":"<!--section=description-->\n<p><strong>Ultimate Watermark<\/strong> is a powerful, photographer-grade image watermark plugin for WordPress. Add a copyright text or logo to every image you upload, batch-watermark thousands of existing photos, protect WooCommerce product galleries, and restore the originals anytime \u2014 all without leaving wp-admin.<\/p>\n\n<p>Built for photographers, content creators, bloggers, and e-commerce stores who need real protection without bloated dependencies, watermarking server services, or destructive edits.<\/p>\n\n<h3>Quick Links<\/h3>\n\n<ul>\n<li>\ud83d\udd17 <a href=\"https:\/\/mantrabrain.com\/plugins\/ultimate-watermark\">View Plugin Page<\/a><\/li>\n<li>\ud83d\ude80 <a href=\"https:\/\/try.new\/plugins\/ultimate-watermark\">Try Ultimate Watermark Free<\/a><\/li>\n<li>\ud83d\udc8e <a href=\"https:\/\/mantrabrain.com\/plugins\/ultimate-watermark\/#pricing\">View Pro<\/a><\/li>\n<li>\ud83d\udcda <a href=\"https:\/\/ultimate-watermark.mantrabrain.com\/docs\/\">View Documentation<\/a><\/li>\n<\/ul>\n\n<p>[youtube https:\/\/youtu.be\/6QcDWgtaJRU]<\/p>\n\n<h4>Why choose Ultimate Watermark<\/h4>\n\n<p>Unlike basic watermark plugins, Ultimate Watermark gives you:<\/p>\n\n<ul>\n<li><strong>Automatic backup &amp; restore<\/strong> \u2014 originals are saved before watermarking; one click and every image is back the way you uploaded it.<\/li>\n<li><strong>Native WooCommerce support<\/strong> \u2014 bulk-watermark all product images, including gallery and variation images.<\/li>\n<li><strong>Professional positioning<\/strong> \u2014 9 anchor points, pixel\/percentage offsets, rotation, opacity, scale, custom dimensions.<\/li>\n<li><strong>Photographer-friendly<\/strong> \u2014 EXIF and IPTC metadata are preserved; image quality settings are honoured per format.<\/li>\n<li><strong>Conditional rules engine<\/strong> \u2014 apply different watermarks based on image size, post type, file size, dimensions, orientation, user role, post category, product category and more.<\/li>\n<li><strong>Non-destructive on-the-fly mode (Pro)<\/strong> \u2014 watermark how visitors see the image without ever touching the file on disk.<\/li>\n<li><strong>REST API &amp; developer-ready<\/strong> \u2014 proper hooks, filters and PSR-4 architecture so you can extend or integrate with any custom workflow.<\/li>\n<\/ul>\n\n<h4>Core features (Free version)<\/h4>\n\n<p><strong><a href=\"https:\/\/mantrabrain.com\/plugins\/ultimate-watermark\/#pricing\">Watermark types<\/a><\/strong><\/p>\n\n<ul>\n<li>Text watermark \u2014 your copyright string, brand name, URL, or any custom text<\/li>\n<li>Image watermark \u2014 upload a PNG\/JPG\/SVG logo, signature, or stamp<\/li>\n<li>Per-template font, weight, style, decoration, color, and opacity<\/li>\n<li>Rotation, scale, and pixel-level positioning<\/li>\n<\/ul>\n\n<p><strong><a href=\"https:\/\/mantrabrain.com\/plugins\/ultimate-watermark\/#pricing\">Application modes<\/a><\/strong><\/p>\n\n<ul>\n<li>Automatic \u2014 watermark every image as it's uploaded to the media library<\/li>\n<li>Bulk \u2014 watermark hundreds of existing images from the Media Library at once<\/li>\n<li>Manual \u2014 watermark a specific image from its attachment screen<\/li>\n<li>Frontend uploads \u2014 watermark images submitted from frontend forms<\/li>\n<\/ul>\n\n<p><strong><a href=\"https:\/\/mantrabrain.com\/plugins\/ultimate-watermark\/#pricing\">Conditional rules<\/a><\/strong><\/p>\n\n<p>Choose exactly which images get a watermark with rules built in plain English. Combine conditions with AND\/OR logic:<\/p>\n\n<ul>\n<li>Image size (thumbnail, medium, large, full, plus your theme's custom sizes)<\/li>\n<li>Post type (posts, pages, products, custom post types)<\/li>\n<li>File type (jpeg, png, gif, webp)<\/li>\n<li>File size, image width, image height<\/li>\n<li>Orientation (landscape \/ portrait \/ square)<\/li>\n<li>Aspect ratio<\/li>\n<li>User role<\/li>\n<li>Post category<\/li>\n<li>Product category &amp; product tag (when WooCommerce is active)<\/li>\n<\/ul>\n\n<p><strong><a href=\"https:\/\/mantrabrain.com\/plugins\/ultimate-watermark\/#pricing\">Backup &amp; restore<\/a><\/strong><\/p>\n\n<p>Every original image is preserved before the watermark is burned in:<\/p>\n\n<ul>\n<li>Single-click restore from the Backups admin page<\/li>\n<li>Bulk restore \u2014 wipe watermarks from a whole upload batch<\/li>\n<li>Storage controls \u2014 choose to keep all sizes or just the original<\/li>\n<li>Path-traversal protected and stored under your uploads folder<\/li>\n<\/ul>\n\n<p><strong><a href=\"https:\/\/mantrabrain.com\/plugins\/ultimate-watermark\/#pricing\">Image library compatibility<\/a><\/strong><\/p>\n\n<ul>\n<li>Imagick (preferred \u2014 sharper text rendering and better color fidelity)<\/li>\n<li>GD fallback when Imagick is not installed<\/li>\n<li>Live preview while you edit a watermark template<\/li>\n<li>WebP, JPEG (baseline &amp; progressive), PNG, and GIF output<\/li>\n<\/ul>\n\n<p><strong><a href=\"https:\/\/mantrabrain.com\/plugins\/ultimate-watermark\/#pricing\">Designed for production<\/a><\/strong><\/p>\n\n<ul>\n<li>PSR-4 namespaced source, Composer-loaded<\/li>\n<li>Full i18n support (<code>ultimate-watermark<\/code> text domain)<\/li>\n<li>Right-click protection and drag-and-drop disable for the frontend<\/li>\n<li>Logged-in user role bypass<\/li>\n<li>Sensible defaults \u2014 works the moment it's activated<\/li>\n<\/ul>\n\n<h4>Use cases<\/h4>\n\n<ul>\n<li><strong>Photographers<\/strong> \u2014 protect portfolio shots before publishing, watermark a whole season at once, keep EXIF data intact for clients.<\/li>\n<li><strong>WordPress bloggers<\/strong> \u2014 brand every featured image automatically with your site URL or logo so reposts always link back.<\/li>\n<li><strong>WooCommerce stores<\/strong> \u2014 watermark every product photo with a logo or \"\u00a9 Yourshop\" string; bulk-apply on launch and forget about it.<\/li>\n<li><strong>Stock &amp; marketplace sellers<\/strong> \u2014 sample-watermark previews while keeping clean originals for paid downloads.<\/li>\n<li><strong>News, magazine and content sites<\/strong> \u2014 apply photographer credits to images on upload using dynamic placeholders (Pro).<\/li>\n<\/ul>\n\n<h4>Pro features<\/h4>\n\n<p><a href=\"https:\/\/mantrabrain.com\/plugins\/ultimate-watermark\/#pricing\">Upgrade to Ultimate Watermark Pro<\/a> when you outgrow the free version. The Pro extension stays in lockstep with the free plugin and adds:<\/p>\n\n<ul>\n<li><strong><a href=\"https:\/\/mantrabrain.com\/plugins\/ultimate-watermark\/#pricing\">Unlimited watermark templates<\/a><\/strong> \u2014 free version is limited to 1<\/li>\n<li><strong><a href=\"https:\/\/mantrabrain.com\/plugins\/ultimate-watermark\/#pricing\">Dynamic content placeholders<\/a><\/strong> \u2014 <code>{site_url}<\/code>, <code>{date_long}<\/code>, <code>{user_display_name}<\/code>, <code>{post_title}<\/code>, <code>{custom_field:key}<\/code> and more<\/li>\n<li><strong><a href=\"https:\/\/mantrabrain.com\/plugins\/ultimate-watermark\/#pricing\">EXIF placeholders<\/a><\/strong> \u2014 <code>{camera_model}<\/code>, <code>{aperture}<\/code>, <code>{shutter_speed}<\/code>, <code>{iso}<\/code>, <code>{focal_length}<\/code> for camera-info credits<\/li>\n<li><strong><a href=\"https:\/\/mantrabrain.com\/plugins\/ultimate-watermark\/#pricing\">Google Fonts library<\/a><\/strong> \u2014 30+ curated typefaces (Roboto, Open Sans, Montserrat, Pacifico, Bebas Neue, Playfair Display, \u2026) auto-cached on disk<\/li>\n<li><strong><a href=\"https:\/\/mantrabrain.com\/plugins\/ultimate-watermark\/#pricing\">Searchable font picker<\/a><\/strong> \u2014 every option rendered in its own typeface<\/li>\n<li><strong><a href=\"https:\/\/mantrabrain.com\/plugins\/ultimate-watermark\/#pricing\">WooCommerce per-product watermarks<\/a><\/strong> \u2014 override the global watermark on a single product<\/li>\n<li><strong><a href=\"https:\/\/mantrabrain.com\/plugins\/ultimate-watermark\/#pricing\">WooCommerce per-category watermarks<\/a><\/strong> \u2014 assign a default watermark per product category, with a Product \u2192 Category \u2192 Global cascade<\/li>\n<li><strong><a href=\"https:\/\/mantrabrain.com\/plugins\/ultimate-watermark\/#pricing\">WooCommerce variation image support<\/a><\/strong> \u2014 watermark every variation, not just the parent<\/li>\n<li><strong><a href=\"https:\/\/mantrabrain.com\/plugins\/ultimate-watermark\/#pricing\">On-the-fly display watermarking<\/a><\/strong> \u2014 show watermarks to visitors without modifying source files; admins\/editors bypass automatically<\/li>\n<li><strong><a href=\"https:\/\/mantrabrain.com\/plugins\/ultimate-watermark\/#pricing\">Batch operations<\/a><\/strong> \u2014 apply, replace, or remove watermarks from large image sets via a tracked queue<\/li>\n<li><strong><a href=\"https:\/\/mantrabrain.com\/plugins\/ultimate-watermark\/#pricing\">Advanced conditional rules<\/a><\/strong> \u2014 date ranges, custom fields, and 14+ operators (<code>contains<\/code>, <code>in<\/code>, <code>between<\/code>, <code>greater_equal<\/code>, etc.)<\/li>\n<li><strong><a href=\"https:\/\/mantrabrain.com\/plugins\/ultimate-watermark\/#pricing\">Priority support<\/a><\/strong> \u2014 direct help from the team that built it<\/li>\n<li><strong><a href=\"https:\/\/mantrabrain.com\/plugins\/ultimate-watermark\/#pricing\">Automatic updates<\/a><\/strong> \u2014 receive Pro releases through the WordPress updates UI<\/li>\n<\/ul>\n\n<p><a href=\"https:\/\/mantrabrain.com\/plugins\/ultimate-watermark\/#pricing\">Compare features and view pricing \u2192<\/a><\/p>\n\n<h4>Trusted by<\/h4>\n\n<p>Photographers, e-commerce shops, news sites, and marketplace owners worldwide use Ultimate Watermark to protect their images on WordPress. Every release ships with active support \u2014 opening an issue gets a real response.<\/p>\n\n<h4>Privacy<\/h4>\n\n<p>Ultimate Watermark is fully local. No images, no metadata, and no usage data are ever sent to MantraBrain or to any third party. The Pro updater contacts the licensing server only to validate your key and check for updates.<\/p>\n\n<!--section=installation-->\n<h4>Automatic<\/h4>\n\n<ol>\n<li>In your WordPress admin, go to <em>Plugins \u2192 Add New<\/em>.<\/li>\n<li>Search for <strong>Ultimate Watermark<\/strong>.<\/li>\n<li>Click <em>Install Now<\/em>, then <em>Activate<\/em>.<\/li>\n<li>Go to <em>Watermark \u2192 Add Watermark<\/em> and create your first watermark template.<\/li>\n<li>Upload a new image \u2014 it'll be watermarked automatically.<\/li>\n<\/ol>\n\n<h4>Manual<\/h4>\n\n<ol>\n<li>Download the plugin .zip from WordPress.org.<\/li>\n<li>In wp-admin go to <em>Plugins \u2192 Add New \u2192 Upload Plugin<\/em>.<\/li>\n<li>Choose the file, click <em>Install Now<\/em>, then <em>Activate<\/em>.<\/li>\n<li>Continue from step 4 above.<\/li>\n<\/ol>\n\n<h4>Activating Pro<\/h4>\n\n<ol>\n<li>Install the free plugin first (Pro requires it).<\/li>\n<li>Upload <code>ultimate-watermark-pro.zip<\/code> and activate.<\/li>\n<li>Go to <em>Watermark \u2192 License<\/em> and paste your license key.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20do%20i%20add%20a%20watermark%20to%20all%20images%20in%20wordpress%3F\"><h3>How do I add a watermark to all images in WordPress?<\/h3><\/dt>\n<dd><p>Activate the plugin, go to <em>Watermark \u2192 Add Watermark<\/em>, choose Text or Image, set your position and opacity, and save. From that moment on every new image you upload to WordPress is watermarked automatically. To watermark images you already have, go to the Media Library, select the images you want, and run the <em>Apply Watermark<\/em> bulk action.<\/p><\/dd>\n<dt id=\"can%20i%20remove%20a%20watermark%20and%20restore%20the%20original%20image%3F\"><h3>Can I remove a watermark and restore the original image?<\/h3><\/dt>\n<dd><p>Yes. Ultimate Watermark backs up every original before watermarking. Open <em>Watermark \u2192 Backups<\/em>, select an image, and click <em>Restore<\/em> \u2014 the original file replaces the watermarked one and the size variants regenerate automatically. There is also a bulk-restore action for whole batches.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20preserve%20exif%20metadata%3F\"><h3>Does the plugin preserve EXIF metadata?<\/h3><\/dt>\n<dd><p>Yes. Camera model, lens, ISO, aperture, shutter speed, original capture date, and copyright fields are preserved through the watermarking pipeline so photographers can rely on Ultimate Watermark for portfolio work. The Pro version goes further and lets you embed those EXIF values directly into a text watermark using placeholders like <code>{camera_model} \u00b7 f\/{aperture} \u00b7 ISO {iso}<\/code>.<\/p><\/dd>\n<dt id=\"can%20i%20watermark%20woocommerce%20product%20images%3F\"><h3>Can I watermark WooCommerce product images?<\/h3><\/dt>\n<dd><p>Absolutely.<\/p>\n\n<ul>\n<li><strong>Free<\/strong> \u2014 automatically watermarks every product image as it's uploaded, and you can bulk-apply to the existing catalog from the Media Library.<\/li>\n<li><strong>Pro<\/strong> \u2014 adds per-product overrides (different watermark on a single product), per-category defaults (one watermark for \"Photography Prints\", another for \"Wallpapers\"), and full variation-image support. The cascade is Product \u2192 Category \u2192 Global, so you can set a sensible default and override only where you need to.<\/li>\n<\/ul><\/dd>\n<dt id=\"how%20do%20i%20bulk-watermark%20existing%20images%3F\"><h3>How do I bulk-watermark existing images?<\/h3><\/dt>\n<dd><p>Open <em>Media \u2192 Library<\/em>, switch to list view, select the images you want to watermark, choose <em>Apply Watermark<\/em> in the bulk-actions dropdown, and click <em>Apply<\/em>. The plugin will walk through each image, back up the original, apply your watermark, and regenerate the size variants. For multi-thousand-image catalogues, the Pro batch processor splits the work into chunks so it survives long runs.<\/p><\/dd>\n<dt id=\"will%20it%20slow%20down%20my%20site%20or%20my%20media%20uploads%3F\"><h3>Will it slow down my site or my media uploads?<\/h3><\/dt>\n<dd><p>No. The watermarking pipeline runs once at upload time, never on every page view (unless you enable Pro's <em>on-the-fly display<\/em> mode, which is cached). The plugin is built around the same Imagick \/ GD libraries WordPress core already uses, so you don't need additional services or external API calls.<\/p><\/dd>\n<dt id=\"i%20have%20an%20old%20version%20of%20the%20plugin%20%281.x%29.%20will%20my%20settings%20carry%20over%3F\"><h3>I have an old version of the plugin (1.x). Will my settings carry over?<\/h3><\/dt>\n<dd><p>Yes. On activation a one-time migration converts your 1.x watermark, settings, and per-attachment metadata into the new format. Your existing watermarks and applied-watermark records are preserved.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20page%20builders%20%28elementor%2C%20beaver%20builder%2C%20divi%2C%20bricks%2C%20gutenberg%29%3F\"><h3>Does it work with page builders (Elementor, Beaver Builder, Divi, Bricks, Gutenberg)?<\/h3><\/dt>\n<dd><p>Yes. The plugin operates at the media-library level, so it's invisible to your page builder. Whichever editor you use to display the image, it ends up watermarked.<\/p><\/dd>\n<dt id=\"what%27s%20the%20difference%20between%20automatic%2C%20manual%20and%20bulk%20watermarking%3F\"><h3>What's the difference between automatic, manual and bulk watermarking?<\/h3><\/dt>\n<dd><ul>\n<li><strong>Automatic<\/strong> runs every time a new image is uploaded \u2014 best for \"set and forget\" stores and blogs.<\/li>\n<li><strong>Manual<\/strong> lets you watermark a specific image from its attachment screen \u2014 useful when you want different watermarks per asset.<\/li>\n<li><strong>Bulk<\/strong> runs over a multi-image selection from the media library \u2014 best for retro-fitting a watermark to existing content.<\/li>\n<\/ul><\/dd>\n<dt id=\"is%20there%20a%20free%20watermark%20plugin%20for%20wordpress%3F\"><h3>Is there a free watermark plugin for WordPress?<\/h3><\/dt>\n<dd><p>Yes \u2014 Ultimate Watermark's free version is fully functional: 1 watermark template, automatic + bulk + manual modes, conditional rules, full backup &amp; restore, Imagick\/GD support, and WooCommerce automatic watermarking. The Pro version unlocks unlimited templates, dynamic placeholders, Google Fonts, advanced WooCommerce overrides, and on-the-fly display watermarking.<\/p><\/dd>\n<dt id=\"why%20aren%27t%20my%20watermarks%20applying%3F\"><h3>Why aren't my watermarks applying?<\/h3><\/dt>\n<dd><p>Check the watermark's <em>Rules<\/em> tab. If you've configured conditions, the watermark only applies when those conditions match. To verify, open the watermark, switch to the <em>Rules<\/em> tab, and either remove the rules (empty rules = applies everywhere) or relax them. With WP_DEBUG enabled the plugin logs why each rule failed in <code>wp-content\/debug.log<\/code>.<\/p><\/dd>\n<dt id=\"can%20i%20use%20my%20own%20font%3F\"><h3>Can I use my own font?<\/h3><\/dt>\n<dd><p>Free version uses your server's installed system fonts (Arial, Helvetica, Times, Verdana, Courier, Georgia). Pro adds 30+ Google Fonts (Roboto, Open Sans, Lato, Montserrat, Poppins, Playfair Display, Pacifico, Bebas Neue, and more) \u2014 they're downloaded once and cached locally so your watermarks render the same on every render.<\/p><\/dd>\n<dt id=\"will%20it%20work%20with%20my%20cdn%20%2F%20cloudflare%20%2F%20object-storage%20uploads%3F\"><h3>Will it work with my CDN \/ Cloudflare \/ object-storage uploads?<\/h3><\/dt>\n<dd><p>Yes. Watermarking happens before the image is handed off to a CDN or object store, so the file your CDN serves is already watermarked. If you use an offload plugin that uploads directly to S3\/R2\/DigitalOcean Spaces, ensure Ultimate Watermark loads earlier than the offload plugin (priority <code>9<\/code> versus the offload plugin's default <code>10<\/code>).<\/p><\/dd>\n<dt id=\"does%20it%20support%20rest%20api%20uploads%3F\"><h3>Does it support REST API uploads?<\/h3><\/dt>\n<dd><p>Yes. Images uploaded via the REST API (Gutenberg, headless front-ends, mobile apps) are watermarked the same way as classic-uploader uploads.<\/p><\/dd>\n<dt id=\"how%20do%20i%20uninstall%3F\"><h3>How do I uninstall?<\/h3><\/dt>\n<dd><p>Deactivate the plugin from <em>Plugins \u2192 Installed Plugins<\/em>. Watermarked images are NOT reverted to originals \u2014 restore them via <em>Watermark \u2192 Backups \u2192 Bulk restore<\/em> before deactivating if you want to remove watermarks. Deleting the plugin cleans up its database tables; the backup files in <code>\/wp-content\/uploads\/ulwm-backup\/<\/code> are kept by default and can be removed manually.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.1.4 - 2026\/05\/21<\/h4>\n\n<ul>\n<li><strong>Compatibility<\/strong> - Tested and verified against WordPress 7.0. The \"Tested up to\" header is bumped so the WordPress.org installer no longer warns site owners running 7.0 that the plugin is untested on their version.<\/li>\n<\/ul>\n\n<h4>2.1.3 - 2026\/05\/20<\/h4>\n\n<ul>\n<li><strong>Fixed<\/strong> - Text watermarks failed to render on minimal\/shared hosts (e.g. IONOS) with the cryptic FreeType error \"unable to read font &#096;'\". The plugin now ships three SIL OFL-licensed TTFs in <code>assets\/fonts\/<\/code> (Nunito sans, Merriweather serif, JetBrains Mono) so text rendering works regardless of host environment, with the family picker mapped to its closest bundled stand-in.<\/li>\n<li><strong>Fixed<\/strong> - Selected Google Fonts (Pro) didn't render on the actually-applied watermark even though the preview showed them correctly. Load-time font validator was rejecting non-system families and silently reverting to Arial; now consults the <code>ultimate_watermark_allowed_fonts<\/code> filter so Pro typefaces survive the save \u2192 load round trip.<\/li>\n<li><strong>Fixed<\/strong> - Imagick text watermarks on macOS Homebrew silently fell back to Helvetica when the plugin path contained a space (e.g. Local-by-Flywheel's \"Local Sites\/\" folder). MVG was dropping the path; we now mirror the resolved font onto the Imagick image as well as the draw object.<\/li>\n<li><strong>Fixed<\/strong> - \"Remove All Watermarks\" on the media edit screen could delete files belonging to unrelated attachments because the cleanup loop globbed <code>imagename-*.*<\/code> and matched siblings like <code>imagename-2.webp<\/code>, then produced confusing \"image does not exist\" warnings during regen. Cleanup is now driven entirely from <code>wp_get_attachment_metadata()['sizes']<\/code> so only this attachment's size files are touched.<\/li>\n<li><strong>Fixed<\/strong> - Cancel button on every confirmation modal (Remove All, Delete Watermark, Bulk Delete, Media Library bulk action) was running the destructive action because <code>UWNotifications.confirm()<\/code> resolves with the action string and the callers were doing <code>if (confirmed)<\/code> \u2014 truthy for the string <code>'cancel'<\/code>. All five call sites now check <code>action === 'confirm'<\/code> explicitly.<\/li>\n<li><strong>Improved<\/strong> - Fail-fast <code>RuntimeException<\/code> with a clear message if the bundled font is somehow missing, instead of letting FreeType emit its cryptic error.<\/li>\n<li><strong>Improved<\/strong> - Removed verbose per-render <code>error_log()<\/code> traces (\"Imagick: family=\u2026 \u2192 using font\u2026\", etc.) \u2014 debug.log stays quiet in production while <code>WP_DEBUG<\/code> is off.<\/li>\n<\/ul>\n\n<h4>2.1.2 - 2026\/05\/11<\/h4>\n\n<ul>\n<li><strong>Fixed<\/strong> - Optimized plugin title for maximum SEO visibility with comprehensive keywords<\/li>\n<li><strong>Fixed<\/strong> - Added Quick Links section with emojis for better user navigation<\/li>\n<li><strong>Fixed<\/strong> - Updated YouTube video link to proper demo content<\/li>\n<\/ul>\n\n<h4>2.1.1 - 2026\/05\/11<\/h4>\n\n<ul>\n<li><strong>Fixed<\/strong> - Updated plugin title to comply with WordPress.org guidelines (removed WordPress from title)<\/li>\n<li><strong>Fixed<\/strong> - Improved title for better SEO optimization<\/li>\n<\/ul>\n\n<h4>2.1.0 - 2026\/05\/10<\/h4>\n\n<ul>\n<li>New: Google Fonts integration in Pro \u2014 30+ curated typefaces with on-disk caching and a searchable font picker that renders each option in its own typeface.<\/li>\n<li>New: WooCommerce auto-apply on product save (Pro) \u2014 the per-product \/ per-category cascade now actually fires when you save a product, including for variations.<\/li>\n<li>New: Onboarding notice system \u2014 review prompt after 7 days, upgrade-to-Pro nudge after 10 days (only if Pro isn't active); both with snooze-once-then-forever lifecycle.<\/li>\n<li>New: Image Watermark \/ Get Pro identity \u2014 distinct orange CTA so the upgrade path is unmistakable on the menu, plugins-row link, upgrade page and limit modal.<\/li>\n<li>New: Filter <code>ultimate_watermark_resolve_font_path<\/code> lets Pro \/ third-party plugins inject custom font files into the rendering pipeline.<\/li>\n<li>New: Action <code>ultimate_watermark_admin_enqueue_scripts<\/code> lets Pro hook its admin assets at the right point in the asset pipeline.<\/li>\n<li>Fixed: Live preview \"Preview Error\" \u2014 Imagick processor now resolves real TTF files from disk, scales watermark data for the preview source, and surfaces the actual error message to the admin.<\/li>\n<li>Fixed: Empty rules array now means \"apply everywhere\" instead of \"never apply\" \u2014 matches user expectations and other watermarking plugins.<\/li>\n<li>Fixed: Rule operator whitelist expanded to match the Pro UI \u2014 <code>greater_equal<\/code>, <code>less_equal<\/code>, <code>contains<\/code>, <code>not_contains<\/code>, <code>starts_with<\/code>, <code>ends_with<\/code>, <code>in<\/code>, <code>not_in<\/code>, <code>between<\/code>, <code>not_between<\/code> are now actually saved and evaluated.<\/li>\n<li>Fixed: Date-range rules compare via Unix timestamp instead of <code>floatval()<\/code> of a date string.<\/li>\n<li>Fixed: <code>product_cat<\/code> \/ <code>product_tag<\/code> rules with <code>contains<\/code>, <code>in<\/code>, <code>not_in<\/code> and other multi-value operators now correctly evaluate against every term on the product.<\/li>\n<li>Fixed: Pro user placeholders (<code>{user_display_name}<\/code>, <code>{user_email}<\/code>, etc.) now resolve to the attachment uploader, then the parent post's author, then current user \u2014 not just the logged-in admin.<\/li>\n<li>Fixed: Pro date placeholders use <code>wp_date()<\/code> (locale-aware) and the attachment's upload time instead of server time.<\/li>\n<li>Fixed: Watermark preview now sets attachment context so EXIF \/ user \/ post placeholders resolve to real values during template editing.<\/li>\n<li>Fixed: WooCommerce category form now includes a CSRF nonce on save.<\/li>\n<li>Fixed: Update Watermark button on the edit screen no longer reverts to \"Create Watermark\" after saving.<\/li>\n<li>Fixed: Dashboard \"Protected Images\" and \"Protection Rate\" counters were stuck at 0 because they queried a legacy meta key \u2014 now match every flag the watermark pipeline writes.<\/li>\n<li>Fixed: Asset registry now matches the actual hook suffix WordPress emits for submenu pages, so every page-specific stylesheet loads correctly.<\/li>\n<li>Improved: Unified design system across all admin pages \u2014 single blue brand, single orange Pro identity, full-width layouts, polished header\/footer with inline SVG icons, redesigned backup pagination, redesigned confirmation modal alignment.<\/li>\n<li>Improved: MediaEditIntegration now pulls in the design tokens from <code>admin.css<\/code> so the attachment-screen panel inherits the same look.<\/li>\n<li>Improved: Documentation URL moved to <code>https:\/\/ultimate-watermark.mantrabrain.com\/docs\/<\/code>.<\/li>\n<\/ul>\n\n<h4>2.0.8 - 2026\/04\/27<\/h4>\n\n<ul>\n<li>Fixed legacy targeting rules and REST API watermarking issues.<\/li>\n<li>Improved compatibility with custom rule combinations.<\/li>\n<\/ul>\n\n<h4>2.0.7 - 2025\/06\/15<\/h4>\n\n<ul>\n<li>Fixed media popup toggle reliability across all WordPress pages.<\/li>\n<li>Improved compatibility with the block editor and classic editor uploads.<\/li>\n<\/ul>\n\n<h4>2.0.6 - 2025\/05\/20<\/h4>\n\n<ul>\n<li>Added WordPress.org language pack support.<\/li>\n<li>Improved post-upload hook isolation to avoid conflicts with other plugins.<\/li>\n<\/ul>\n\n<h4>2.0.5 - 2025\/04\/18<\/h4>\n\n<ul>\n<li>Fixed JavaScript errors on the Settings page that prevented saving.<\/li>\n<\/ul>\n\n<h4>2.0.4 - 2025\/03\/25<\/h4>\n\n<ul>\n<li>Improved REST API integration for headless WordPress sites.<\/li>\n<\/ul>\n\n<h4>2.0.3 - 2025\/03\/05<\/h4>\n\n<ul>\n<li>Compatibility improvements with WooCommerce 9.x.<\/li>\n<\/ul>\n\n<h4>2.0.2 - 2025\/02\/14<\/h4>\n\n<ul>\n<li>Performance improvements when bulk-watermarking large image sets.<\/li>\n<\/ul>\n\n<h4>2.0.1 - 2025\/02\/01<\/h4>\n\n<ul>\n<li>Bug fixes and stability improvements.<\/li>\n<\/ul>\n\n<h4>2.0.0 - 2025\/01\/15<\/h4>\n\n<ul>\n<li>Major rewrite: PSR-4 architecture, unified WatermarkService, REST API support.<\/li>\n<li>Free version limited to 1 watermark template.<\/li>\n<li>Pro version adds unlimited templates, dynamic placeholders, on-the-fly display, batch operations, WooCommerce per-product \/ per-category overrides.<\/li>\n<\/ul>","raw_excerpt":"Bulk watermark WordPress images. Add a copyright text or logo watermark to media, photos and WooCommerce products. Backup originals &amp; restore anytime.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/98259","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=98259"}],"author":[{"embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/mantrabrain"}],"wp:attachment":[{"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=98259"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=98259"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=98259"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=98259"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=98259"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=98259"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}