{"id":339491,"date":"2026-07-11T15:19:40","date_gmt":"2026-07-11T15:19:40","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/pb-text-and-images-placeholder-fallback-suite\/"},"modified":"2026-07-21T12:54:54","modified_gmt":"2026-07-21T12:54:54","slug":"pb-text-and-images-placeholder-fallback-suite","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/pb-text-and-images-placeholder-fallback-suite\/","author":23513163,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.2.4","stable_tag":"2.2.4","tested":"7.0.2","requires":"5.9","requires_php":"7.4","requires_plugins":null,"header_name":"PB Text and Images Placeholder Fallback Suite","header_author":"PluginsBuy","header_description":"Universal text and image placeholder fallbacks for common WordPress image locations, including featured images, avatars, WooCommerce products, Open Graph, RSS feeds, REST API, and broken frontend images. Dynamic SVG placeholders with post title, category emoji, and initials avatars. No account required. No external calls.","assets_banners_color":"fbfcfd","last_updated":"2026-07-21 12:54:54","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/pluginsbuy.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":22,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.2.4":{"tag":"2.2.4","author":"pluginsbuy","date":"2026-07-21 12:54:54"}},"upgrade_notice":{"2.2.4":"<p>Prevents a fatal error after bulk featured-image assignment and completes the submission audit.<\/p>","2.2.2":"<p>Corrects the Fix Missing Images pagination string and aligns current documentation with the privacy-safe frontend behavior.<\/p>","2.2.0":"<p>Security, compatibility, feed metadata, REST behavior, avatar handling, analytics, and cleanup improvements.<\/p>","2.0.0":"<p>Major update. After upgrading, visit PB Fallbacks \u2192 Settings to review the new Dynamic Text Placeholders, Initials Avatar Generator, Brand Colour Detection, and Category Mapping features.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.gif":{"filename":"icon-128x128.gif","revision":3617184,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.gif":{"filename":"icon-256x256.gif","revision":3617184,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3617184,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3617184,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.2.4"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3617184,"resolution":"1","location":"assets","locale":"","width":2734,"height":1484},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3617184,"resolution":"2","location":"assets","locale":"","width":2746,"height":1088},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3617184,"resolution":"3","location":"assets","locale":"","width":2752,"height":826},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3617184,"resolution":"4","location":"assets","locale":"","width":2746,"height":996},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3617184,"resolution":"5","location":"assets","locale":"","width":2746,"height":1214},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3617184,"resolution":"6","location":"assets","locale":"","width":2746,"height":938},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3617184,"resolution":"7","location":"assets","locale":"","width":2744,"height":1488},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3617184,"resolution":"8","location":"assets","locale":"","width":2742,"height":440},"screenshot-9.png":{"filename":"screenshot-9.png","revision":3617184,"resolution":"9","location":"assets","locale":"","width":2746,"height":1092}},"screenshots":{"1":"Settings - Fallback Image - 1st Screen","2":"Settings - Fallback Image - 2nd Screen","3":"Settings - Text Placeholders","4":"Settings - Avatar Generator","5":"Settings - Brand Colors","6":"Settings.- Category Mapping","7":"Settings - Other Integrations","8":"Analytics","9":"Auto Fix - Posts and Pages"}},"plugin_section":[],"plugin_tags":[129,125265,265772,1795,4887],"plugin_category":[44],"plugin_contributors":[267693],"plugin_business_model":[],"class_list":["post-339491","plugin","type-plugin","status-publish","hentry","plugin_tags-avatar","plugin_tags-default-image","plugin_tags-fallback-image","plugin_tags-featured-image","plugin_tags-placeholder","plugin_category-discussion-and-community","plugin_contributors-pluginsbuy","plugin_committers-pluginsbuy"],"banners":{"banner":"https:\/\/ps.w.org\/pb-text-and-images-placeholder-fallback-suite\/assets\/banner-772x250.png?rev=3617184","banner_2x":"https:\/\/ps.w.org\/pb-text-and-images-placeholder-fallback-suite\/assets\/banner-1544x500.png?rev=3617184","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/pb-text-and-images-placeholder-fallback-suite\/assets\/icon-128x128.gif?rev=3617184","icon_2x":"https:\/\/ps.w.org\/pb-text-and-images-placeholder-fallback-suite\/assets\/icon-256x256.gif?rev=3617184","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/pb-text-and-images-placeholder-fallback-suite\/assets\/screenshot-1.png?rev=3617184","caption":"Settings - Fallback Image - 1st Screen"},{"src":"https:\/\/ps.w.org\/pb-text-and-images-placeholder-fallback-suite\/assets\/screenshot-2.png?rev=3617184","caption":"Settings - Fallback Image - 2nd Screen"},{"src":"https:\/\/ps.w.org\/pb-text-and-images-placeholder-fallback-suite\/assets\/screenshot-3.png?rev=3617184","caption":"Settings - Text Placeholders"},{"src":"https:\/\/ps.w.org\/pb-text-and-images-placeholder-fallback-suite\/assets\/screenshot-4.png?rev=3617184","caption":"Settings - Avatar Generator"},{"src":"https:\/\/ps.w.org\/pb-text-and-images-placeholder-fallback-suite\/assets\/screenshot-5.png?rev=3617184","caption":"Settings - Brand Colors"},{"src":"https:\/\/ps.w.org\/pb-text-and-images-placeholder-fallback-suite\/assets\/screenshot-6.png?rev=3617184","caption":"Settings.- Category Mapping"},{"src":"https:\/\/ps.w.org\/pb-text-and-images-placeholder-fallback-suite\/assets\/screenshot-7.png?rev=3617184","caption":"Settings - Other Integrations"},{"src":"https:\/\/ps.w.org\/pb-text-and-images-placeholder-fallback-suite\/assets\/screenshot-8.png?rev=3617184","caption":"Analytics"},{"src":"https:\/\/ps.w.org\/pb-text-and-images-placeholder-fallback-suite\/assets\/screenshot-9.png?rev=3617184","caption":"Auto Fix - Posts and Pages"}],"raw_content":"<!--section=description-->\n<p><strong>PB Text and Images Placeholder Fallback Suite<\/strong> fills common empty image locations on your WordPress site with a clean, professional placeholder \u2014 or your own custom image. Configure each supported location independently from the plugin settings.<\/p>\n\n<p><strong>Covered image slots:<\/strong><\/p>\n\n<ul>\n<li><strong>Featured Images<\/strong> \u2014 posts, pages, and any custom post type (configurable per post type)<\/li>\n<li><strong>User Avatars &amp; Gravatars<\/strong> \u2014 shown when a user has no Gravatar photo<\/li>\n<li><strong>WooCommerce Product Images<\/strong> \u2014 catalog grid, single product, gallery thumbnails, cart, and mini-cart<\/li>\n<li><strong>Open Graph \/ Social Share Images<\/strong> \u2014 compatible with Yoast SEO, All in One SEO, and RankMath<\/li>\n<li><strong>Broken Images \u2014 Global Catch-all<\/strong> \u2014 Optional JavaScript handler for many broken frontend <code>&lt;img&gt;<\/code> elements<\/li>\n<\/ul>\n\n<p><strong>Intelligent dynamic placeholders:<\/strong><\/p>\n\n<ul>\n<li><strong>Dynamic Text Placeholders<\/strong> \u2014 generates SVG placeholders with the post title, category emoji, and category name embedded directly on the image. Each supported post can receive a distinct placeholder generated from its available metadata.<\/li>\n<li><strong>Initials Avatar Generator<\/strong> \u2014 generates personalised circle, square, or rounded avatars with user initials (for example, \u201cJD\u201d). Available in brand colours or a consistent random colour per user.<\/li>\n<li><strong>Automatic Brand Colour Detection<\/strong> \u2014 scans your active theme's colour palette (editor palette, global styles, customiser) and uses the primary brand colour for all generated placeholders. No external requests.<\/li>\n<li><strong>Category Placeholder Mapping<\/strong> \u2014 map post categories and WooCommerce product categories to custom emojis and colours. Technology\u2192\ud83d\udcbb, Travel\u2192\u2708\ufe0f, Food\u2192\ud83c\udf7d\ufe0f, Business\u2192\ud83d\udcc8.<\/li>\n<\/ul>\n\n<p><strong>Site health tools:<\/strong><\/p>\n\n<ul>\n<li><strong>Image Health Dashboard<\/strong> \u2014 shows posts, pages, and products without a usable featured-image attachment, plus registered users covered by the avatar fallback. Statistics refresh every 10 minutes from the database.<\/li>\n<li><strong>Fix Missing Images<\/strong> \u2014 a dedicated screen listing all posts\/pages\/products missing a featured image. Select multiple posts and bulk-assign any Media Library image as the featured image in one click.<\/li>\n<\/ul>\n\n<p><strong>Why this plugin stands out:<\/strong><\/p>\n\n<ul>\n<li>\u2705 Ships with <strong>8 bundled SVG placeholders<\/strong> at the correct dimensions for each slot<\/li>\n<li>\u2705 Bundled SVG placeholders are each under 2 KB<\/li>\n<li>\u2705 <strong>No external calls<\/strong> \u2014 everything is self-contained, including dynamic SVG generation<\/li>\n<li>\u2705 <strong>No account required<\/strong> \u2014 install and go<\/li>\n<li>\u2705 Each slot is independently toggled \u2014 enable only what you need<\/li>\n<li>\u2705 Choose bundled placeholder, your own custom image from the Media Library, or dynamic generated placeholders<\/li>\n<\/ul>\n\n<p><strong>Bundled placeholder sizes:<\/strong><\/p>\n\n\n\n\n  Slot\n  Size\n\n\n\n\n  Featured image\n  1200 \u00d7 628 px\n\n\n  Post thumbnail\n  800 \u00d7 450 px\n\n\n  Open Graph image\n  1200 \u00d7 630 px\n\n\n  User avatar\n  96 \u00d7 96 px\n\n\n  Author image\n  150 \u00d7 150 px\n\n\n  WooCommerce product\n  800 \u00d7 800 px\n\n\n  WooCommerce catalog\n  324 \u00d7 324 px\n\n\n  WooCommerce gallery thumb\n  100 \u00d7 100 px\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>pb-text-and-images-placeholder-fallback-suite<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu in WordPress.<\/li>\n<li>Go to <strong>PB Fallbacks \u2192 Settings<\/strong> and toggle on the slots you want.<\/li>\n<li>Optionally enable <strong>Dynamic Text Placeholders<\/strong> or the <strong>Initials Avatar Generator<\/strong> for smart, auto-generated placeholders.<\/li>\n<li>Click <strong>Save Settings<\/strong>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20make%20any%20external%20requests%3F\"><h3>Does this plugin make any external requests?<\/h3><\/dt>\n<dd><p>No. All placeholder images are bundled inside the plugin directory, and dynamic SVG placeholders are generated server-side using PHP. No data is sent to any external server at any time.<\/p><\/dd>\n<dt id=\"will%20this%20slow%20down%20my%20site%3F\"><h3>Will this slow down my site?<\/h3><\/dt>\n<dd><p>The plugin is designed to be lightweight. Bundled placeholders are SVG files under 2 KB each. Dynamic placeholders are generated server-side and use browser caching headers. The optional broken-image handler loads a small frontend script only when enabled.<\/p><\/dd>\n<dt id=\"what%20are%20dynamic%20text%20placeholders%3F\"><h3>What are dynamic text placeholders?<\/h3><\/dt>\n<dd><p>When enabled, instead of showing a generic grey box, the plugin generates a unique SVG for each post containing the post title, category emoji, and category name. Each supported post can receive a different placeholder based on its title and category information.<\/p><\/dd>\n<dt id=\"how%20does%20the%20initials%20avatar%20generator%20work%3F\"><h3>How does the initials avatar generator work?<\/h3><\/dt>\n<dd><p>The generator creates a personalised avatar with the user's initials (first letter of first name + first letter of last name). The colour is consistent per user (based on a hash of the user ID) or uses your brand colour, depending on your setting. Works for registered WordPress users. Anonymous commenters use the configured static avatar fallback.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20woocommerce%3F\"><h3>Does it work with WooCommerce?<\/h3><\/dt>\n<dd><p>Yes. When WooCommerce is active, the WooCommerce slot appears automatically. It replaces the built-in grey box placeholder across the shop catalog, single product pages, gallery, cart, and mini-cart. Optionally, each product can show its category emoji and name on the placeholder.<\/p><\/dd>\n<dt id=\"does%20it%20interfere%20with%20yoast%20seo%20%2F%20aioseo%20%2F%20rankmath%3F\"><h3>Does it interfere with Yoast SEO \/ AIOSEO \/ RankMath?<\/h3><\/dt>\n<dd><p>No. For the Open Graph slot, the plugin provides a fallback URL directly to those plugins via their own filter hooks. It only outputs a generic <code>&lt;meta property=\"og:image\"&gt;<\/code> tag on sites where none of those plugins is active.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20i%20uninstall%20the%20plugin%3F\"><h3>What happens if I uninstall the plugin?<\/h3><\/dt>\n<dd><p>The plugin removes its settings, legacy broken-image counter, and cached dashboard statistics. It does not delete posts, media, users, or featured-image assignments.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.2.4<\/h4>\n\n<ul>\n<li>Fix: Added the missing analytics cache invalidation method used after bulk featured-image assignment, preventing a fatal error.<\/li>\n<li>Improved: Replaced the personal-name initials example in the readme with a neutral fictional example.<\/li>\n<li>Improved: Localized permission-denied AJAX responses and simplified the admin menu icon to a WordPress Dashicon.<\/li>\n<li>Verified: Re-audited class method calls, AJAX actions, settings keys, text domains, syntax, and package structure.<\/li>\n<\/ul>\n\n<h4>2.2.2<\/h4>\n\n<ul>\n<li>Fix: Corrected malformed translated pagination placeholders on the Fix Missing Images screen.<\/li>\n<li>Improved: Updated current dashboard and screenshot descriptions after removal of anonymous frontend analytics writes.<\/li>\n<li>Verified: Plugin slug, text domain, request protection, version metadata, and submission package structure remain consistent.<\/li>\n<\/ul>\n\n<h4>2.2.1<\/h4>\n\n<ul>\n<li>Matched the WordPress.org-assigned plugin slug and text domain throughout the plugin.<\/li>\n<li>Removed the unavailable Plugin URI.<\/li>\n<li>Re-audited all request handlers for nonce and capability protection.<\/li>\n<li>Removed anonymous frontend database writes; broken-image replacement now runs entirely in the browser.<\/li>\n<\/ul>\n\n<h4>2.2.0<\/h4>\n\n<ul>\n<li>Fix: Avatar fallback now overrides WordPress defaults when enabled<\/li>\n<li>Fix: Anonymous commenters no longer receive generated administrator initials; they use the configured static fallback<\/li>\n<li>Fix: REST field is registered only when enabled and now reports accurate fallback dimensions and MIME type<\/li>\n<li>Fix: RSS and Atom output now reports the actual image MIME type and dimensions<\/li>\n<li>Fix: Category mappings are validated against the selected taxonomy and stale mappings are discarded<\/li>\n<li>Fix: Dynamic category SVG requests are restricted to the configured public taxonomy<\/li>\n<li>Fix: Image Health detects missing, zero, and deleted featured-image attachments<\/li>\n<li>Fix: Broken-image analytics increments atomically, caps submitted counts, and rate-limits public writes<\/li>\n<li>Fix: Uninstall removes plugin settings, counters, cached statistics, and multisite copies<\/li>\n<li>Improved: Request data is unslashed and validated consistently<\/li>\n<li>Improved: Readme claims now describe supported behavior and performance accurately<\/li>\n<\/ul>\n\n<h4>2.1.0<\/h4>\n\n<ul>\n<li>New: REST API fallback image field \u2014 pbifs_image can be added to REST-enabled post types when the integration is enabled<\/li>\n<li>New: RSS \/ Atom feed image \u2014 Media RSS  element injected for posts in RSS 2.0 feed; Atom feeds get <\/li>\n<li>Fix: Avatar placeholder SVG silhouette now correctly clipped within the circle boundary<\/li>\n<li>Improved: Settings page gains an Integrations tab for REST API and RSS Feed options<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>New: Dynamic Text Placeholders \u2014 server-side SVG generation with post title, category emoji, and category pill embedded in the placeholder image<\/li>\n<li>New: Initials Avatar Generator \u2014 personalised circle\/square\/rounded avatars with user initials in brand or random colours<\/li>\n<li>New: Automatic Brand Colour Detection \u2014 reads theme editor palette, global styles, and customiser to match placeholder colours to your site brand<\/li>\n<li>New: Category Placeholder Mapping \u2014 map any taxonomy term to a custom emoji and colour for use in dynamic placeholders<\/li>\n<li>New: Image Health Dashboard \u2014 admin page showing missing featured images, products without images, users covered, and image coverage statistics<\/li>\n<li>New: Fix Missing Images screen \u2014 paginated list of posts missing featured images with bulk-assign via Media Library<\/li>\n<li>New: Dynamic SVG image endpoint \u2014 serves generated placeholders as proper image URLs with HTTP caching headers<\/li>\n<li>New: Analytics beacon \u2014 frontend JS reports broken image count to the dashboard in real time<\/li>\n<li>Improved: Admin menu changed from Settings submenu to top-level menu item with subpages<\/li>\n<li>Improved: Brand colour automatically detected and saved on plugin activation<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release with five fallback image slots: featured images, avatars, WooCommerce products, Open Graph images, and broken images catch-all.<\/li>\n<li>Ships with 8 bundled SVG placeholders in correct dimensions for each slot.<\/li>\n<\/ul>","raw_excerpt":"Fallback images, dynamic text placeholders, initials avatars, brand colours, and image-health tools for WordPress.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/339491","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=339491"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/pluginsbuy"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=339491"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=339491"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=339491"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=339491"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=339491"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=339491"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}