{"id":271997,"date":"2026-01-10T18:52:28","date_gmt":"2026-01-10T18:52:28","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/synced-pattern-popups\/"},"modified":"2026-01-29T18:41:00","modified_gmt":"2026-01-29T18:41:00","slug":"synced-pattern-popups","status":"publish","type":"plugin","link":"https:\/\/wol.wordpress.org\/plugins\/synced-pattern-popups\/","author":12302685,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.3.1","stable_tag":"1.3.1","tested":"6.9.4","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Synced Pattern Popups","header_author":"Matt Cromwell","header_description":"A lightweight modal popup system that loads WordPress Synced Pattern content on demand. Trigger with class \"spp-trigger-{id}\".","assets_banners_color":"abb0b9","last_updated":"2026-01-29 18:41:00","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/www.mattcromwell.com","rating":5,"author_block_rating":0,"active_installs":0,"downloads":410,"num_ratings":3,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.1.2":{"tag":"1.1.2","author":"webdevmattcrom","date":"2026-01-10 18:52:00"},"1.1.3":{"tag":"1.1.3","author":"webdevmattcrom","date":"2026-01-13 12:12:21"},"1.2.0":{"tag":"1.2.0","author":"webdevmattcrom","date":"2026-01-14 12:33:39"},"1.2.1":{"tag":"1.2.1","author":"webdevmattcrom","date":"2026-01-14 23:16:29"},"1.3.0":{"tag":"1.3.0","author":"webdevmattcrom","date":"2026-01-20 15:02:29"},"1.3.1":{"tag":"1.3.1","author":"webdevmattcrom","date":"2026-01-29 18:41:00"}},"upgrade_notice":{"1.3.1":"<p>Maintenance release. Fixes Kadence Elements galleries in nested blocks, modal layout with alignfull\/alignwide on any theme, and chained popups leaving the page unclickable. Recommended for all users.<\/p>","1.3.0":"<p>Major update introducing default settings page and Command Palette integration. Configure default popup appearance (width, height, colors, close buttons) for Pattern, TLDR, and Gallery popups. TLDR and Gallery can inherit from Pattern defaults. Improved modal scrolling. Recommended for all users.<\/p>","1.2.0":"<p>Major refactor of modal state management for improved stability, maintainability, and debugging. Fixes an issue with gallery random order. Addresses Plugin Check warnings. Recommended for all users.<\/p>","1.1.3":"<p>Admin UI improvements and review notice feature. Settings page now has consistent width constraints, and a friendly review notice will appear after 10 days to encourage user feedback. All existing functionality remains unchanged.<\/p>","1.1.2":"<p>Internationalization and code quality improvements. Enhanced translation support with proper textdomain loading and updated German translations. All Plugin Check compliance issues resolved. Recommended for all users.<\/p>","1.1.1":"<p>Bug fix release addressing block style loading issues. All block styles (core and third-party) now properly load in modal popups. Recommended for all users.<\/p>","1.1.0":"<p>Major admin interface update with tabbed navigation, improved usability, and individual pattern cache management. The admin interface now features a modern tabbed design with direct links to Patterns, TLDR settings, and usage instructions.<\/p>","1.0.1":"<p>Hotfix release addressing WordPress.org Plugin Directory submission requirements. No user-facing changes.<\/p>","1.0.0":"<p>Initial release of Synced Pattern Popups. Activate and start creating popups immediately - no configuration required.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":3},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3436798,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3436798,"resolution":"256x256","location":"assets","locale":""},"icon.svg":{"filename":"icon.svg","revision":3436798,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3436798,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3436800,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.1.2","1.1.3","1.2.0","1.2.1","1.3.0","1.3.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3436798,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3443354,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3443354,"resolution":"3","location":"assets","locale":""},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3443354,"resolution":"4","location":"assets","locale":""},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3443354,"resolution":"5","location":"assets","locale":""},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3443354,"resolution":"7","location":"assets","locale":""}},"screenshots":{"1":"An example Synced Pattern Popup using a 3rd party block: KadenceWP Blocks","2":"The Synced Patterns Popup settings screen listing your sites Synced Patterns. From here you can copy the trigger code, edit the pattern, delete the pattern, or clear the pattern transient cache.","3":"The TLDR settings panel, showing it enabled (because AI Experiments is enabled and configured correctly). Here you can customize your prompt and your TLDR cache length.","4":"The \"Defaults\" settings screen. It contains three sections (1) The Pattern modal settings (2) the TLDR Popup Defaults (3) Gallery Popups Defaults.","5":"A \"Terms and Conditions\" modal, illustrating how tall content scrolls inside the modal.","6":"An example of the Gallery block inside our modal, with image navigation on the image and below as well as caption support.","7":"The Gallery block showing the \"Open in Synced Pattern Popups\" option. Notice also the settings in the block sidebar settings that control the modal width, close buttons, and navigation options."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[2353,613,491,253727,26976],"plugin_category":[],"plugin_contributors":[78840],"plugin_business_model":[],"class_list":["post-271997","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-modal","plugin_tags-popup","plugin_tags-synced-patterns","plugin_tags-tldr","plugin_contributors-webdevmattcrom","plugin_committers-webdevmattcrom"],"banners":{"banner":"https:\/\/ps.w.org\/synced-pattern-popups\/assets\/banner-772x250.png?rev=3436800","banner_2x":"https:\/\/ps.w.org\/synced-pattern-popups\/assets\/banner-1544x500.png?rev=3436798","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/synced-pattern-popups\/assets\/icon.svg?rev=3436798","icon":"https:\/\/ps.w.org\/synced-pattern-popups\/assets\/icon.svg?rev=3436798","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/synced-pattern-popups\/assets\/screenshot-1.png?rev=3436798","caption":"An example Synced Pattern Popup using a 3rd party block: KadenceWP Blocks"},{"src":"https:\/\/ps.w.org\/synced-pattern-popups\/assets\/screenshot-2.png?rev=3443354","caption":"The Synced Patterns Popup settings screen listing your sites Synced Patterns. From here you can copy the trigger code, edit the pattern, delete the pattern, or clear the pattern transient cache."},{"src":"https:\/\/ps.w.org\/synced-pattern-popups\/assets\/screenshot-3.png?rev=3443354","caption":"The TLDR settings panel, showing it enabled (because AI Experiments is enabled and configured correctly). Here you can customize your prompt and your TLDR cache length."},{"src":"https:\/\/ps.w.org\/synced-pattern-popups\/assets\/screenshot-4.png?rev=3443354","caption":"The \"Defaults\" settings screen. It contains three sections (1) The Pattern modal settings (2) the TLDR Popup Defaults (3) Gallery Popups Defaults."},{"src":"https:\/\/ps.w.org\/synced-pattern-popups\/assets\/screenshot-5.png?rev=3443354","caption":"A \"Terms and Conditions\" modal, illustrating how tall content scrolls inside the modal."},{"src":"https:\/\/ps.w.org\/synced-pattern-popups\/assets\/screenshot-7.png?rev=3443354","caption":"The Gallery block showing the \"Open in Synced Pattern Popups\" option. Notice also the settings in the block sidebar settings that control the modal width, close buttons, and navigation options."}],"raw_content":"<!--section=description-->\n<p>Synced Pattern Popups helps you create popups using the WordPress editor you already know, not yet another builder. Create a Pattern yourself or from the Pattern Library, paste the trigger code as a link anywhere on your site, and your Pattern is now opened via a beautiful and accessible modal popup. Manually triggered by your website viewers because they are interested in your content, not because you're punishing them for scrolling too far, or exiting your tab.<\/p>\n\n<p>Most popup plugins are built on a desperate lie: if you interrupt your visitor enough times, they'll eventually give in. They sell \"triggers\" like exit intent and scroll depth as features, but in reality, these are just ways to guess what a user wants. When you guess wrong, you don't get a lead; you get a \"close\" click and a bruised brand reputation.<\/p>\n\n<p><strong>Synced Pattern Popups<\/strong> was built for the site owner who trusts their content and respects their visitors' time.<\/p>\n\n<h4>Built for the Modern WordPress Stack<\/h4>\n\n<p>Don't step out of your workflow into a bespoke, clunky UI. Synced Pattern Popups uses <strong>100% Native Architecture<\/strong>. If it's a block, it works\u2014forms, videos, or third-party embeds.<\/p>\n\n<ul>\n<li>\ud83e\uddf1 100% Native Architecture: Your popups are Synced Patterns. No parallel builders, no proprietary styling engines, no bloat.<\/li>\n<li>\ud83d\udd0c Zero Integration Friction: If it\u2019s a block, it works. Forms, videos, or third-party embeds\u2014if you can drop it on a page, you can put it in a popup.<\/li>\n<li>\u267f Radical Accessibility: Inclusion isn't an afterthought. Our modals feature rock-solid focus trapping, full keyboard support, and screen-reader optimization out of the box. You don't have to \"fix\" your popups for compliance; they\u2019re born ready.<\/li>\n<li>\ud83d\udd04 Global Updates, Zero Effort: Edit your Synced Pattern once, and every instance\u2014across your pages and inside your popups\u2014updates instantly.<\/li>\n<li>\ud83d\uddbc\ufe0f Media-First Popups: Full support for the Core Gallery block. Stop settling for static images; give your visitors the high-fidelity experience they asked for.<\/li>\n<li>\u2318 Built into your Workflow: With Command Palette integration, managing your popups is as fast as typing a shortcut.<\/li>\n<\/ul>\n\n<h4>Key Benefits<\/h4>\n\n<ul>\n<li><strong>Global Updates, Zero Effort<\/strong>: Edit a Synced Pattern once, and every instance across your site updates instantly.<\/li>\n<li><strong>Performance Optimized<\/strong>: Intelligent caching and AJAX loading ensure your initial page load stays lightning-fast.<\/li>\n<li><strong>Developer Friendly<\/strong>: Clean code, WordPress hooks, and Abilities API support for programmatic workflows.<\/li>\n<li><strong>AI-Powered TLDR<\/strong>: Generate instant summaries of page content (requires AI Experiments plugin).<\/li>\n<\/ul>\n\n<h4>Major Features<\/h4>\n\n<p><strong>\u2197\ufe0fModal popups powered by Synced Patterns<\/strong>\nCreate your popup content using the native Block Editor - layouts, images, galleries, buttons, and third-party blocks all work.<\/p>\n\n<h4>Simple trigger system (class or href)<\/h4>\n\n<p>Highlight a word or click into a button then open the hyperlink option. Paste in your Trigger code, for example: <code>#spp-trigger-{id}<\/code> and now that link will open your modal on click, just like that!<\/p>\n\n<p>You can also set a custom class name on a block:<\/p>\n\n<ul>\n<li>Custom Class name:  <code>spp-trigger-{id}<\/code> (like on a column or section block)<\/li>\n<li>Link: <code>href=\"#spp-trigger-{id}\"<\/code> (handy in the Block Editor)<\/li>\n<\/ul>\n\n<h4>Width overrides<\/h4>\n\n<p>By default all modals open at 600px. You can override that in your general settings at \"Appearance \u2192 Synced Pattern\" then the \"Defaults\" tab.<\/p>\n\n<p>Or you can also set it on a per modal basis within the trigger code by appending the width in pixels to the end of the trigger code: <code>spp-trigger-{id}-{width}<\/code>.<\/p>\n\n<p><strong>\ud83d\uddbc\ufe0fCore Gallery Block Support<\/strong>\nThe Core Gallery block has a \"lightbox\" feature. But that feature does not support image navigation within the lightbox or captions or width management. Synced Pattern Popups lets you do all of that with your Core Gallery blocks. Simply choose the Gallery block (not the individual images within the Gallery block), and click on the link icon (\"\ud83d\udd17\"). There you'll see several options, including the Core lightbox feature, and now also \"Open in Synced Pattern Popups\".<\/p>\n\n<p><strong>\ud83e\udd16AI-powered TLDR (optional)<\/strong><\/p>\n\n<p>Generate AI summaries of the current page content on demand by adding a <code>spp-trigger-tldr<\/code> trigger. This feature requires the <strong>AI Experiments<\/strong> plugin and configured credentials (you\u2019ll see guided setup in the TLDR tab).<\/p>\n\n<p><strong>\ud83d\udcbbHandy for Developer Features<\/strong>\nSynced Pattern Popups is made to be user friendly, but it's also full of useful utilities for developers.<\/p>\n\n<ul>\n<li><strong>On-demand loading (AJAX)<\/strong>\nPopup content loads only when needed, which keeps initial page loads fast.<\/li>\n<li><strong>Smart caching with automatic invalidation<\/strong>\nRendered popup output is cached using WordPress transients for performance, and automatically cleared when synced patterns or default settings change. You can also clear a single pattern\u2019s cache from the admin UI.<\/li>\n<li><strong>Full block styling support (core + third\u2011party)<\/strong>\nThe plugin loads the styles required to render the synced pattern correctly inside the modal - including WordPress core block styles and supported third-party block styles.<\/li>\n<li><strong>Accessibility-first modal behavior<\/strong>\nIncludes keyboard navigation (Escape to close, Tab stays within the popup), focus management, and screen-reader friendly UI.<\/li>\n<li><strong>Abilities API integration (WordPress 6.9+)<\/strong>\nOn WordPress 6.9+, the plugin registers Abilities to enable programmatic use cases (e.g., rendering popup content via <code>wp_execute_ability()<\/code> in custom workflows). If the Abilities API isn\u2019t available, the plugin simply skips this integration.<\/li>\n<\/ul>\n\n<h4>How It Works<\/h4>\n\n<ol>\n<li>Create a Synced Pattern in WordPress (Appearance \u2192 Synced Patterns)<\/li>\n<li>Add a trigger as a link or class to any block or element: <code>class=\"spp-trigger-{ID}\"<\/code> or <code>href=\"#spp-trigger-{ID}\"<\/code><\/li>\n<li>When clicked, the popup opens with your pattern content<\/li>\n<li>Content loads via AJAX for optimal performance<\/li>\n<\/ol>\n\n<h4>What are Synced Patterns?<\/h4>\n\n<p>Synced Patterns (stored as <code>wp_block<\/code> posts) are reusable block layouts you can create and manage once, then reuse across your site. When you edit a synced pattern, any place it\u2019s used is updated automatically.<\/p>\n\n<p>This plugin surfaces them with a dedicated admin screen at <strong>Appearance \u2192 Synced Patterns<\/strong>, making it easy to:\n- See each pattern's ID at a glance\n- Copy the trigger code\n- Edit or delete the pattern\n- Clear the cached popup output when needed<\/p>\n\n<h3>Support<\/h3>\n\n<p>For support, feature requests, or bug reports, please visit the plugin's support page or GitHub repository.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>sppopups<\/code> folder to <code>\/wp-content\/plugins\/<\/code> directory<\/li>\n<li>Activate the plugin through the 'Plugins' menu in WordPress<\/li>\n<li>Go to Appearance \u2192 Synced Patterns to manage your popup content<\/li>\n<li>Create a synced pattern and note its ID<\/li>\n<li>Add <code>class=\"spp-trigger-{id}\"<\/code> or <code>href=\"#spp-trigger-{id}\"<\/code> to any element<\/li>\n<li>That's it! Your popup is ready.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20do%20i%20trigger%20a%20popup%3F\"><h3>How do I trigger a popup?<\/h3><\/dt>\n<dd><p>You can trigger a popup in two ways:<\/p>\n\n<p><strong>Method 1: Class Name<\/strong> (Recommended for custom HTML)\nAdd the class <code>spp-trigger-{id}<\/code> to any clickable element, where <code>{id}<\/code> is the numeric ID of your Synced Pattern.<\/p>\n\n<p>Example:\n    <a href=\"#\">Open Popup<\/a>\n    Click Me<\/p>\n\n<p><strong>Method 2: Href Attribute<\/strong> (Perfect for Block Editor)\nSet the <code>href<\/code> attribute to <code>#spp-trigger-{id}<\/code> on any link element. This is especially useful in the WordPress Block Editor where you can't easily add custom classes.<\/p>\n\n<p>Example:\n    <a href=\"#spp-trigger-1359\">Open Popup<\/a><\/p><\/dd>\n<dt id=\"where%20do%20i%20find%20the%20pattern%20id%3F\"><h3>Where do I find the pattern ID?<\/h3><\/dt>\n<dd><p>Go to WordPress Admin \u2192 Appearance \u2192 Synced Patterns. The ID column shows the pattern ID prominently. You can also click the \"Copy Trigger\" button in the Actions column to copy the complete trigger code.<\/p><\/dd>\n<dt id=\"can%20i%20use%20multiple%20popups%20on%20one%20page%3F\"><h3>Can I use multiple popups on one page?<\/h3><\/dt>\n<dd><p>Yes! You can have multiple different popups on the same page - just use different pattern IDs. Mix and match both trigger methods as needed.<\/p><\/dd>\n<dt id=\"can%20i%20customize%20the%20modal%20width%3F\"><h3>Can I customize the modal width?<\/h3><\/dt>\n<dd><p>Yes! Add a width suffix to your trigger: <code>spp-trigger-{id}-{width}<\/code> where width is in pixels (100-5000px).<\/p>\n\n<p>Example:\n    <a href=\"#\">Open 800px Modal<\/a><\/p><\/dd>\n<dt id=\"what%20is%20the%20tldr%20feature%3F\"><h3>What is the TLDR feature?<\/h3><\/dt>\n<dd><p>The TLDR (Too Long; Didn't Read) feature generates AI-powered summaries of your page content. Simply add <code>class=\"spp-trigger-tldr\"<\/code> or <code>href=\"#spp-trigger-tldr\"<\/code> to any element, and when clicked, it will generate a concise summary of the current page.<\/p>\n\n<p><strong>Requirements:<\/strong>\n* WordPress AI Experiments plugin must be installed and activated\n* AI credentials must be configured in Settings \u2192 AI Experiments<\/p>\n\n<p>The TLDR feature can be enabled\/configured in Appearance \u2192 Synced Patterns \u2192 AI TLDR Settings.<\/p><\/dd>\n<dt id=\"why%20isn%27t%20my%20popup%20opening%3F\"><h3>Why isn't my popup opening?<\/h3><\/dt>\n<dd><p>Check these common issues:<\/p>\n\n<ol>\n<li><strong>Verify the trigger format<\/strong>: Use exactly <code>spp-trigger-{id}<\/code> (class) or <code>#spp-trigger-{id}<\/code> (href) where <code>{id}<\/code> is numeric<\/li>\n<li><strong>Check pattern ID<\/strong>: Verify the pattern ID exists in Appearance \u2192 Synced Patterns<\/li>\n<li><strong>Pattern status<\/strong>: Ensure the pattern is published (not draft)<\/li>\n<li><strong>Sync status<\/strong>: Only synced patterns work - unsynced patterns are excluded<\/li>\n<li><strong>Toggle Forced On<\/strong>: In your post or page, there's a setting called \"Synced Pattern Popup Support\". Toggle this on if your class or link is output on the page dynamically, like via a form or AJAX.<\/li>\n<li><strong>Browser console<\/strong>: Check for JavaScript errors in browser developer tools. <\/li>\n<\/ol>\n\n<p>Try to answer as many of those questions as you can when <a href=\"https:\/\/wordpress.org\/support\/plugin\/synced-pattern-popups\/\">submitting a support ticket<\/a>.<\/p><\/dd>\n<dt id=\"why%20isn%27t%20my%20content%20loading%3F\"><h3>Why isn't my content loading?<\/h3><\/dt>\n<dd><p>Troubleshooting steps:<\/p>\n\n<ol>\n<li><strong>Verify pattern ID<\/strong>: Double-check the ID in Appearance \u2192 Synced Patterns<\/li>\n<li><strong>Check pattern status<\/strong>: Pattern must be published<\/li>\n<li><strong>Verify sync status<\/strong>: Only synced patterns can be used<\/li>\n<li><strong>Network tab<\/strong>: Check browser Network tab for AJAX errors<\/li>\n<li><strong>Clear cache<\/strong>: Try clearing the transient cache (button in admin interface)<\/li>\n<\/ol><\/dd>\n<dt id=\"can%20i%20use%20this%20with%20page%20builders%3F\"><h3>Can I use this with page builders?<\/h3><\/dt>\n<dd><p>Yes! The plugin works with most page builders. For dynamically loaded content (like Gravity Forms or AJAX-loaded sections), you may need to enable \"Forced On\" in the post meta box (Synced Pattern Popup Support) to ensure assets load.<\/p><\/dd>\n<dt id=\"does%20this%20work%20with%20caching%20plugins%3F\"><h3>Does this work with caching plugins?<\/h3><\/dt>\n<dd><p>Yes! The plugin uses WordPress transients for caching, which works with all major caching plugins. Cache is automatically invalidated when patterns are updated.<\/p><\/dd>\n<dt id=\"is%20this%20accessible%3F\"><h3>Is this accessible?<\/h3><\/dt>\n<dd><p>Yes! The plugin includes:\n* Full keyboard navigation (Escape to close, Tab navigation)\n* Screen reader support with ARIA attributes\n* Focus management (returns focus to trigger element on close)\n* High contrast support<\/p><\/dd>\n<dt id=\"can%20i%20customize%20the%20modal%20styles%3F\"><h3>Can I customize the modal styles?<\/h3><\/dt>\n<dd><p>Yes! The plugin uses minimal CSS. You can override styles in your theme's CSS using the same class names. The modal uses these main classes:\n* <code>.sppopups-modal<\/code> - Main modal container\n* <code>.sppopups-overlay<\/code> - Background overlay\n* <code>.sppopups-container<\/code> - Content container\n* <code>.sppopups-content<\/code> - Content area<\/p><\/dd>\n<dt id=\"what%20wordpress%20version%20is%20required%3F\"><h3>What WordPress version is required?<\/h3><\/dt>\n<dd><p>WordPress 5.8 or higher. The plugin is tested up to WordPress 6.9.<\/p><\/dd>\n<dt id=\"what%20php%20version%20is%20required%3F\"><h3>What PHP version is required?<\/h3><\/dt>\n<dd><p>PHP 7.4 or higher.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.3.1<\/h4>\n\n<ul>\n<li>Fixed: Kadence Elements with a Gallery set to Synced Pattern Popup are now detected when the gallery is nested (e.g. inside row\/column blocks)<\/li>\n<li>Fixed: Defensive CSS so pattern content with alignfull\/alignwide stays within the modal on any theme<\/li>\n<li>Fixed: Chained popups (opening a pattern from inside another pattern) no longer leave the page unclickable after closing<\/li>\n<li>Improved: Composer vendor directory is now in .gitignore<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>New: Default Settings page for configuring popup appearance defaults (Pattern, TLDR, and Gallery popups)<\/li>\n<li>New: Settings inheritance system - TLDR and Gallery popups can inherit from Pattern defaults<\/li>\n<li>New: Command Palette integration for quick access to plugin features<\/li>\n<li>New: Comprehensive testing infrastructure (PHPUnit and Jest) to ensure defaults are respected<\/li>\n<li>New: CI\/CD workflows for automated testing on every commit<\/li>\n<li>Improved: Modal scrolling behavior - modals now properly scroll long content instead of extending beyond viewport<\/li>\n<li>Improved: CSS refactored to use custom properties for dynamic styling based on settings<\/li>\n<li>Improved: Frontend defaults application with proper inheritance and override support<\/li>\n<li>Fixed: Modal height constraints now work correctly with max-height settings<\/li>\n<li>Fixed: Default width settings now properly apply to all popup types<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>New: Added support for the Core Gallery Block with full modal integration!<\/li>\n<li>New: Gallery block settings panel with modal size, close buttons, and image navigation options<\/li>\n<li>New: Per-post asset loading controls (Modal Assets and Gallery Assets) with Auto-Detect and Loaded options<\/li>\n<li>New: Added two wireframe Synced Patterns: \"More Details\" and \"Terms &amp; Conditions\". <\/li>\n<li>Refactor: Centralized modal state management into a new <code>modalState<\/code> object in <code>modal.js<\/code>.<\/li>\n<li>Refactor: Migrated all scattered global state variables (e.g., <code>currentMaxWidth<\/code>, <code>lastActiveElement<\/code>, <code>loadedStyles<\/code>) into the <code>modalState<\/code> object.<\/li>\n<li>Refactor: Extracted gallery functionality into separate <code>gallery.js<\/code> module for better code organization and conditional loading<\/li>\n<li>Refactor: Added comprehensive JSDoc comments to gallery module and <code>modalState<\/code> object for improved documentation.<\/li>\n<li>Refactor: Implemented robust validation for <code>maxWidth<\/code> (100-5000px) within the <code>modalState<\/code> setter.<\/li>\n<li>Fixed: Corrected an issue where gallery images in \"Random order\" would open the wrong image in the modal. The system now reliably identifies the clicked image by its ID, regardless of randomization.<\/li>\n<li>Fixed: Gallery assets now automatically force modal assets to load when set to \"Loaded\" (dependency requirement)<\/li>\n<li>Fixed: Addressed Plugin Check error by removing the discouraged <code>load_plugin_textdomain()<\/code> call.<\/li>\n<li>Fixed: Resolved Plugin Check warning by ensuring the text domain (<code>synced-pattern-popups<\/code>) consistently matches across all plugin files.<\/li>\n<li>Improved: Enhanced code organization and maintainability through centralized state management and module separation.<\/li>\n<li>Improved: Gallery images now have smooth crossfade transitions and responsive modal sizing<\/li>\n<\/ul>\n\n<h4>1.1.3<\/h4>\n\n<ul>\n<li>New: Added delayed admin review notice to encourage user reviews (appears after 10 days on settings page)<\/li>\n<li>New: Custom styled review notice with dismiss functionality (AJAX-based)<\/li>\n<li>New: Settings link added to plugin action links for quick access<\/li>\n<li>Improved: Admin UI consistency with unified 960px max-width constraint for all settings content<\/li>\n<li>Improved: Review notice styling matches modern WordPress design patterns<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>Fixed: Added translators comment for sprintf with placeholders (Plugin Check compliance)<\/li>\n<li>Fixed: Added proper nonce verification documentation for GET parameter handling<\/li>\n<li>Improved: Added load_plugin_textdomain() for proper internationalization support<\/li>\n<li>Improved: Updated German translation file (de_DE) with all current strings<\/li>\n<li>Improved: Removed duplicate POT files for cleaner translation management<\/li>\n<li>Improved: Enhanced internationalization support across all plugin strings<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Fixed: Block styles now properly load for all block types including core blocks and third-party blocks (Kadence, Genesis Blocks, etc.)<\/li>\n<li>Fixed: Improved asset collection to ensure all necessary styles are loaded in modal popups<\/li>\n<li>Fixed: Corrected rendering order to apply <code>the_content<\/code> filters before <code>do_blocks()<\/code> for proper block asset enqueuing<\/li>\n<li>Fixed: Removed all debugging instrumentation code<\/li>\n<li>Improved: Better handling of <code>style-blocks-*.css<\/code> files for third-party block libraries<\/li>\n<li>Improved: Enhanced dependency collection for block styles to ensure all required styles are included<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>New: Tabbed admin interface with Patterns, TLDR, and How to Use tabs<\/li>\n<li>New: URL hash navigation for direct linking to specific admin tabs<\/li>\n<li>New: Clipboard icon button in trigger code column for quick copying<\/li>\n<li>New: Individual pattern transient deletion (\"Delete Transient #{id}\" button)<\/li>\n<li>New: \"Learn more\" link in admin header for quick access to documentation<\/li>\n<li>Improved: Admin UI styling with modern tabbed interface matching WordPress design patterns<\/li>\n<li>Improved: Better accessibility with ARIA attributes and keyboard navigation for tabs<\/li>\n<li>Improved: Consistent styling across all admin tabs with proper max-width and spacing<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Hotfix: Updated text domain to match plugin slug (synced-pattern-popups) for WordPress.org compliance<\/li>\n<li>Fixed: Removed debug logging code that used ABSPATH directly<\/li>\n<li>Fixed: Updated all file path references to use WordPress standard functions<\/li>\n<li>Updated: Console messages now use consistent \"Synced Pattern Popups\" branding<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>Synced Pattern popup system with class and href triggers<\/li>\n<li>Admin interface for managing patterns<\/li>\n<li>Intelligent caching system<\/li>\n<li>Asset collection for block styles and scripts<\/li>\n<li>AI-powered TLDR feature (requires AI Experiments plugin)<\/li>\n<li>Abilities API support for WordPress 6.9+<\/li>\n<li>Accessibility features (keyboard navigation, ARIA attributes)<\/li>\n<li>Custom width support via trigger suffix<\/li>\n<li>Rate limiting for AJAX requests<\/li>\n<li>Per-post popup support toggle<\/li>\n<li>Full translation support<\/li>\n<\/ul>","raw_excerpt":"Synced Pattern Popups helps you create popups using the WordPress editor you already know, not yet another builder.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wol.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/271997","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wol.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wol.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wol.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=271997"}],"author":[{"embeddable":true,"href":"https:\/\/wol.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/webdevmattcrom"}],"wp:attachment":[{"href":"https:\/\/wol.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=271997"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wol.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=271997"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wol.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=271997"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wol.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=271997"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wol.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=271997"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wol.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=271997"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}