{"id":294342,"date":"2026-04-28T13:33:46","date_gmt":"2026-04-28T13:33:46","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/frontend-image-replace\/"},"modified":"2026-04-29T06:47:29","modified_gmt":"2026-04-29T06:47:29","slug":"bm1-frontend-image-replace","status":"publish","type":"plugin","link":"https:\/\/pt.wordpress.org\/plugins\/bm1-frontend-image-replace\/","author":17344019,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.2.2","stable_tag":"1.2.2","tested":"6.9.4","requires":"5.4","requires_php":"7.4","requires_plugins":null,"header_name":"BM1 Frontend Image Replace","header_author":"Baumg\u00e4rtner Marketing GmbH","header_description":"Upload new images to the WordPress media library directly from the frontend and swap them into your content. Perfect for replacing demo\/placeholder images during development.","assets_banners_color":"474d65","last_updated":"2026-04-29 06:47:29","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wp-frontend-image-replace.com","header_author_uri":"https:\/\/bm1.de","rating":0,"author_block_rating":0,"active_installs":0,"downloads":64,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.2":{"tag":"1.2.2","author":"phillipb","date":"2026-04-29 06:47:29"}},"upgrade_notice":{"1.2.2":"<p>Unlimited image replacements for all users. Naming prefix unified. Pro-only code properly separated.<\/p>","1.2.1":"<p>Fixes WordPress.org plugin review issues: input sanitization, output escaping, Freemius compliance.<\/p>","1.2.0":"<p>Plugin renamed to &quot;BM1 Frontend Image Replace&quot; for WordPress.org directory listing.<\/p>","1.1.2":"<p>Automated Freemius deployment pipeline.<\/p>","1.1.1":"<p>Site logo is now excluded from replacement. Use fir-no-replace class to exclude other images.<\/p>","1.1.0":"<p>New activity log to track all image replacements. Bug fix for non-logged-in users.<\/p>","1.0.0":"<p>First stable release with Free and Pro plans.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3518003,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3518003,"resolution":"256x256","location":"assets","locale":""},"icon.svg":{"filename":"icon.svg","revision":3518003,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3518005,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3518005,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.2"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3518010,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3518010,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3518010,"resolution":"3","location":"assets","locale":""}},"screenshots":{"1":"Hover overlay on a replaceable image","2":"Settings page with enable toggle and access link management","3":"Activity log showing all image replacements (Pro)"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[734,2250,163,84,7854],"plugin_category":[50],"plugin_contributors":[261350],"plugin_business_model":[],"class_list":["post-294342","plugin","type-plugin","status-publish","hentry","plugin_tags-development","plugin_tags-frontend","plugin_tags-images","plugin_tags-media","plugin_tags-replace","plugin_category-media","plugin_contributors-phillipb","plugin_committers-phillipb"],"banners":{"banner":"https:\/\/ps.w.org\/bm1-frontend-image-replace\/assets\/banner-772x250.png?rev=3518005","banner_2x":"https:\/\/ps.w.org\/bm1-frontend-image-replace\/assets\/banner-1544x500.png?rev=3518005","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/bm1-frontend-image-replace\/assets\/icon.svg?rev=3518003","icon":"https:\/\/ps.w.org\/bm1-frontend-image-replace\/assets\/icon.svg?rev=3518003","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/bm1-frontend-image-replace\/assets\/screenshot-1.png?rev=3518010","caption":"Hover overlay on a replaceable image"},{"src":"https:\/\/ps.w.org\/bm1-frontend-image-replace\/assets\/screenshot-2.png?rev=3518010","caption":"Settings page with enable toggle and access link management"},{"src":"https:\/\/ps.w.org\/bm1-frontend-image-replace\/assets\/screenshot-3.png?rev=3518010","caption":"Activity log showing all image replacements (Pro)"}],"raw_content":"<!--section=description-->\n<p><strong>BM1 Frontend Image Replace<\/strong> lets you swap out images on your WordPress site without ever touching the admin panel. Simply hover over any image on the frontend, click, and upload a replacement.<\/p>\n\n<p>Perfect for:<\/p>\n\n<ul>\n<li>Replacing demo or placeholder images during development<\/li>\n<li>Letting clients review and update images without backend access<\/li>\n<li>Quick image swaps during content reviews<\/li>\n<\/ul>\n\n<p><strong>How it works:<\/strong><\/p>\n\n<ol>\n<li>Enable the plugin in Settings &gt; BM1 Frontend Image Replace<\/li>\n<li>Visit any page on your site<\/li>\n<li>Hover over an image \u2014 a replace overlay appears<\/li>\n<li>Click and select a new image from your computer<\/li>\n<li>The new image is uploaded to the media library and all references in your content are updated automatically<\/li>\n<\/ol>\n\n<p><strong>Free features:<\/strong><\/p>\n\n<ul>\n<li>Works with any theme \u2014 no template modifications needed<\/li>\n<li>Uploads new images to the WordPress media library (the original stays untouched)<\/li>\n<li>Updates all references in post content<\/li>\n<li>Supports Gutenberg block editor, Classic editor, and LiveCanvas<\/li>\n<li>Lightweight \u2014 no jQuery dependency, minimal footprint<\/li>\n<li>Translation-ready (including German)<\/li>\n<\/ul>\n\n<p><strong>Pro features (available at <a href=\"https:\/\/wp-frontend-image-replace.com\">wp-frontend-image-replace.com<\/a>):<\/strong><\/p>\n\n<ul>\n<li>Guest access via shareable temporary links (with expiry)<\/li>\n<li>Activity log for all image replacements (Tools &gt; Image Replace Log)<\/li>\n<li>Priority support<\/li>\n<\/ul>\n\n<p>A premium version with extended features is available at <a href=\"https:\/\/wp-frontend-image-replace.com\">wp-frontend-image-replace.com<\/a>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>bm1-frontend-image-replace<\/code> folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin through the Plugins menu in WordPress<\/li>\n<li>Go to Settings &gt; BM1 Frontend Image Replace<\/li>\n<li>Check \"Enable Image Replace\" and save<\/li>\n<\/ol>\n\n<p><strong>For guest access (Pro only):<\/strong><\/p>\n\n<ol>\n<li>On the settings page, click \"Generate Access Link\"<\/li>\n<li>Copy the generated link and share it<\/li>\n<li>Anyone with the link can replace images without logging in<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20delete%20the%20original%20image%3F\"><h3>Does this delete the original image?<\/h3><\/dt>\n<dd><p>No. The original image remains in the media library. A new image is uploaded as a separate attachment, and all content references are updated to point to the new one.<\/p><\/dd>\n<dt id=\"which%20image%20references%20are%20updated%3F\"><h3>Which image references are updated?<\/h3><\/dt>\n<dd><p>The plugin updates:\n* Image URLs in post\/page content (block editor and classic editor)\n* Gutenberg block metadata (attachment IDs)\n* Image dimensions (width\/height attributes)<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20page%20builders%3F\"><h3>Does it work with page builders?<\/h3><\/dt>\n<dd><p>The plugin works best with the WordPress block editor and classic editor. Page builders that store content in serialized format (like Elementor, Beaver Builder) may not have their references fully updated. The image will still be uploaded to the media library.<\/p><\/dd>\n<dt id=\"which%20images%20can%20be%20replaced%3F\"><h3>Which images can be replaced?<\/h3><\/dt>\n<dd><p>Only images that are in the WordPress media library can be replaced. The plugin detects media library images by their CSS classes (e.g., <code>wp-image-123<\/code>) or by resolving their URL to an attachment ID. External images, SVGs, and very small images (under 50px) are excluded.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>Remove daily replacement limit \u2014 image replacement is now unlimited for all users<\/li>\n<li>Remove unnecessary wp-admin\/includes\/media.php include<\/li>\n<li>Unify naming prefix to bm1fir across all global functions, variables, hooks and classes<\/li>\n<li>Wrap Pro-only code (guest tokens, license management, activity log) in build markers<\/li>\n<li>Add register_uninstall_hook for free version cleanup<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Fix Freemius is_premium flag for WordPress.org free build<\/li>\n<li>Sanitize POST input in batch URL resolver<\/li>\n<li>Escape Freemius upgrade URL output in admin settings<\/li>\n<li>Remove screenshot assets from plugin package (SVN-only)<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Renamed plugin to \"BM1 Frontend Image Replace\" for WordPress.org directory submission<\/li>\n<li>Refactored internal prefixes from fir_ to bm1fir_ (Text Domain, classes, options)<\/li>\n<li>Removed bundled Zammad support form \u2014 support now via https:\/\/wp-frontend-image-replace.com<\/li>\n<li>Improved SQL query preparation in uninstall cleanup<\/li>\n<li>Code-base split: free features hosted on WordPress.org, Pro version on wp-frontend-image-replace.com<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>Add automated Freemius deployment via GitHub Actions<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Exclude the site logo from image replacement<\/li>\n<li>Added fir-no-replace CSS class to exclude arbitrary images<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added image replacement activity log (Tools &gt; Image Replace Log)<\/li>\n<li>Fixed image replacement for non-logged-in users when globally enabled<\/li>\n<li>Added German translations for log page<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First stable release<\/li>\n<li>Initial release with Free and Pro plans<\/li>\n<li>Guest access links (Pro feature)<\/li>\n<li>Gutenberg and Classic editor support<\/li>\n<li>Rate limiting and security hardening<\/li>\n<\/ul>","raw_excerpt":"Replace images directly from the frontend. Upload a new image, and it replaces the old one in your content.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/pt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/294342","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/pt.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/pt.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=294342"}],"author":[{"embeddable":true,"href":"https:\/\/pt.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/phillipb"}],"wp:attachment":[{"href":"https:\/\/pt.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=294342"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/pt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=294342"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/pt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=294342"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/pt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=294342"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/pt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=294342"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/pt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=294342"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}