[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fynyKJhsF6mHVI7HQnLUJeK19THaLxo5cYee38eKRLRo":3},{"slug":4,"display_name":5,"profile_url":6,"plugin_count":7,"total_installs":8,"avg_security_score":9,"avg_patch_time_days":10,"trust_score":11,"computed_at":12,"plugins":13},"westonruter","Weston Ruter","https:\u002F\u002Fprofiles.wordpress.org\u002Fwestonruter\u002F",22,436940,91,4499,73,"2026-04-04T11:09:24.401Z",[14,39,58,74,96,118,131,148,165,183,202,216,233,247,261,273,284,299,310,323,339,352],{"slug":15,"name":16,"version":17,"author":5,"author_profile":6,"description":18,"short_description":19,"active_installs":20,"downloaded":21,"rating":22,"num_ratings":23,"last_updated":24,"tested_up_to":25,"requires_at_least":26,"requires_php":27,"tags":28,"homepage":33,"download_link":34,"security_score":35,"vuln_count":36,"unpatched_count":36,"last_vuln_date":37,"fetched_at":38},"amp","AMP","2.5.5","\u003Cp>\u003Ca href=\"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fguides\u002Fpage-experience\" rel=\"nofollow ugc\">Page Experience\u003C\u002Fa> (PX) is a set of ranking signals—including \u003Ca href=\"https:\u002F\u002Fweb.dev\u002Fvitals\u002F#core-web-vitals\" rel=\"nofollow ugc\">Core Web Vitals\u003C\u002Fa> (CWV)—measuring the user experience of interacting with a web page. AMP is a powerful tool which applies many optimizations and best practices automatically on your site, making it easier for you to achieve good page experience for your visitors. The official AMP Plugin, supported by the AMP team, makes it easy to bring the power of AMP to your WordPress site, seamlessly integrating with the normal publishing flow and allowing the use of existing themes and plugins.\u003C\u002Fp>\n\u003Cp>\u003Cspan class=\"embed-youtube\" style=\"text-align:center; display: block;\">\u003Ciframe loading=\"lazy\" class=\"youtube-player\" width=\"750\" height=\"422\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002Fs52JNMT59s8?version=3&rel=1&showsearch=0&showinfo=1&iv_load_policy=1&fs=1&hl=en-US&autohide=2&wmode=transparent&listType=playlist&list=PLXTOW_XMsIDRGRr5QDffrvND8Qh1RndFb\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\">\u003C\u002Fiframe>\u003C\u002Fspan>\u003C\u002Fp>\n\u003Cp>For more videos like this, check out the ongoing \u003Ca href=\"https:\u002F\u002Fwww.youtube.com\u002Fplaylist?list=PLXTOW_XMsIDRGRr5QDffrvND8Qh1RndFb\" rel=\"nofollow ugc\">AMP for WordPress video series\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>The plugin’s key features include:\u003C\u002Fp>\n\u003Col>\n\u003Cli>\u003Cstrong>Automate the process of generating AMP-valid markup as much as possible\u003C\u002Fstrong>, letting users follow the standard workflows they are used to in WordPress.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Provide effective validation tools\u003C\u002Fstrong> to help users deal with AMP incompatibilities when they happen, including mechanisms for \u003Cstrong>identifying\u003C\u002Fstrong>, \u003Cstrong>contextualizing\u003C\u002Fstrong>, and \u003Cstrong>resolving issues caused by validation errors\u003C\u002Fstrong>.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Provide development support\u003C\u002Fstrong> to make it easier for WordPress developers to build AMP-compatible ecosystem components and build websites and solutions with AMP-compatibility built-in.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Support the serving of AMP pages\u003C\u002Fstrong> to make it easier for site owners to take advantage of mobile redirection, AMP-to-AMP linking, and generation of optimized AMP by default (via PHP port of AMP Optimizer).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Provide a turnkey solution\u003C\u002Fstrong> for segments of WordPress creators to be able to go from zero to publishing AMP pages in no time, regardless of technical expertise or availability of resources.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>The official AMP plugin for WordPress is a powerful tool that helps you build user-first WordPress sites, that is, sites that are fast, beautiful, secure, engaging, and accessible. A user-first site will deliver experiences that delight your users and therefore will increase user engagement and the success of your site. And, contrary to the popular belief of being only for mobile sites (it doesn’t stand for Accelerated \u003Cem>Mobile\u003C\u002Fem> Pages anymore!), AMP is a fully responsive web component framework, which means that you can provide AMP experiences for your users on both mobile and desktop devices.\u003C\u002Fp>\n\u003Ch4>AMP Plugin Audience: Everyone\u003C\u002Fh4>\n\u003Cp>This plugin can be used by both developers and non-developer users:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>If you are a developer or tech savvy user, you can take advantage of advanced developer tools provided by the AMP plugin to fix validation issues your site may have and reach full AMP compatibility.\u003C\u002Fli>\n\u003Cli>If you are not a developer or tech savvy user, or you just simply don’t want to deal with validation issues and tackling development tasks, the AMP plugin allows you to assemble fully AMP-compatible sites with different configurations taking advantage of AMP-compatible components. The plugin helps you to deal with validation issues by removing invalid AMP markup in cases where it is possible, or altogether suppressing AMP-incompatible plugins on AMP pages.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>The bottom line is that regardless of your technical expertise, the AMP plugin can be useful to you.\u003C\u002Fp>\n\u003Ch4>Template Modes\u003C\u002Fh4>\n\u003Cp>The official AMP plugin enables site owners to serve AMP to their users in different ways, which are referred to as template modes: Standard, Transitional, and Reader. The differences between them are in terms of the number of themes used (one or two), and the number of versions of the site (non-AMP, AMP). Each template mode brings its own value proposition and serves the needs of different scenarios in the large and diverse WordPress ecosystem. And in all cases, the AMP plugin provides as much support as possible in terms of automating the generation of AMP pages, as well as keeping the option chosen AMP valid. In a nutshell, the available template modes are the following:\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Standard Mode\u003C\u002Fstrong>: This template mode is the ideal, as there is only one theme for serving requests and a single version of your site: the AMP version. Besides enabling all of your site to be AMP-first, this has the added benefit of reducing development and maintenance costs. This mode is the best choice for sites where the theme and plugins used in the site are fully AMP-compatible. It's also a good option if some components are not AMP-compatible but the site owner has the resources or the know-how to fix them. See our \u003Ca href=\"https:\u002F\u002Famp-wp.org\u002Fshowcases\u002F?template_mode=standard\" rel=\"nofollow ugc\">showcase\u003C\u002Fa> of sites using Standard mode.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Transitional Mode\u003C\u002Fstrong>: In this mode there is also a single theme used, but there can be two versions of each page: AMP and non-AMP. The active theme is used for serving the AMP and non-AMP versions of a given URL. This mode is a good choice if the site uses a theme that is not fully AMP compatible, but the functional differences between the AMP and non-AMP pages are acceptable (due to graceful degradation). In this case, users accessing the site from mobile devices can get the AMP version and get an optimized experience which also retains the look and feel of the non-AMP version. Check out our \u003Ca href=\"https:\u002F\u002Famp-wp.org\u002Fshowcases\u002F?template_mode=transitional\" rel=\"nofollow ugc\">showcase\u003C\u002Fa> of sites using Transitional mode.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Reader Mode\u003C\u002Fstrong>: In this mode there are two different themes, one for AMP pages and another for non-AMP pages, and therefore there are also two versions of the site. This mode may be selected when the site is using an AMP-incompatible theme, but the level of incompatibilities is significant without graceful degradation. It’s also a good choice if you are not technically savvy (or simply do not want to deal with the incompatibilities) and therefore want simplified and robust workflows that allow you to take advantage of AMP with minimal effort.\u003C\u002Fp>\n\u003Cp>Different modes would be recommended in different scenarios, depending on the specifics of your site and your role. As you configure the plugin, it will suggest the mode that might be best for you based on its assessment of the theme and plugins used on your site. And, independently of the mode used, you have the option of serving all or only a portion of your site as AMP. This gives you all the flexibility you need to get started enabling AMP on your site progressively.\u003C\u002Fp>\n\u003Ch4>AMP Ecosystem\u003C\u002Fh4>\n\u003Cp>It is possible today to assemble great looking user-first sites powered by the AMP plugin by picking and choosing themes and plugins from a growing AMP-compatible ecosystem. In this context, the AMP plugin acts as an orchestrator of the overall AMP content creation and publishing process; it serves as a validator and enforcer making it easier to not only get to AMP experiences, but to maintain them with confidence.\u003C\u002Fp>\n\u003Cp>Many popular theme and plugin developers have taken efforts to support the official AMP plugin. If you are using a theme like Astra or Newspack, or if you are using plugins like Yoast or WP Forms — they will work out of the box! You can see the \u003Ca href=\"https:\u002F\u002Famp-wp.org\u002Fecosystem\u002F\" rel=\"nofollow ugc\">growing list\u003C\u002Fa> of tested themes and plugins.\u003C\u002Fp>\n\u003Ch4>AMP Development\u003C\u002Fh4>\n\u003Cp>Although there is a growing ecosystem of AMP-compatible WordPress components, there is still a ways to go before majority AMP compatibility in the ecosystem. If you are a developer, or you have the resources to pursue development projects, you may want in some cases to develop custom plugin or theme to serve your specific needs. The official AMP plugin can be of great help to you by providing powerful and effective developer tools that shed light into the AMP development process as it is done in WordPress. This includes mechanisms for detailing the root causes of validation issues, the contextual space to understand them properly, and methods to deal with them during the process of achieving full AMP compatibility. Read more about \u003Ca href=\"https:\u002F\u002Famp-wp.org\u002Fdocumentation\u002Fgetting-started\u002Fdeveloper-tools\u002F\" rel=\"nofollow ugc\">Developer Tools\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch4>Getting Started\u003C\u002Fh4>\n\u003Cp>To learn more about the plugin and start leveraging its capabilities to power your AMP publishing workflow, check \u003Ca href=\"https:\u002F\u002Famp-wp.org\u002F\" rel=\"nofollow ugc\">the official AMP plugin product site\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>If you are a developer, we encourage you to \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fampproject\u002Famp-wp\" rel=\"nofollow ugc\">follow along\u003C\u002Fa> or \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fampproject\u002Famp-wp\u002Fwiki\u002FContributing\" rel=\"nofollow ugc\">contribute\u003C\u002Fa> to the development of this plugin on GitHub.\u003C\u002Fp>\n\u003Cp>We have put up a comprehensive \u003Ca href=\"https:\u002F\u002Famp-wp.org\u002Fdocumentation\u002Ffrequently-asked-questions\u002F\" rel=\"nofollow ugc\">FAQ page\u003C\u002Fa> and extensive documentation to help you start as smoothly as possible.\u003C\u002Fp>\n\u003Cp>But if you need some help, we are right here to support you in the plugin’s \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fsupport\u002Fplugin\u002Famp\u002F\" rel=\"ugc\">support forum\u003C\u002Fa>, as well as through \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fampproject\u002Famp-wp\u002Fissues\" rel=\"nofollow ugc\">GitHub issues\u003C\u002Fa> (for technical bugs and feature requests). And our thriving \u003Ca href=\"https:\u002F\u002Famp-wp.org\u002Fecosystem\u002Famp-experts\u002F\" rel=\"nofollow ugc\">AMP Expert ecosystem\u003C\u002Fa> has indie freelancers to enterprise grade agencies in case you need commercial support!\u003C\u002Fp>\n","An easier path to great Page Experience for everyone. Powered by AMP.",400000,16312061,76,367,"2025-04-10T16:53:00.000Z","6.8.5","6.5","7.4",[15,29,30,31,32],"mobile","optimization","page-experience","performance","https:\u002F\u002Famp-wp.org","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Famp.2.5.5.zip",100,0,null,"2026-03-15T15:16:48.613Z",{"slug":40,"name":41,"version":42,"author":5,"author_profile":6,"description":43,"short_description":44,"active_installs":45,"downloaded":46,"rating":47,"num_ratings":48,"last_updated":49,"tested_up_to":25,"requires_at_least":50,"requires_php":51,"tags":52,"homepage":56,"download_link":57,"security_score":35,"vuln_count":36,"unpatched_count":36,"last_vuln_date":37,"fetched_at":38},"pwa","PWA","0.8.2","\u003Cblockquote cite=\"https:\u002F\u002Fdevelopers.google.com\u002Fweb\u002Fprogressive-web-apps\u002F\">\u003Cp>\nProgressive Web Apps are user experiences that have the reach of the web, and are:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fdevelopers.google.com\u002Fweb\u002Fprogressive-web-apps\u002F#reliable\" rel=\"nofollow ugc\">Reliable\u003C\u002Fa> – Load instantly and never show the downasaur, even in uncertain network conditions.\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fdevelopers.google.com\u002Fweb\u002Fprogressive-web-apps\u002F#fast\" rel=\"nofollow ugc\">Fast\u003C\u002Fa> – Respond quickly to user interactions with silky smooth animations and no janky scrolling.\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fdevelopers.google.com\u002Fweb\u002Fprogressive-web-apps\u002F#engaging\" rel=\"nofollow ugc\">Engaging\u003C\u002Fa> – Feel like a natural app on the device, with an immersive user experience.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>This new level of quality allows Progressive Web Apps to earn a place on the user’s home screen.\n\u003C\u002Fp>\u003C\u002Fblockquote>\n\u003Cp>Continue reading more about \u003Ca href=\"https:\u002F\u002Fweb.dev\u002Fprogressive-web-apps\u002F\" rel=\"nofollow ugc\">Progressive Web Apps\u003C\u002Fa> (PWA) from Google.\u003C\u002Fp>\n\u003Cp>In general a PWA depends on the following technologies to be available:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAPI\u002FService_Worker_API\" rel=\"nofollow ugc\">Service Workers\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FManifest\" rel=\"nofollow ugc\">Web App Manifest\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHTTPS\" rel=\"nofollow ugc\">HTTPS\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>This plugin serves as a place to implement support for these in WordPress with the intention of being proposed for core merge, piece by piece. Case in point, the HTTPS functionality from this plugin has largely been made part of Core: \u003Ca href=\"https:\u002F\u002Fmake.wordpress.org\u002Fcore\u002F2021\u002F02\u002F22\u002Fimproved-https-detection-and-migration-in-wordpress-5-7\u002F\" rel=\"nofollow ugc\">Improved HTTPS detection and migration in WordPress 5.7\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>This feature plugin is \u003Cem>not\u003C\u002Fem> intended to obsolete the other plugins and themes which turn WordPress sites into PWAs. Rather, this plugin is intended to provide the PWA building blocks and coordination mechanism for these themes and plugins to not reinvent the wheel and also to not conflict with each other. For example, a theme that implements the app shell model should be able to extend the core service worker while a plugin that provides push notifications should be able to do the same. Themes and plugins no longer should have to each create a service worker on their own, something which is inherently problematic because only one service worker can be active at a time: only one service worker can win. If you are developing a plugin or theme that includes a service worker, consider relying on this PWA plugin, or at least only use the built-in implementation as a fallback for when the PWA plugin is not available.\u003C\u002Fp>\n\u003Cp>In versions prior to 0.6, no caching strategies were added by default. The only service worker behavior was to serve an offline template when the client’s connection is down or the site is down, and also to serve an error page when the server returns with 500 Internal Server Error. As of 0.6, there is a new “Offline browsing” toggle on the Reading Settings screen in the admin. It is disabled by default, but when enabled a \u003Ca href=\"https:\u002F\u002Fweb.dev\u002Foffline-cookbook\u002F#network-falling-back-to-cache\" rel=\"nofollow ugc\">network-first\u003C\u002Fa> caching strategy is registered for navigations so that the offline page won’t be shown when accessing previously-accessed pages. The network-first strategy is also used for assets from themes, plugins, and WordPress core. In addition, uploaded images get served with a \u003Ca href=\"https:\u002F\u002Fweb.dev\u002Foffline-cookbook\u002F#stale-while-revalidate\" rel=\"nofollow ugc\">stale-while-revalidate\u003C\u002Fa> strategy. For all the details on these changes, see the \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FGoogleChromeLabs\u002Fpwa-wp\u002Fpull\u002F338\" rel=\"nofollow ugc\">pull request\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>Documentation for the plugin can be found on the \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FGoogleChromeLabs\u002Fpwa-wp\u002Fwiki\" rel=\"nofollow ugc\">GitHub project Wiki\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Development of this plugin is done \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FGoogleChromeLabs\u002Fpwa-wp\" rel=\"nofollow ugc\">on GitHub\u003C\u002Fa>. Pull requests welcome. Please see \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FGoogleChromeLabs\u002Fpwa-wp\u002Fissues\" rel=\"nofollow ugc\">issues\u003C\u002Fa> reported there before going to the \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fsupport\u002Fplugin\u002Fpwa\" rel=\"ugc\">plugin forum\u003C\u002Fa>.\u003C\u002Fstrong>\u003C\u002Fp>\n","WordPress feature plugin to bring Progressive Web App (PWA) capabilities to Core",20000,594997,86,27,"2025-04-10T16:55:00.000Z","6.6","7.2",[53,40,54,55],"progressive-web-apps","service-workers","web-app-manifest","https:\u002F\u002Fgithub.com\u002FGoogleChromeLabs\u002Fpwa-wp","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fpwa.0.8.2.zip",{"slug":59,"name":60,"version":61,"author":5,"author_profile":6,"description":62,"short_description":63,"active_installs":64,"downloaded":65,"rating":35,"num_ratings":66,"last_updated":67,"tested_up_to":68,"requires_at_least":69,"requires_php":51,"tags":70,"homepage":72,"download_link":73,"security_score":35,"vuln_count":36,"unpatched_count":36,"last_vuln_date":37,"fetched_at":38},"nocache-bfcache","Instant Back\u002FForward","1.3.1","\u003Cp>\u003Cem>This plugin was formerly called as “No-cache BFCache”, which admittedly was a poor jargony name and was too narrowly scoped.\u003C\u002Fem>\u003C\u002Fp>\n\u003Cp>This plugin enables instant back\u002Fforward navigation via the browser’s \u003Ca href=\"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FGlossary\u002Fbfcache\" rel=\"nofollow ugc\">bfcache\u003C\u002Fa>. It does this by removing the \u003Ccode>no-store\u003C\u002Fcode> directive from the \u003Ccode>Cache-Control\u003C\u002Fcode> response header, which WordPress sends by default when \u003Ccode>nocache_headers()\u003C\u002Fcode> is called. This happens primarily when a user is logged in, but some plugins may send these “no-cache” headers such as on the Cart or Checkout pages for an e-commerce site. \u003Cstrong>Upon activation, to see the effect, you must log out of WordPress and log back in again, ensuring “Remember Me” is checked.\u003C\u002Fstrong> Even so, another plugin, theme or server configuration may be active which makes pages \u003Ca href=\"https:\u002F\u002Fweb.dev\u002Farticles\u002Fbfcache#optimize\" rel=\"nofollow ugc\">ineligible for bfcache\u003C\u002Fa> due to other \u003Ca href=\"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAPI\u002FPerformance_API\u002FMonitoring_bfcache_blocking_reasons#blocking_reasons\" rel=\"nofollow ugc\">blocking reasons\u003C\u002Fa>. Nevertheless, the removal of \u003Ccode>no-store\u003C\u002Fcode> will \u003Cem>still speed up back\u002Fforward navigations\u003C\u002Fem> since pages may then be served from the browser’s HTTP cache, eliminating the need to re-download the HTML from the server. This is a feature plugin to implement \u003Ca href=\"https:\u002F\u002Fcore.trac.wordpress.org\u002Fticket\u002F63636\" rel=\"nofollow ugc\">#63636\u003C\u002Fa> in WordPress core.\u003C\u002Fp>\n\u003Cp>Blog post: \u003Ca href=\"https:\u002F\u002Fweston.ruter.net\u002F2025\u002F07\u002F23\u002Finstant-back-forward-navigations-in-wordpress\u002F\" rel=\"nofollow ugc\">Instant Back\u002FForward Navigations in WordPress\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>The speed of page navigations in WordPress saw a big boost in 6.8 with the introduction of \u003Ca href=\"https:\u002F\u002Fmake.wordpress.org\u002Fcore\u002F2025\u002F03\u002F06\u002Fspeculative-loading-in-6-8\u002F\" rel=\"nofollow ugc\">Speculative Loading\u003C\u002Fa>. However, by default Speculative Loading in WordPress is not configured to enable \u003Cem>instant\u003C\u002Fem> page loads, which requires a non-conservative eagerness with the prerender mode; not all sites can even opt in to prerendering due to compatibility issues, such as with analytics, and due to concerns about sustainability with unused prerenders (e.g. increasing server load and taxing a user’s bandwidth\u002FCPU). While Speculative Loading (i.e. the Speculation Rules API) is relatively new and currently only supported in Chromium browsers (e.g. Chrome and Edge), there is a much older web platform technology that enables prerendering \u003Cem>and\u003C\u002Fem> which is supported in all browsers: the back\u002Fforward cache (bfcache). This instant loading involves no network traffic and no CPU load, since previously visited pages are stored in memory. According to the web.dev article on \u003Ca href=\"https:\u002F\u002Fweb.dev\u002Farticles\u002Fbfcache\" rel=\"nofollow ugc\">back\u002Fforward cache\u003C\u002Fa>:\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Chrome usage data shows that 1 in 10 navigations on desktop and 1 in 5 on mobile are either back or forward. With bfcache enabled, browsers could eliminate the data transfer and time spent loading for billions of web pages every single day!\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>Also learn more via the following video:\u003C\u002Fp>\n\u003Cp>\u003Cspan class=\"embed-youtube\" style=\"text-align:center; display: block;\">\u003Ciframe loading=\"lazy\" class=\"youtube-player\" width=\"750\" height=\"422\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002FY2IVv5KnrmI?version=3&rel=1&showsearch=0&showinfo=1&iv_load_policy=1&fs=1&hl=en-US&autohide=2&wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\">\u003C\u002Fiframe>\u003C\u002Fspan>\u003C\u002Fp>\n\u003Cp>Normally, WordPress sends a \u003Ccode>Cache-Control\u003C\u002Fcode> header with the \u003Ccode>no-store\u003C\u002Fcode> directive when a user is logged in. This has the effect of \u003Ca href=\"https:\u002F\u002Fweb.dev\u002Farticles\u002Fbfcache#minimize-no-store\" rel=\"nofollow ugc\">breaking the browser’s bfcache\u003C\u002Fa>, which means that navigating back or forward in the browser requires the pages to be re-fetched from the server and for any JavaScript on the page to re-execute. The result can be a sluggish navigation experience not only when navigating around the WP Admin (see \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FAutomattic\u002Fjetpack\u002Fpull\u002F44322#:~:text=page%20load%20is%3A-,Without%20bfcache,-With%20bfcache\" rel=\"nofollow ugc\">Jetpack demo video\u003C\u002Fa> and demo video below) but also when navigating around the frontend of a site. Furthermore, the lack of bfcache can cause data loss when data has been entered via a JavaScript-built UI since this state is lost when a page is not restored via bfcache (see \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fwoocommerce\u002Fwoocommerce\u002Fpull\u002F58445#issuecomment-3014404754\" rel=\"nofollow ugc\">WooCommerce demo video\u003C\u002Fa> and demo video below).\u003C\u002Fp>\n\u003Cp>The reason why the \u003Ccode>no-store\u003C\u002Fcode> directive was added in the first place was due to a privacy concern where an authenticated user may log out of WordPress, only for another person to access the computer and click the back button to view the contents of the authenticated page loaded from bfcache or the HTTP cache. (See \u003Ca href=\"https:\u002F\u002Fcore.trac.wordpress.org\u002Fticket\u002F21938\" rel=\"nofollow ugc\">#21938\u003C\u002Fa>.) In practice this issue depends on the user being on a shared computer who didn’t exit the browser, and it requires the malicious user to act soon before the page is evicted from bfcache (e.g. Chrome as a \u003Ca href=\"https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fweb-platform\u002Fbfcache-ccns#:~:text=The%20bfcache%20timeout%20for%20Cache%2DControl%3A%20no%2Dstore%20pages%20is%20also%20reduced%20to%203%20minutes%20(from%2010%20minutes%20used%20for%20pages%20which%20don%27t%20use%20Cache%2DControl%3A%20no%2Dstore)%20to%20further%20reduce%20risk.\" rel=\"nofollow ugc\">10-minute timeout\u003C\u002Fa>).\u003C\u002Fp>\n\u003Cp>To address this privacy concern, a safeguard is in place to protect against restoring pages from bfcache and the HTTP cache after the user has logged out:\u003C\u002Fp>\n\u003Cp>When authenticating to WordPress, a “bfcache session token” cookie is set along with the other authentication cookies. This cookie is not HTTP-only so that it can be read in JavaScript; it is a random string not used for any other purpose. When an authenticated page is served, this bfcache session token is included in the HTML as well as a script which reads the value of this cookie. When a user navigates away from the page and then navigates back to it, a script on the page checks if the current session token in the cookie matches the initial session token sent with the page. If they do not match (e.g. because the user has logged out or another user has logged in), then the contents of the page are cleared and the page is reloaded so that the contents are not available.\u003C\u002Fp>\n\u003Cp>Since JavaScript is required to invalidate cached pages, the login form is extended to pass along whether scripting is enabled. Only when JS is enabled will the \u003Ccode>no-store\u003C\u002Fcode> directive be omitted from the \u003Ccode>Cache-Control\u003C\u002Fcode> response header. This ensures that users with JavaScript turned off will retain the privacy protection after logging out. Lastly, \u003Ccode>no-store\u003C\u002Fcode> is also only omitted if the user checked the “Remember Me” checkbox on the login form. Since it is highly unlikely a user on a shared computer would have checked this checkbox, this provides yet an additional safeguard (which may in the end prove excessive). A ✨ emoji is displayed next to the checkbox in a button that opens a popover that promotes the capability. If you want to opt out of this opt-in (and the sparkle) so that all logged-in users get bfcache, you can use the \u003Ccode>nocache_bfcache_use_remember_me_as_opt_in\u003C\u002Fcode> filter which you can use in a custom plugin or your theme:\u003C\u002Fp>\n\u003Cpre>add_filter( 'nocache_bfcache_use_remember_me_as_opt_in', '__return_false' );\u003C\u002Fpre>\n\u003Cp>When this plugin strips out the \u003Ccode>no-store\u003C\u002Fcode> directive, it also ensures that the \u003Ca href=\"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FHTTP\u002FReference\u002FHeaders\u002FCache-Control#private\" rel=\"nofollow ugc\">\u003Ccode>private\u003C\u002Fcode> directive\u003C\u002Fa> is sent in its place: “The \u003Ccode>private\u003C\u002Fcode> response directive indicates that the response can be stored only in a private cache (e.g., local caches in browsers).” WordPress is already sending \u003Ccode>private\u003C\u002Fcode> as of \u003Ca href=\"https:\u002F\u002Fcore.trac.wordpress.org\u002Fticket\u002F57627\" rel=\"nofollow ugc\">#57627\u003C\u002Fa>. This directive ensures that proxies do not cache authenticated pages. In addition to ensuring \u003Ccode>private\u003C\u002Fcode> is present, this plugin also adds \u003Ccode>no-cache\u003C\u002Fcode>, \u003Ccode>max-age=0\u003C\u002Fcode>, and \u003Ccode>must-revalidate\u003C\u002Fcode> while ensuring \u003Ccode>public\u003C\u002Fcode> is removed, all to further guard against any misconfigured proxy from caching the private response.\u003C\u002Fp>\n\u003Ch4>Demo: Navigating the WordPress Admin\u003C\u002Fh4>\n\u003Cp>Without bfcache:\u003C\u002Fp>\n\u003Cp>\u003Cspan class=\"embed-youtube\" style=\"text-align:center; display: block;\">\u003Ciframe loading=\"lazy\" class=\"youtube-player\" width=\"750\" height=\"422\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002FCz-_L6q9ZRc?version=3&rel=1&showsearch=0&showinfo=1&iv_load_policy=1&fs=1&hl=en-US&autohide=2&start=22&wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\">\u003C\u002Fiframe>\u003C\u002Fspan>\u003C\u002Fp>\n\u003Cp>With bfcache:\u003C\u002Fp>\n\u003Cp>\u003Cspan class=\"embed-youtube\" style=\"text-align:center; display: block;\">\u003Ciframe loading=\"lazy\" class=\"youtube-player\" width=\"750\" height=\"422\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002Fz4dILiwe0Rk?version=3&rel=1&showsearch=0&showinfo=1&iv_load_policy=1&fs=1&hl=en-US&autohide=2&start=27&wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\">\u003C\u002Fiframe>\u003C\u002Fspan>\u003C\u002Fp>\n\u003Ch4>Demo: Navigating the WordPress Frontend\u003C\u002Fh4>\n\u003Cp>\u003Cstrong>Without bfcache:\u003C\u002Fstrong> The drafted BuddyPress activity update is lost when navigating away from the page before submitting. The activity feed and Tweet have to be reconstructed with each back\u002Fforward navigation.\u003C\u002Fp>\n\u003Cp>\u003Cspan class=\"embed-youtube\" style=\"text-align:center; display: block;\">\u003Ciframe loading=\"lazy\" class=\"youtube-player\" width=\"750\" height=\"422\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002FKo1w_SRlCig?version=3&rel=1&showsearch=0&showinfo=1&iv_load_policy=1&fs=1&hl=en-US&autohide=2&wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\">\u003C\u002Fiframe>\u003C\u002Fspan>\u003C\u002Fp>\n\u003Cp>\u003Cstrong>With bfcache:\u003C\u002Fstrong> The drafted BuddyPress activity update is preserved when navigating away from the page without submitting. The activity feed and Tweet do not have to be reconstructed when navigating to previously visited pages via the back\u002Fforward buttons.\u003C\u002Fp>\n\u003Cp>\u003Cspan class=\"embed-youtube\" style=\"text-align:center; display: block;\">\u003Ciframe loading=\"lazy\" class=\"youtube-player\" width=\"750\" height=\"422\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002FbzGm6LcHHAs?version=3&rel=1&showsearch=0&showinfo=1&iv_load_policy=1&fs=1&hl=en-US&autohide=2&wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\">\u003C\u002Fiframe>\u003C\u002Fspan>\u003C\u002Fp>\n","Enables back\u002Fforward cache (bfcache) for instant history navigations even when “nocache” headers are sent, such as when a user is logged in.",10000,27576,1,"2025-11-30T02:53:00.000Z","6.9.4","6.8",[71,32],"caching","https:\u002F\u002Fgithub.com\u002Fwestonruter\u002Fnocache-bfcache","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fnocache-bfcache.1.3.1.zip",{"slug":75,"name":76,"version":77,"author":5,"author_profile":6,"description":78,"short_description":79,"active_installs":80,"downloaded":81,"rating":47,"num_ratings":82,"last_updated":83,"tested_up_to":84,"requires_at_least":85,"requires_php":86,"tags":87,"homepage":91,"download_link":92,"security_score":93,"vuln_count":94,"unpatched_count":36,"last_vuln_date":95,"fetched_at":38},"user-photo","User Photo","0.9.10","\u003Cp>Allows a user to associate a profile photo with their account through their “Your Profile” page. Admins may\u003Cbr \u002F>\nadd a user profile photo by accessing the “Edit User” page. Uploaded images are resized to fit the dimensions specified\u003Cbr \u002F>\non the options page; a thumbnail image correspondingly is also generated.\u003Cbr \u002F>\nUser photos may be displayed within a post or a comment to\u003Cbr \u002F>\nhelp identify the author. New template tags introduced are:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>userphoto_the_author_photo()\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>userphoto_the_author_thumbnail()\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>userphoto_comment_author_photo()\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>userphoto_comment_author_thumbnail()\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cem>Important: all of these “template tags” must appear inside of PHP script blocks (see examples below).\u003C\u002Fem>\u003Cbr \u002F>\nThe first two should be placed in the posts loop near \u003Ccode>the_author()\u003C\u002Fcode>, and the second two in the comments\u003Cbr \u002F>\nloop near \u003Ccode>comment_author()\u003C\u002Fcode> (or their respective equivalents). Furthermore, \u003Ccode>userphoto_the_author_photo()\u003C\u002Fcode>\u003Cbr \u002F>\nand \u003Ccode>userphoto_the_author_thumbnail()\u003C\u002Fcode> may be called anywhere (i.e. sidebar) if \u003Ccode>$authordata\u003C\u002Fcode> is set.\u003C\u002Fp>\n\u003Cp>The output of these template tags may be modified by passing four parameters: \u003Ccode>$before\u003C\u002Fcode>, \u003Ccode>$after\u003C\u002Fcode>, \u003Ccode>$attributes\u003C\u002Fcode>, and \u003Ccode>$default_src\u003C\u002Fcode>,\u003Cbr \u002F>\nas in: \u003Ccode>userphoto_the_author_photo($before, $after, $attributes, $default_src)\u003C\u002Fcode>.\u003Cbr \u002F>\nIf the user photo exists (or \u003Ccode>$default_src\u003C\u002Fcode> is supplied), then the text provided in the \u003Ccode>$before\u003C\u002Fcode> and \u003Ccode>$after\u003C\u002Fcode> parameters is respectively\u003Cbr \u002F>\nprefixed and suffixed to the generated \u003Ccode>img\u003C\u002Fcode> tag (a common pattern in WordPress). If attributes are provided in the \u003Ccode>$attributes\u003C\u002Fcode>\u003Cbr \u002F>\nparameter, then they are returned as attributes of the generated \u003Ccode>img\u003C\u002Fcode> element. For example: \u003Ccode>userphoto_the_author_photo('', '', array(style => 'border:0'))\u003C\u002Fcode>\u003Cbr \u002F>\nJust added in 0.8.1 release are these two new template tags:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>userphoto($user, $before = '', $after = '', $attributes = array(), $default_src = '')\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>userphoto_thumbnail($user, $before = '', $after = '', $attributes = array(), $default_src = '')\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>By using these, it is uneccessary to set the global \u003Ccode>$authordata\u003C\u002Fcode> to display a photo. Just pass \u003Ccode>$authordata\u003C\u002Fcode>, \u003Ccode>$curauth\u003C\u002Fcode> or\u003Cbr \u002F>\nwhatever variable you have which contains the user object, or (as of version 0.9), pass in a user ID or a user login name.\u003C\u002Fp>\n\u003Cp>Here’s an example that shows a few ways of inserting a user’s photo into the post loop:\u003Cbr \u002F>\n    \u002F\u002Fthis will display the user’s avatar if they don’t have a user photo,\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\u003C?php while (have_posts()) : the_post(); ?>\n    \u003Cdiv class=\"post\" id=\"post-\u003C?php the_ID(); ?>\">\n        \u003Ch2>\u003Ca href=\"\u003C?php the_permalink() ?>\">\u003C?php the_title(); ?>\u003C\u002Fa>\u003C\u002Fh2>\n        \u003Cdiv class=\"meta\">\n            \u003C?php the_time('F jS, Y') ?>\n            by \u003C?php the_author() ?>\n\n            \u003C!-- displays the user's photo and then thumbnail -->\n            \u003C?php userphoto_the_author_photo() ?>\n            \u003C?php userphoto_the_author_thumbnail() ?>\n\n            \u003C!-- the following two do the same since $authordata populated -->\n            \u003C?php userphoto($authordata) ?>\n            \u003C?php userphoto_thumbnail($authordata) ?>\n\n            \u003C!-- and this is how to customize the output -->\n            \u003C?php userphoto_the_author_photo(\n                '\u003Cb>Photo of me: ',\n                '\u003C\u002Fb>',\n                array('class' => 'photo'),\n                get_template_directory_uri() . '\u002Fnophoto.jpg'\n            ) ?>\n        \u003C\u002Fdiv>\n        \u003C?php the_content('Read the rest of this entry &raquo;'); ?>\n    \u003C\u002Fdiv>\n\u003C?php endwhile; ?>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>If you want to display the user’s photo in the sidebar, just get the user ID or object and pass it into \u003Ccode>userphoto()\u003C\u002Fcode> or \u003Ccode>userphoto_thumbnail()\u003C\u002Fcode> like this:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\u003C?php userphoto($posts[0]->post_author); ?>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>If you want to display a user’s photo their author page, you may do this:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\u003C?php userphoto($wp_query->get_queried_object()) ?>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>In version 0.9 the boolean function \u003Ccode>userphoto_exists($user)\u003C\u002Fcode> has been introduced which returns true if the user has a photo and false if they do not.\u003Cbr \u002F>\nArgument \u003Ccode>$user\u003C\u002Fcode> may be user object, ID, or login name. This function can be used along with avatars:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\u003C?php\nif(userphoto_exists($user))\n    userphoto($user);\nelse\n    echo get_avatar($user->ID, 96);\n?>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Or if the new “Serve Avatar as Fallback” option is turned on, then the avatar will be served by any of the regular calls to display the user photo:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\u003C?php\n\u002F\u002Fthis will display the user's avatar if they don't have a user photo,\n\u002F\u002F  and if \"Serve Avatar as Fallback\" is turned on\nuserphoto($user);\n?>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Additionally, all of the regular function calls to display the user photo may be done away with alltogether if the new “Override Avatar with User Photo”\u003Cbr \u002F>\noption is enabled:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\u003C?php\n\u002F\u002Fboth will display the user photo if it exists\n\u002F\u002F  and if \"Override Avatar with User Photo\" is turned on\necho get_avatar($user_id);\necho get_avatar($user->user_email);\n?>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Both options “Serve Avatar as Fallback” and “Override Avatar with User Photo” require that the ‘Avatar Display’ setting under Discussion be set to “Show”.\u003C\u002Fp>\n\u003Cp>Uploaded images may be moderated by administrators via the “Edit User” page.\u003C\u002Fp>\n\u003Cp>Localizations included for Spanish, German, Dutch, Polish, Russian, French, Hungarian, Brazilian Portuguese, Italian, and Catalan.\u003C\u002Fp>\n\u003Cp>If you value this plugin, \u003Cem>please donate\u003C\u002Fem> to ensure that it may continue to be maintained and improved.\u003C\u002Fp>\n","Allows a user to associate a photo with their account and for this photo to be displayed in their posts and comments.",3000,487412,20,"2017-11-28T09:18:00.000Z","4.6.30","3.0.5","",[88,89,90],"images","photos","users","http:\u002F\u002Fwordpress.org\u002Fextend\u002Fplugins\u002Fuser-photo\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fuser-photo.0.9.10.zip",84,2,"2012-05-09 00:00:00",{"slug":97,"name":98,"version":99,"author":5,"author_profile":6,"description":100,"short_description":101,"active_installs":102,"downloaded":103,"rating":104,"num_ratings":105,"last_updated":106,"tested_up_to":107,"requires_at_least":108,"requires_php":86,"tags":109,"homepage":115,"download_link":116,"security_score":117,"vuln_count":36,"unpatched_count":36,"last_vuln_date":37,"fetched_at":38},"customize-posts","Customize Posts","0.9.1","\u003Cp>\u003Cem>This is a feature plugin intended to implement \u003Ca href=\"https:\u002F\u002Fcore.trac.wordpress.org\u002Fticket\u002F34923\" rel=\"nofollow ugc\">#34923\u003C\u002Fa>: Introduce basic content authorship in the Customizer.\u003C\u002Fem>\u003C\u002Fp>\n\u003Cp>The goal for this plugin is to be able to expose the editing of posts and pages in the Customizer, allowing you to edit post data and postmeta for any number of posts, and preview the changes before saving them for others to see. This plugin was birthed out of the Widget Customizer feature-as-plugin project which was merged into WordPress Core: as widgets (in 3.9) and nav menus (4.3) can now be managed in the Customizer, so too should posts and pages be editable in the Customizer as well.\u003C\u002Fp>\n\u003Cp>Did you know that \u003Cstrong>changing the featured image actually makes the change live even before you save the post\u003C\u002Fstrong>? This is very surprising\u002Funexpected behavior. The only way to truly preview a change to a featured image is to use something like Customize Posts.\u003C\u002Fp>\n\u003Cp>Likewise, did you know that \u003Cstrong>changing a page template cannot be previewed from the post editor?\u003C\u002Fstrong> When you change the selected page template, the change will not show up when you preview the page (see \u003Ca href=\"https:\u002F\u002Fcore.trac.wordpress.org\u002Fticket\u002F11049\" rel=\"nofollow ugc\">#11049\u003C\u002Fa>). However, in Customize Posts you \u003Cem>can\u003C\u002Fem> preview changes to the page template just by changing the dropdown selection, and then you can see what your page would look like with the new template after the preview refreshes.\u003C\u002Fp>\n\u003Cp>Most other changes to metaboxes containing data that gets saved to custom fields (postmeta) also get written when clicking the Preview button. The Customize Posts plugin provides a framework to edit postmeta in the Customizer with a live preview of the changes. (Fixing this underlying issue of incorrectly persisting postmeta when doing a preview is captured in \u003Ca href=\"https:\u002F\u002Fcore.trac.wordpress.org\u002Fticket\u002F20299\" rel=\"nofollow ugc\">#20299\u003C\u002Fa>.)\u003C\u002Fp>\n\u003Cp>As much as possible, the previewing of changes in Customize Posts utilizes the \u003Ca href=\"https:\u002F\u002Fmake.wordpress.org\u002Fcore\u002F2016\u002F02\u002F16\u002Fselective-refresh-in-the-customizer\u002F\" rel=\"nofollow ugc\">selective refresh\u003C\u002Fa> capabilities introduced in WordPress 4.5. Not only does this mean it is faster to preview changes to posts and postmeta, but it also allows you to shift-click on an element to focus on the corresponding control in the Customizer pane. For example you can shift-click on the post title in the preview to focus on the post title control’s input field, or shift-click on a featured image to focus on the control’s button to open the media library.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Development of this plugin is done \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fxwp\u002Fwp-customize-posts\" rel=\"nofollow ugc\">on GitHub\u003C\u002Fa>. Pull requests welcome. Please see \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fxwp\u002Fwp-customize-posts\u002Fissues\" rel=\"nofollow ugc\">issues\u003C\u002Fa> reported there before going to the \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fsupport\u002Fplugin\u002Fcustomize-posts\" rel=\"ugc\">plugin forum\u003C\u002Fa>.\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>(This \u003Cstrong>Customize Posts\u003C\u002Fstrong> plugin is not to be confused with 10up’s \u003Ca href=\"https:\u002F\u002Fgithub.com\u002F10up\u002FPost-Customizer\" rel=\"nofollow ugc\">\u003Cstrong>Post Customizer\u003C\u002Fstrong>\u003C\u002Fa>.)\u003C\u002Fp>\n\u003Ch4>Demo Videos\u003C\u002Fh4>\n\u003Cp>The following are listed in reverse chronological order. The first, more recent videos, show more polish.\u003C\u002Fp>\n\u003Cp>[2016-04-28] New features in 0.5.0.\u003C\u002Fp>\n\u003Cspan class=\"embed-youtube\" style=\"text-align:center; display: block;\">\u003Ciframe loading=\"lazy\" class=\"youtube-player\" width=\"750\" height=\"422\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002F2NXh-1_eUqI?version=3&rel=1&showsearch=0&showinfo=1&iv_load_policy=1&fs=1&hl=en-US&autohide=2&wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\">\u003C\u002Fiframe>\u003C\u002Fspan>\n\u003Cp>[2016-03-28] Previewing post from Post Edit screen.\u003C\u002Fp>\n\u003Cspan class=\"embed-youtube\" style=\"text-align:center; display: block;\">\u003Ciframe loading=\"lazy\" class=\"youtube-player\" width=\"750\" height=\"422\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002FQ62nav1k4gY?version=3&rel=1&showsearch=0&showinfo=1&iv_load_policy=1&fs=1&hl=en-US&autohide=2&wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\">\u003C\u002Fiframe>\u003C\u002Fspan>\n\u003Cp>[2016-03-05] Opening a draft post in the Customizer to preview title wrapping.\u003C\u002Fp>\n\u003Cspan class=\"embed-youtube\" style=\"text-align:center; display: block;\">\u003Ciframe loading=\"lazy\" class=\"youtube-player\" width=\"750\" height=\"422\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002FsXu2pA42J88?version=3&rel=1&showsearch=0&showinfo=1&iv_load_policy=1&fs=1&hl=en-US&autohide=2&wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\">\u003C\u002Fiframe>\u003C\u002Fspan>\n\u003Cp>[2016-03-04] Demo featuring the WP visual rich text editor (TinyMCE), including the insertion of images from the media library. Post content can be edited in the Customizer and previewed in multiple contexts. For example, this allows you to preview how a Read More tag will appear when the post appears on a post list page, and you can navigate to the single post to continue previewing subsequent paragraphs. You can expand the editor into a full-screen mode to focus on writing and then quickly preview the changes on the site by toggling the editor. You can make changes to as many posts as you want, but none of the changes will go live until you hit Save & Publish: everything is previewed so there is no “save and surprise”.\u003C\u002Fp>\n\u003Cspan class=\"embed-youtube\" style=\"text-align:center; display: block;\">\u003Ciframe loading=\"lazy\" class=\"youtube-player\" width=\"750\" height=\"422\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002FQJsEl0gd7dk?version=3&rel=1&showsearch=0&showinfo=1&iv_load_policy=1&fs=1&hl=en-US&autohide=2&wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\">\u003C\u002Fiframe>\u003C\u002Fspan>\n\u003Cp>[2016-03-03] Demonstration of integration with \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fxwp\u002Fwp-customize-setting-validation\" rel=\"nofollow ugc\">Customize Setting Validation\u003C\u002Fa> (\u003Ca href=\"https:\u002F\u002Fcore.trac.wordpress.org\u002Fticket\u002F34893\" rel=\"nofollow ugc\">#34893\u003C\u002Fa>) to gracefully handle failures to save due to post locking and concurrent user editing:\u003C\u002Fp>\n\u003Cspan class=\"embed-youtube\" style=\"text-align:center; display: block;\">\u003Ciframe loading=\"lazy\" class=\"youtube-player\" width=\"750\" height=\"422\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002FOUwwTt6FtlQ?version=3&rel=1&showsearch=0&showinfo=1&iv_load_policy=1&fs=1&hl=en-US&autohide=2&wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\">\u003C\u002Fiframe>\u003C\u002Fspan>\n\u003Cp>[2016-03-01] Demonstration of hooking into edit post links so that they actually work in the Customizer and expand the section to edit the given post (as opposed to the link doing nothing at all when clicked), as well as shift-clicking on the title and content (needs better discovery UI, see \u003Ca href=\"https:\u002F\u002Fcore.trac.wordpress.org\u002Fticket\u002F27403\" rel=\"nofollow ugc\">#27403\u003C\u002Fa>):\u003C\u002Fp>\n\u003Cspan class=\"embed-youtube\" style=\"text-align:center; display: block;\">\u003Ciframe loading=\"lazy\" class=\"youtube-player\" width=\"750\" height=\"422\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002FnYfph3NbNCc?version=3&rel=1&showsearch=0&showinfo=1&iv_load_policy=1&fs=1&hl=en-US&autohide=2&wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\">\u003C\u002Fiframe>\u003C\u002Fspan>\n","Edit posts and postmeta in the Customizer. Stop editing your posts\u002Fpostmeta blind!",1000,56700,94,18,"2017-11-14T03:37:00.000Z","4.9.0","4.7.0",[110,111,112,113,114],"customize","customizer","editor","postmeta","posts","https:\u002F\u002Fgithub.com\u002Fxwp\u002Fwp-customize-posts\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fcustomize-posts.0.9.1.zip",85,{"slug":119,"name":120,"version":121,"author":5,"author_profile":6,"description":122,"short_description":123,"active_installs":102,"downloaded":124,"rating":35,"num_ratings":125,"last_updated":126,"tested_up_to":68,"requires_at_least":127,"requires_php":51,"tags":128,"homepage":129,"download_link":130,"security_score":35,"vuln_count":36,"unpatched_count":36,"last_vuln_date":37,"fetched_at":38},"load-combined-core-block-assets","Load Combined Core Block Assets","1.0.0","\u003Cp>This is a temporary workaround for sites experiencing any issues with WordPress 6.9’s new ability to \u003Ca href=\"https:\u002F\u002Fmake.wordpress.org\u002Fcore\u002F2025\u002F11\u002F18\u002Fwordpress-6-9-frontend-performance-field-guide\u002F#load-block-styles-on-demand-in-classic-themes\" rel=\"nofollow ugc\">load block styles on demand in classic themes\u003C\u002Fa>, for example \u003Ca href=\"https:\u002F\u002Fcore.trac.wordpress.org\u002Fticket\u002F64354\" rel=\"nofollow ugc\">#64354\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>If running a classic theme (i.e. not a block theme), it filters \u003Ccode>should_load_separate_core_block_assets\u003C\u002Fcode> to be \u003Ccode>false\u003C\u002Fcode>. This has the effect of reverting a change introduced in 6.9 where classic themes now load separate core block assets on demand by default.\u003C\u002Fp>\n\u003Cp>Note that this plugin should be considered temporary until any issues are resolved in 6.9.1. At any time, you can test whether any issues remain by adding \u003Ccode>?should_load_separate_core_block_assets=true\u003C\u002Fcode> to any frontend URL; this restores the default behavior in WP 6.9.\u003C\u002Fp>\n\u003Cp>This workaround is temporary because there are performance benefits to loading separate core block assets. They can be loaded on demand just when they are used, as opposed to loading the large single combined \u003Ccode>wp-block-library\u003C\u002Fcode> stylesheet. Loading separate block styles on demand reduces the amount of CSS which should improve page load time.\u003C\u002Fp>\n","Temporary workaround for sites experiencing issues with WordPress 6.9's new ability to load block styles on demand in classic themes.",1914,6,"2025-12-08T18:59:00.000Z","6.9",[32],"https:\u002F\u002Fgithub.com\u002Fwestonruter\u002Fload-combined-core-block-assets","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fload-combined-core-block-assets.1.0.0.zip",{"slug":132,"name":133,"version":134,"author":5,"author_profile":6,"description":135,"short_description":136,"active_installs":102,"downloaded":137,"rating":35,"num_ratings":138,"last_updated":139,"tested_up_to":68,"requires_at_least":50,"requires_php":27,"tags":140,"homepage":146,"download_link":147,"security_score":35,"vuln_count":36,"unpatched_count":36,"last_vuln_date":37,"fetched_at":38},"syntax-highlighting-code-block","Syntax-highlighting Code Block (with Server-side Rendering)","1.5.1","\u003Cp>This plugin extends the Code block in WordPress core to add syntax highlighting which is rendered on the server. Pre-existing Code blocks on a site are automatically extended to include syntax highlighting. Doing server-side syntax highlighting eliminates the need to enqueue any JavaScript on the frontend (e.g. Highlight.js or Prism.js) and this ensures there is no flash of unhighlighted code (FOUC?). Reducing script on the frontend improves frontend performance, and it also allows for the syntax highlighted code to appear properly in AMP pages as rendered by the \u003Ca href=\"https:\u002F\u002Famp-wp.org\" rel=\"nofollow ugc\">official AMP plugin\u003C\u002Fa> (see also \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fampproject\u002Famp-wp\u002Fissues\u002F972\" rel=\"nofollow ugc\">ampproject\u002Famp-wp#972\u003C\u002Fa>) or when JavaScript is turned off in the browser.\u003C\u002Fp>\n\u003Cp>This extended Code block uses language auto-detection to add syntax highlighting, but you can override the language in the block’s settings sidebar. (There is currently no syntax highlighting of the Code block in the editor, but see \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fwestonruter\u002Fsyntax-highlighting-code-block\u002Fissues\u002F8\" rel=\"nofollow ugc\">#8\u003C\u002Fa>.) The plugin supports all \u003Ca href=\"https:\u002F\u002Fhighlightjs.org\u002Fstatic\u002Fdemo\u002F\" rel=\"nofollow ugc\">programming languages\u003C\u002Fa> that \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fscrivo\u002Fhighlight.php\" rel=\"nofollow ugc\">highlight.php\u003C\u002Fa> supports (being a port of \u003Ca href=\"https:\u002F\u002Fhighlightjs.org\u002F\" rel=\"nofollow ugc\">highlight.js\u003C\u002Fa>). The Code block also is extended to support specifying lines to highlight which get marked up with \u003Ccode>mark\u003C\u002Fcode> elements (including in RSS feeds). There is also a checkbox for whether to show line numbers on the frontend (with the numbers being non-selectable). Lastly, given inconsistencies across themes regarding whether lines in a Code block should be wrapped, this plugin adds styling to force them to no-wrap by default, with a checkbox to opt in to wrapping when desired.\u003C\u002Fp>\n\u003Cp>For advanced usage, please see the \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fwestonruter\u002Fsyntax-highlighting-code-block\u002Fwiki\" rel=\"nofollow ugc\">plugin wiki\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>This plugin is \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fwestonruter\u002Fsyntax-highlighting-code-block\" rel=\"nofollow ugc\">developed on GitHub\u003C\u002Fa>. See \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fwestonruter\u002Fsyntax-highlighting-code-block\u002Fissues\" rel=\"nofollow ugc\">list of current issues\u003C\u002Fa> with the plugin. Please feel free to file any additional issues or requests that you may come across. \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fwestonruter\u002Fsyntax-highlighting-code-block\u002Fpulls\" rel=\"nofollow ugc\">Pull requests\u003C\u002Fa> are welcome. See \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fwestonruter\u002Fsyntax-highlighting-code-block\u002Fwiki\u002FContributing\" rel=\"nofollow ugc\">contributing information\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch4>Credits\u003C\u002Fh4>\n\u003Cp>This is a fork of \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fmkaz\u002Fcode-syntax-block\" rel=\"nofollow ugc\">Code Syntax Block\u003C\u002Fa> by \u003Ca href=\"https:\u002F\u002Fmkaz.blog\u002F\" rel=\"nofollow ugc\">Marcus Kazmierczak\u003C\u002Fa> (mkaz), which is also \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fcode-syntax-block\u002F\" rel=\"ugc\">available on WordPress.org\u003C\u002Fa>. Copyright (c) 2018 Marcus Kazmierczak. Licensed under GPL 2.0 or later.\u003C\u002Fp>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fscrivo\u002Fhighlight.php\" rel=\"nofollow ugc\">highlight.php\u003C\u002Fa> is released under the BSD 3-Clause License. Copyright © 2006-2013, Ivan Sagalaev (maniac@softwaremaniacs.org), highlight.js (original author). Copyright © 2013, Geert Bergman (geert@scrivo.nl), highlight.php\u003C\u002Fp>\n","Extending the Code block with syntax highlighting rendered on the server, thus being AMP-compatible and having faster frontend performance.",39598,26,"2025-11-30T05:50:00.000Z",[141,142,143,144,145],"block","code","code-highlighting","code-syntax","syntax-highlight","https:\u002F\u002Fgithub.com\u002Fwestonruter\u002Fsyntax-highlighting-code-block","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fsyntax-highlighting-code-block.1.5.1.zip",{"slug":149,"name":150,"version":151,"author":5,"author_profile":6,"description":152,"short_description":153,"active_installs":154,"downloaded":155,"rating":35,"num_ratings":156,"last_updated":157,"tested_up_to":158,"requires_at_least":159,"requires_php":160,"tags":161,"homepage":163,"download_link":164,"security_score":117,"vuln_count":36,"unpatched_count":36,"last_vuln_date":37,"fetched_at":38},"customize-snapshots","Customize Snapshots","0.7.0","\u003Cp>Customize Snapshots is the feature plugin which prototyped \u003Ca href=\"https:\u002F\u002Fmake.wordpress.org\u002Fcore\u002F2016\u002F10\u002F12\u002Fcustomize-changesets-technical-design-decisions\u002F\" rel=\"nofollow ugc\">Customizer changesets\u003C\u002Fa>; this feature was \u003Ca href=\"https:\u002F\u002Fmake.wordpress.org\u002Fcore\u002F2016\u002F10\u002F12\u002Fcustomize-changesets-formerly-transactions-merge-proposal\u002F\" rel=\"nofollow ugc\">merged\u003C\u002Fa> as part of WordPress 4.7. The term “snapshots” was chosen because the Customizer feature revolved around saving the state (taking a snapshot) of the Customizer at a given time so that the changes could be saved as a draft and scheduled for future publishing.\u003C\u002Fp>\n\u003Cp>While the plugin’s technical infrastructure for changesets was merged in WordPress 4.7, the user interface still remains largely in the Customize Snapshots plugin, in which we will continue to iterate and prototype features to merge into core.\u003C\u002Fp>\n\u003Cp>For a rundown of all the features, see the screenshots below as well as the 0.6 release video:\u003C\u002Fp>\n\u003Cspan class=\"embed-youtube\" style=\"text-align:center; display: block;\">\u003Ciframe loading=\"lazy\" class=\"youtube-player\" width=\"750\" height=\"422\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002FGH0xo7bTiSs?version=3&rel=1&showsearch=0&showinfo=1&iv_load_policy=1&fs=1&hl=en-US&autohide=2&wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\">\u003C\u002Fiframe>\u003C\u002Fspan>\n\u003Cp>This plugin works particularly well with \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fcustomizer-browser-history\u002F\" rel=\"ugc\">Customizer Browser History\u003C\u002Fa>, which ensures that URL in the browser corresponds to the current panel\u002Fsection\u002Fcontrol that is expanded, as well as the current URL and device being previewed.\u003C\u002Fp>\n\u003Cp>Requires PHP 5.3+. \u003Cstrong>Development of this plugin is done \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fxwp\u002Fwp-customize-snapshots\" rel=\"nofollow ugc\">on GitHub\u003C\u002Fa>. Pull requests welcome. Please see \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fxwp\u002Fwp-customize-snapshots\" rel=\"nofollow ugc\">issues\u003C\u002Fa> reported there before going to the \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fsupport\u002Fplugin\u002Fcustomize-snapshots\" rel=\"ugc\">plugin forum\u003C\u002Fa>.\u003C\u002Fstrong>\u003C\u002Fp>\n","Provide a UI for managing Customizer changesets; save changesets as named drafts, schedule for publishing; inspect in admin and preview on frontend.",500,29542,3,"2017-11-16T06:32:00.000Z","4.9.29","4.7","5.3",[162,110,111],"changesets","https:\u002F\u002Fgithub.com\u002Fxwp\u002Fwp-customize-snapshots","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fcustomize-snapshots.0.7.0.zip",{"slug":166,"name":167,"version":168,"author":5,"author_profile":6,"description":169,"short_description":170,"active_installs":35,"downloaded":171,"rating":104,"num_ratings":172,"last_updated":173,"tested_up_to":158,"requires_at_least":159,"requires_php":174,"tags":175,"homepage":181,"download_link":182,"security_score":117,"vuln_count":36,"unpatched_count":36,"last_vuln_date":37,"fetched_at":38},"spoken-word","Spoken Word","1.0.1","\u003Cp>Add text-to-speech (TTS) to content, with playback controls, read-along highlighting, multi-lingual support, and settings for rate, pitch, and voice.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Uses local text-to-speech engine in user’s browser. Directly interfaces with the \u003Ccode>speechSynthesis\u003C\u002Fcode> browser API. Zero external requests or dependencies.\u003C\u002Fli>\n\u003Cli>Words are selected\u002Fhighlighted as they are being spoken to allow you to read along.\u003C\u002Fli>\n\u003Cli>Skips speaking elements that should not be read, including footnote superscripts (the \u003Ccode>sup\u003C\u002Fcode> element).\u003C\u002Fli>\n\u003Cli>Pauses of different length added are between headings versus paragraphs.\u003C\u002Fli>\n\u003Cli>Controls remain in view during playback, with each the current text being spoken persistently being scrolled into view. (Requires browser support for \u003Ccode>position:sticky\u003C\u002Fcode>.)\u003C\u002Fli>\n\u003Cli>Back\u002Fforward controls allow you to skip to the next paragraph; when not speaking, the next paragraph to read will be selected entirely.\u003C\u002Fli>\n\u003Cli>Select text to read from that point; click on text during speech to immediately change position.\u003C\u002Fli>\n\u003Cli>Multi-lingual support, allowing embedded text with \u003Ccode>[lang]\u003C\u002Fcode> attribute to be spoken by the appropriate voice (assuming the user has it installed).\u003C\u002Fli>\n\u003Cli>Settings for changing the default voice (for each language), along with settings for the rate of speech and its pitch. (Not supported by all engines.) Changes can be made while speaking.\u003C\u002Fli>\n\u003Cli>Hit escape to pause during playback.\u003C\u002Fli>\n\u003Cli>Voice preferences are persistently stored in \u003Ccode>localStorage\u003C\u002Fcode>, with changes synced across windows (of a given site).\u003C\u002Fli>\n\u003Cli>Ability to use JS in standalone manner (such as in bookmarklet).\u003C\u002Fli>\n\u003Cli>Known to work in the latest desktop versions of Chrome, Firefox, and Safari. (Tested on OSX.) It does not work reliably in mobile\u002Ftouch browsers on Android or iOS, apparently due both to the (still experimental) \u003Ccode>speechSynthesis\u003C\u002Fcode> API not being implemented well enough on those systems and\u002For programmatic range selection does not work the same way as on desktop. For these reasons, the functionality is disabled by default on mobile operating systems.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fwestonruter.github.io\u002Fspoken-word\u002Ftest\u002Fexample.html\" rel=\"nofollow ugc\">Try it out\u003C\u002Fa> on standalone example with some test content.\u003C\u002Fp>\n\u003Ch4>Theme Config\u003C\u002Fh4>\n\u003Cp>The settings for Spoken Word are presented in an HTML5 \u003Ccode>dialog\u003C\u002Fcode> element. For browsers that do not yet support this feature, the plugin bundles the \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FGoogleChrome\u002Fdialog-polyfill\" rel=\"nofollow ugc\">dialog-polyfill\u003C\u002Fa>. The polyfill is only included if it is detected the browser does not support \u003Ccode>dialog\u003C\u002Fcode> natively. The inclusion of the polyfill can be disabled by adding the following to your theme or plugin:\u003C\u002Fp>\n\u003Cpre>\nadd_filter( 'spoken_word_include_dialog_polyfill', '__return_false' );\n\u003C\u002Fpre>\n\u003Cp>For themes that have a sticky header (such as the nav menu in Twenty Seventeen) you may need to add some additional CSS to ensure that the sticky-positioned playback controls do not get hidden behind the sticky header. For example in Twenty Seventeen, you can add the following to the Custom CSS in the Customizer:\u003C\u002Fp>\n\u003Cpre>\n@media screen and (min-width: 782px) {\n    body:not(.admin-bar) .spoken-word--active {\n        top: calc( 0.5em + 70px );\n    }\n    body.admin-bar .spoken-word--active {\n        top: calc( 0.5em + 32px + 70px );\n    }\n}\n\u003C\u002Fpre>\n\u003Ch4>Internals\u003C\u002Fh4>\n\u003Cp>A bookmarklet can be used to load the Spoken Word functionality into any site, even non-WordPress sites where the plugin is not installed. The key is to use the appropriate \u003Ccode>contentSelector\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Cpre>\n( () => {\n    const link = document.createElement( 'link' );\n    link.rel = 'stylesheet';\n    link.href = 'https:\u002F\u002Funpkg.com\u002Fspoken-word\u002Fcss\u002Fstyle.css';\n    document.head.appendChild( link );\n\n    const script = document.createElement( 'script' );\n    script.src = 'https:\u002F\u002Funpkg.com\u002Fspoken-word\u002Fdist\u002Fspoken-word.js';\n    script.addEventListener( 'load', () => {\n        spokenWord.initialize( {\n            contentSelector: [ \u002F* 👈 Amend as desired. *\u002F\n                '.hentry',\n                '.entry-content',\n                '.h-entry',\n                '.e-content',\n                '[itemprop=\"articleBody\"]',\n            ].join( ', ' )\n        } );\n    } );\n    document.head.appendChild( script );\n} )();\n\u003C\u002Fpre>\n\u003Cp>The \u003Ccode>spokenWord.initialize()\u003C\u002Fcode> function takes an object as its argument which can have the following properties:\u003C\u002Fp>\n\u003Cpre>\n * @param {string}  contentSelector         - CSS Selector to find the elements for speaking.\n * @param {Element} rootElement             - Root element within which to look for content.\n * @param {Object}  chunkifyOptions         - Options passed into chunkify.\n * @param {boolean} useDashicons            - Whether to use Dashicons.\n * @param {Object}  defaultUtteranceOptions - Default utterance options when none are supplied from localStorage.\n\u003C\u002Fpre>\n\u003Cp>The dialog and the controls are rendered using \u003Ca href=\"https:\u002F\u002Fpreactjs.com\u002F\" rel=\"nofollow ugc\">Preact\u003C\u002Fa>. For a list of all the modules used by this plugin, see the \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fwestonruter\u002Fspoken-word\u002Fblob\u002Fmaster\u002Fpackage.json\" rel=\"nofollow ugc\">package.json\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>This plugin is \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fwestonruter\u002Fspoken-word\" rel=\"nofollow ugc\">developed on GitHub\u003C\u002Fa> where the source can be viewed. Please \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fwestonruter\u002Fspoken-word\u002Fissues\" rel=\"nofollow ugc\">report issues\u003C\u002Fa> there. Pull requests welcome. The \u003Ccode>spoken-word\u003C\u002Fcode> package is also \u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fspoken-word\" rel=\"nofollow ugc\">published on npm\u003C\u002Fa>.\u003C\u002Fp>\n","Add text-to-speech (TTS) to content, with playback controls, read-along highlighting, multi-lingual support, and settings for rate, pitch, and voice.",6111,7,"2018-01-21T22:22:00.000Z","5.4",[176,177,178,179,180],"audio","speech-synthesis","text-to-speech","tts","voice","https:\u002F\u002Fgithub.com\u002Fwestonruter\u002Fspoken-word","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fspoken-word.1.0.1.zip",{"slug":184,"name":185,"version":186,"author":5,"author_profile":6,"description":187,"short_description":188,"active_installs":189,"downloaded":190,"rating":36,"num_ratings":36,"last_updated":191,"tested_up_to":192,"requires_at_least":193,"requires_php":86,"tags":194,"homepage":200,"download_link":201,"security_score":117,"vuln_count":36,"unpatched_count":36,"last_vuln_date":37,"fetched_at":38},"override-post-title-with-first-content-heading","Override Post Title with First Content Heading","0.2.5","\u003Cp>\u003Cem>This plugin is developed at\u003Cbr \u002F>\n\u003Ca href=\"http:\u002F\u002Fwww.shepherd-interactive.com\u002F\" title=\"Shepherd Interactive\nspecializes in web design and development in Portland, Oregon\">Shepherd\u003Cbr \u002F>\nInteractive\u003C\u002Fa> for the benefit of the community. No support is available.\u003Cbr \u002F>\nPlease post any questions to the \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Ftags\u002Foverride-post-title-with-first-content-heading?forum_id=10\" rel=\"ugc\">support\u003Cbr \u002F>\nforum\u003C\u002Fa>.\u003C\u002Fem>\u003C\u002Fp>\n\u003Cp>On a singular post\u002Fpage, normally in The Loop \u003Ccode>the_title()\u003C\u002Fcode> returns\u003Cbr \u002F>\n    post_title; if, however, this needs to be overridden so that a\u003Cbr \u002F>\ncustom content heading is displayed (i.e. for SEO purposes), then an\u003Cbr \u002F>\n    h1 or \u003Ccode>h2\u003C\u002Fcode> element may be supplied at the beginning of\u003Cbr \u002F>\nthe \u003Ccode>post_content\u003C\u002Fcode> and the contents of this heading element\u003Cbr \u002F>\nwill be returned by \u003Ccode>the_title()\u003C\u002Fcode> instead of \u003Ccode>post_title\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>From a technical perspective, the site title in the main header should be\u003Cbr \u002F>\nan \u003Ccode>h1\u003C\u002Fcode> element and the page\u002Fpost title should in an \u003Ccode>h2\u003C\u002Fcode>\u003Cbr \u002F>\nelement within an \u003Ccode>article\u003C\u002Fcode>, \u003Ca href=\"http:\u002F\u002Fwww.whatwg.org\u002Fspecs\u002Fweb-apps\u002Fcurrent-work\u002Fmultipage\u002Fsections.html#headings-and-sections\" rel=\"nofollow ugc\">per HTML5\u003C\u002Fa>:\u003C\u002Fp>\n\u003Cblockquote>\u003Cp>Sections may contain headings of any rank, but authors are strongly\u003Cbr \u002F>\nencouraged to either use only `h1` elements, or to use elements of the\u003Cbr \u002F>\nappropriate rank for the section’s nesting level.\u003C\u002Fp>\u003C\u002Fblockquote>\n\u003Cp>This is seen in the default WordPress theme and the HTML specifications. However,\u003Cbr \u002F>\nSEO places higher priority on the contents of an \u003Ccode>h1\u003C\u002Fcode> element, so if\u003Cbr \u002F>\nevery page of a site has the exact same \u003Ccode>h1\u003C\u002Fcode> contents (the site name),\u003Cbr \u002F>\nthen search engines may not be as likely to rank the page based on the unique\u003Cbr \u002F>\ncontents of the \u003Ccode>h2\u003C\u002Fcode>. It has been \u003Ca href=\"http:\u002F\u002Fblogsessive.com\u002Fblogging-tips\u002Fblog-seo-tips-titles\u002F\" rel=\"nofollow ugc\">suggested\u003C\u002Fa>\u003Cbr \u002F>\ntherefore that the \u003Ccode>h1\u003C\u002Fcode> and the \u003Ccode>h2\u003C\u002Fcode> elements be swapped,\u003Cbr \u002F>\nso that the site title appears in an \u003Ccode>h2\u003C\u002Fcode> and so that the unique page\u003Cbr \u002F>\ntitle appears in the \u003Ccode>h1\u003C\u002Fcode>. While the specifications don’t prefer this\u003Cbr \u002F>\narrangement, it is not incorrect, also per HTML5:\u003C\u002Fp>\n\u003Cblockquote>\u003Cp>Both of the documents are semantically identical and would produce the same\u003Cbr \u002F>\noutline in compliant user agents.\u003C\u002Fp>\u003C\u002Fblockquote>\n\u003Cp>So if different heading levels are semantically equivalent, and if search\u003Cbr \u002F>\nengines really place that much importance on \u003Ccode>h1\u003C\u002Fcode>, then SEO wins.\u003C\u002Fp>\n\u003Cp>In both cases, content section headings should be coded with \u003Ccode>h3\u003C\u002Fcode> and\u003Cbr \u002F>\nbelow.\u003C\u002Fp>\n\u003Cp>\u003Cem>Technical note:\u003C\u002Fem> If the \u003Ccode>$post\u003C\u002Fcode> object is not passed into \u003Ccode>the_title\u003C\u002Fcode>\u003Cbr \u002F>\nfilter, then the page’s \u003Ccode>the_title()\u003C\u002Fcode> must be called before every other\u003Cbr \u002F>\n    the_title() call \u003Ccode>in_the_loop()\u003C\u002Fcode>\u003C\u002Fp>\n","On a singular post\u002Fpage, returns the contents of the first content H1 or H2 instead of the post_title as normally. Facilitates SEO.",80,4410,"2009-12-21T19:59:00.000Z","2.9.2","2.7",[195,196,197,198,199],"h1","h2","heading","seo","title","http:\u002F\u002Fwordpress.org\u002Fextend\u002Fplugins\u002Foverride-post-title-with-first-content-heading\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Foverride-post-title-with-first-content-heading.zip",{"slug":203,"name":204,"version":205,"author":5,"author_profile":6,"description":206,"short_description":207,"active_installs":208,"downloaded":209,"rating":36,"num_ratings":36,"last_updated":210,"tested_up_to":158,"requires_at_least":159,"requires_php":160,"tags":211,"homepage":86,"download_link":215,"security_score":117,"vuln_count":36,"unpatched_count":36,"last_vuln_date":37,"fetched_at":38},"customizer-responsive-device-preview","Customizer Responsive Server-Side Components Device Preview","0.1.1","\u003Cp>Read full writeup: \u003Ca href=\"https:\u002F\u002Fmake.xwp.co\u002F2016\u002F10\u002F29\u002Fpreviewing-themes-with-adaptive-designs-in-the-customizer\u002F\" rel=\"nofollow ugc\">Previewing Themes with Adaptive Designs in the Customizer\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>This plugin extends the responsive device preview functionality in the customizer which was added in 4.5 (see \u003Ca href=\"https:\u002F\u002Fcore.trac.wordpress.org\u002Fticket\u002F31195\" rel=\"nofollow ugc\">#31195\u003C\u002Fa>). In core when you change the previewed device it merely changes the dimensions of the preview, allowing you to simulate how the theme will appear on tablet or mobile screens. What it does not do, however, is cause the preview to reload with the \u003Ccode>User-Agent\u003C\u002Fcode> overridden for the current device being previewed. For themes that implement a responsive design this core behavior is just fine since changing the dimensions of the iframe will cause the appropriate media queries to apply. However, if you have an adaptive design for your theme you won’t be able to see any server-side components that it may display when viewing a different device. For example, on mobile devices a theme may want to skip outputting the sidebar altogether to save on bandwidth.\u003C\u002Fp>\n\u003Cp>This plugin will ensure that the preview is refreshed when the previewed device is changed in addition to changing the preview window size. It will pass a \u003Ccode>customize_previewed_device\u003C\u002Fcode> query parameter on the URL being previewed, and this parameter will be either \u003Ccode>desktop\u003C\u002Fcode>, \u003Ccode>tablet\u003C\u002Fcode>, or \u003Ccode>mobile\u003C\u002Fcode>. The plugin will override the \u003Ccode>$_SERVER['HTTP_USER_AGENT']\u003C\u002Fcode> to be a user agent representative of the supplied device type so that calls to \u003Ccode>wp_is_mobile()\u003C\u002Fcode>, \u003Ccode>jetpack_is_mobile()\u003C\u002Fcode>, and \u003Ccode>Jetpack_User_Agent_Info::is_tablet()\u003C\u002Fcode> will all return the expected values based on the current previewed device.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Development of this plugin is done \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fxwp\u002Fwp-customizer-responsive-device-preview\" rel=\"nofollow ugc\">on GitHub\u003C\u002Fa>. Pull requests welcome. Please see \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fxwp\u002Fwp-customizer-responsive-device-preview\u002Fissues\" rel=\"nofollow ugc\">issues\u003C\u002Fa> reported there before going to the \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fsupport\u002Fplugin\u002Fcustomizer-responsive-device-preview\" rel=\"ugc\">plugin forum\u003C\u002Fa>.\u003C\u002Fstrong>\u003C\u002Fp>\n","Extend device preview in customizer with previewing server-side components, ensuring the previewed device's user agent is set when the site refre &hellip;",70,2427,"2017-11-09T06:47:00.000Z",[212,110,111,213,214],"adaptive","responsive","rwd","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fcustomizer-responsive-device-preview.0.1.1.zip",{"slug":217,"name":218,"version":219,"author":5,"author_profile":6,"description":220,"short_description":221,"active_installs":208,"downloaded":222,"rating":35,"num_ratings":94,"last_updated":223,"tested_up_to":224,"requires_at_least":225,"requires_php":86,"tags":226,"homepage":231,"download_link":232,"security_score":117,"vuln_count":36,"unpatched_count":36,"last_vuln_date":37,"fetched_at":38},"media-placeholders","Media Placeholders","0.9.2","\u003Cp>Activate this plugin to redirect all requests for missing uploaded images on your blog to your favorite placeholder image service, such as \u003Ca href=\"http:\u002F\u002Fplacehold.it\" rel=\"nofollow ugc\">placehold.it\u003C\u002Fa> or \u003Ca href=\"http:\u002F\u002Fplacekitten.com\u002F\" rel=\"nofollow ugc\">placekitten.com\u003C\u002Fa>. Note that although kittens are cute, the placehold.it service is actually more useful because the background and foreground color can remain consistant across all image sizes (e.g. full size vs thumbnail in a gallery), and so it is easier to see which images in a page are related to each other. (You can change the default placehold.it service to placekitten.com by defining \u003Ccode>MISSING_UPLOADED_IMAGE_PLACEHOLDER_BUILTIN\u003C\u002Fcode> to be \u003Ccode>placekitten_color\u003C\u002Fcode> or \u003Ccode>placekitten_grayscale\u003C\u002Fcode>, or supplying those same values via the \u003Ccode>missing_uploaded_image_placeholder_builtin\u003C\u002Fcode> filter).\u003C\u002Fp>\n\u003Cp>\u003Cstrong>This plugin is for use during development only.\u003C\u002Fstrong> It is expected that this plugin will be activated on your local development environment (e.g. on Vagrant or XAMPP), or on your staging server. This plugin is especially useful when working on a team where you share around a database dump but not the uploaded images (which should always be omitted from the code repository), so if you give a database dump to another developer but don’t include the uploaded images, with this plugin enabled they will see a placeholder where the uploaded image appears. This plugin is an alternative approach to what is offered by the \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fuploads-by-proxy\u002F\" rel=\"ugc\">Uploads by Proxy\u003C\u002Fa> plugin.\u003C\u002Fp>\n\u003Cp>If you have applied the production database to another environment which lacks the uploaded files, but you know that all images referenced in the database do exist on production, you can define the \u003Ccode>MISSING_UPLOADED_IMAGE_REDIRECT_SERVER\u003C\u002Fcode> constant or filter \u003Ccode>missing_uploaded_image_redirect_server\u003C\u002Fcode> to short-circuit the placeholder service and redirect the image request to that server.\u003C\u002Fp>\n\u003Cp>This plugin will not work if you are on a multisite network that uses the old system for referring to uploaded files, where the URL includes \u003Ccode>\u002Ffiles\u002F\u003C\u002Fcode> which is intercepted by a rewrite rule and passed directly to \u003Ccode>ms-files.php\u003C\u002Fcode>. See \u003Ca href=\"https:\u002F\u002Fcore.trac.wordpress.org\u002Fticket\u002F19235\" title=\"Turn ms-files.php off by default\" rel=\"nofollow ugc\">#19235\u003C\u002Fa>. Similarly, make sure that missing uploaded files get served by the WordPress 404 handler, not Apache\u002FNginx. If you are using Nginx with the default Varying Vagrant Vagrants config, you’ll want to remove \u003Ccode>png|jpg|jpeg|gif\u003C\u002Fcode> from the following location rule in \u003Ccode>nginx-wp-common.conf\u003C\u002Fcode> (or remove it altogether):\u003C\u002Fp>\n\u003Cpre>\u003Ccode># Handle all static assets by serving the file directly. Add directives \n# to send expires headers and turn off 404 error logging.\nlocation ~* \\.(js|css|png|jpg|jpeg|gif|ico)$ {\n    expires 24h;\n    log_not_found off;\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>You can add support for your own favorite placeholder services by filtering \u003Ccode>missing_uploaded_image_placeholder\u003C\u002Fcode>.\u003Cbr \u002F>\nFor example, you can add this to your \u003Ccode>functions.php\u003C\u002Fcode> or drop it into a \u003Ccode>mu-plugin\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\u003C?php\n\u002F**\n * Use Flickholdr as placeholder service\n * @param null|string $url\n * @param array $args  {attached_file, width, height, attachment_id}\n *\u002F\nfunction my_filter_missing_uploaded_image_placeholder( $url, $args ) {\n    $attachment = get_post( $args['attachment_id'] );\n    $tags = join( ' ', array(\n        $attachment->post_title,\n        $attachment->post_excerpt,\n        $attachment->post_content,\n        $attachment->_wp_attachment_image_alt\n    ) );\n    $tags = strtolower( preg_replace( '#[^A-Za-z0-9]+#', ',', $tags ) );\n    $tags = trim( $tags, ',' );\n    $url = sprintf( 'http:\u002F\u002Fflickholdr.com\u002F%d\u002F%d\u002F%s', $args['width'], $args['height'], $tags );\n    return $url;\n}\nadd_filter( 'missing_uploaded_image_placeholder', 'my_filter_missing_uploaded_image_placeholder', 10, 2 );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Development of this plugin is done \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fx-team\u002Fwp-media-placeholders\" rel=\"nofollow ugc\">on GitHub\u003C\u002Fa>. Pull requests welcome. Please see \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fx-team\u002Fwp-media-placeholders\u002Fissues\" rel=\"nofollow ugc\">issues\u003C\u002Fa> reported there before going to the plugin forum.\u003C\u002Fstrong>\u003C\u002Fp>\n","Redirect requests to non-existent uploaded images to a placeholder service like placehold.it or placekitten.com. For use during development.",3303,"2015-02-25T01:45:00.000Z","3.6.1","3.5",[227,228,88,229,230],"404","development","placeholders","uploads","http:\u002F\u002Fgithub.com\u002Fx-team\u002Fwp-missing-upload-placeholders","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fmedia-placeholders.zip",{"slug":234,"name":235,"version":236,"author":5,"author_profile":6,"description":237,"short_description":238,"active_installs":239,"downloaded":240,"rating":36,"num_ratings":36,"last_updated":241,"tested_up_to":107,"requires_at_least":108,"requires_php":160,"tags":242,"homepage":245,"download_link":246,"security_score":117,"vuln_count":36,"unpatched_count":36,"last_vuln_date":37,"fetched_at":38},"customize-object-selector","Customize Object Selector","0.4.2","\u003Cp>This plugin adds a Customizer control to select one or multiple posts (and eventually terms and users).\u003C\u002Fp>\n\u003Cp>Core has long had a \u003Ccode>dropdown-pages\u003C\u002Fcode> control type which is used in the static front page section for the “page on front” and “page for posts” controls. There is a problem with this control however: it outputs the entire tree of pages for every registered instance of the control. For sites that have a lot of pages, this can introduce a performance problem to generate this full list, not only once, but twice for the two controls. This plugin upgrades the “page on front” and “page for posts” controls to instead make use of the Customize Object Selector control, not only allowing for the list of pages to be loaded via Ajax on demand but also for the list to be \u003Cem>searched\u003C\u002Fem>.\u003C\u002Fp>\n\u003Cp>When the \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fxwp\u002Fwp-customize-posts\" rel=\"nofollow ugc\">Customize Posts\u003C\u002Fa> plugin is active, buttons will appear after the Select2 control to be able to create new posts to add to the selection. The Customize Object Selector will also power the post parent control. See \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fxwp\u002Fwp-customize-posts\u002Fpull\u002F233\" rel=\"nofollow ugc\">wp-customize-posts#233\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>This plugin also includes a reusable JavaScript component available at \u003Ccode>wp.customize.ObjectSelectorComponent\u003C\u002Fcode> which can be used in widgets or other locations.\u003C\u002Fp>\n\u003Cp>For an example integration with widgets, see the \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fxwp\u002Fwp-js-widgets\u002Fpull\u002F10\" rel=\"nofollow ugc\">Post Collection widget\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>For an example integration with the Customize Posts plugin, see pending usage as the \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fxwp\u002Fwp-customize-posts\u002Fpull\u002F189#issuecomment-241216247\" rel=\"nofollow ugc\">Post Parent control\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Development of this plugin is done \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fxwp\u002Fwp-customize-object-selector\" rel=\"nofollow ugc\">on GitHub\u003C\u002Fa>. Pull requests welcome. Please see \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fxwp\u002Fwp-customize-object-selector\u002Fissues\" rel=\"nofollow ugc\">issues\u003C\u002Fa> reported there before going to the \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fsupport\u002Fplugin\u002Fcustomize-object-selector\" rel=\"ugc\">plugin forum\u003C\u002Fa>.\u003C\u002Fstrong>\u003C\u002Fp>\n","Adds a Customizer control to select one or multiple posts (and eventually terms and users).",40,7588,"2017-11-09T06:37:00.000Z",[110,111,243,114,244],"pages","select2","https:\u002F\u002Fgithub.com\u002Fxwp\u002Fwp-customize-object-selector","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fcustomize-object-selector.0.4.2.zip",{"slug":248,"name":249,"version":250,"author":5,"author_profile":6,"description":251,"short_description":252,"active_installs":253,"downloaded":254,"rating":35,"num_ratings":94,"last_updated":255,"tested_up_to":158,"requires_at_least":108,"requires_php":86,"tags":256,"homepage":86,"download_link":259,"security_score":260,"vuln_count":36,"unpatched_count":36,"last_vuln_date":37,"fetched_at":38},"customize-inline-editing","Customize Inline Editing","0.2.1","\u003Cp>In WordPress 4.5 the \u003Ca href=\"https:\u002F\u002Fmake.wordpress.org\u002Fcore\u002F2016\u002F02\u002F16\u002Fselective-refresh-in-the-customizer\u002F\" rel=\"nofollow ugc\">selective refresh\u003C\u002Fa> framework was introduced in core. One of the key concepts in this framework is the “partial”, the region in a document which is selectively refreshed when a related setting is modified. This means that one or more settings are linked with a given element in the preview. When selective refresh was first was introduced it supported the ability for a user to “shift click” on a partial to jump to and focus on the related control in the pane. In WordPress 4.7 this was then enhanced with \u003Ca href=\"https:\u002F\u002Fmake.wordpress.org\u002Fcore\u002F2016\u002F11\u002F10\u002Fvisible-edit-shortcuts-in-the-customizer-preview\u002F\" rel=\"nofollow ugc\">visible edit shortcuts\u003C\u002Fa> so that users could click (touch even) on the icon to be able to reveal the control in the pane.\u003C\u002Fp>\n\u003Cp>The Customize Inline Editing plugin builds on edit shortcuts by allowing the setting to be modified inline via direct manipulation in the preview without having focus removed and placed on the controls pane. This is particularly useful on \u003Cem>mobile devices\u003C\u002Fem> on small screens where a user cannot both see the controls and preview at the same time, as can be compared here:\u003C\u002Fp>\n\u003Cspan class=\"embed-youtube\" style=\"text-align:center; display: block;\">\u003Ciframe loading=\"lazy\" class=\"youtube-player\" width=\"750\" height=\"422\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002Fw7WfSEtT8pc?version=3&rel=1&showsearch=0&showinfo=1&iv_load_policy=1&fs=1&hl=en-US&autohide=2&wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\">\u003C\u002Fiframe>\u003C\u002Fspan>\n\u003Cp>Inline editing in this way is also helpful for \u003Cem>accessibility\u003C\u002Fem> since keyboard focus remains in the preview at the element being edited, as can be seen in this demonstration of inline editing on a desktop browser:\u003C\u002Fp>\n\u003Cspan class=\"embed-youtube\" style=\"text-align:center; display: block;\">\u003Ciframe loading=\"lazy\" class=\"youtube-player\" width=\"750\" height=\"422\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002FKesM3vo5WyE?version=3&rel=1&showsearch=0&showinfo=1&iv_load_policy=1&fs=1&hl=en-US&autohide=2&wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\">\u003C\u002Fiframe>\u003C\u002Fspan>\n\u003Cp>This plugin provides one example implementation of inline editing this can be accomplished in the customizer. Version 0.1 of this plugin from 2014 was a precursor in some ways to selective refresh, specifically in regards to how CSS selectors are associated with customizer settings.\u003C\u002Fp>\n\u003Cp>Themes can opt-in to support this plugin’s inline editing within the customizer by assigning the appropriate type to the registered partials:\u003C\u002Fp>\n\u003Cpre>\nadd_action( 'customize_register', function( $wp_customize ) {\n    $opt_in_partials = array_filter( array(\n        $wp_customize->selective_refresh->get_partial( 'blogname' ),\n        $wp_customize->selective_refresh->get_partial( 'blogdescription' )\n    ) );\n    foreach ( $opt_in_partials as $partial ) {\n        $partial->type = 'inline_editable';\n    }\n}, 100 );\n\u003C\u002Fpre>\n\u003Cp>Click on the edit shortcut to begin editing the element, with keyboard focus then given to the editable element. If the value has a server-side rendered value (e.g. where PHP filters like \u003Ccode>wptexturize\u003C\u002Fcode> apply to improve typography), the raw value will be supplied when editing starts. Editing can be completed by clicking out of the editable element, tabbing out of the element (blurring it), or clicking the edit icon which then appears as a “done” checkmark icon. You may also shift-click on an element to edit it.\u003C\u002Fp>\n\u003Cp>Currently only basic text fields can currently be edited; styling and any tags added to \u003Ccode>contentEditable\u003C\u002Fcode> areas will be stripped out. Eventually rich text formatting may be allowed, specifically for integrations with the Text widget (via \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fxwp\u002Fwp-js-widgets\" rel=\"nofollow ugc\">JS Widgets\u003C\u002Fa>) or post content (via \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fxwp\u002Fwp-customize-posts\" rel=\"nofollow ugc\">Customize Posts\u003C\u002Fa>).\u003C\u002Fp>\n\u003Cp>The \u003Ca href=\"https:\u002F\u002Fmake.wordpress.org\u002Fcore\u002F2016\u002F02\u002F16\u002Fselective-refresh-in-the-customizer\u002F\" rel=\"nofollow ugc\">selective refresh\u003C\u002Fa> writeup from 4.5 concludes with a section on a possible future for it and inline editing:\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>If we can eliminate full-page refreshes from being the norm for the Customizer, we can start to introduce controls inline with the preview. If the entire preview does not reload, then the inline controls won’t get destroyed by the refresh with each change. For example, consider a widget control floating immediately next to the widget in the sidebar it is editing. With selective refresh, it will then also be possible to \u003Cem>eliminate the Customizer altogether\u003C\u002Fem>. The Customizer could be available to anyone who is logged in, with the controls being bootstrapped on demand when a user wants to edit a given element. There would be no need to navigate way from a page on the frontend to enter a unique Customizer state: the Customizer would come to the user. Any controls not relevant to being inline could remain in the Customizer pane, but it could slide in only as needed instead of appearing by default. That is to say, selective refresh makes the Customizer a much better framework for implementing \u003Cstrong>frontend editing\u003C\u002Fstrong>.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>\u003Cstrong>Development of this plugin is done \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fxwp\u002Fwp-customize-inline-editing\" rel=\"nofollow ugc\">on GitHub\u003C\u002Fa>. Pull requests welcome. Please see \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fxwp\u002Fwp-customize-inline-editing\u002Fissues\" rel=\"nofollow ugc\">issues\u003C\u002Fa> reported there before going to the \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fsupport\u002Fplugin\u002Fcustomize-inline-editing\" rel=\"ugc\">plugin forum\u003C\u002Fa>.\u003C\u002Fstrong>\u003C\u002Fp>\n","Demonstration of how inline editing can be implemented in the customizer.",10,4298,"2024-06-22T21:22:00.000Z",[110,111,257,258],"editing","inline","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fcustomize-inline-editing.0.2.1.zip",92,{"slug":262,"name":263,"version":264,"author":5,"author_profile":6,"description":265,"short_description":266,"active_installs":253,"downloaded":267,"rating":36,"num_ratings":36,"last_updated":268,"tested_up_to":86,"requires_at_least":86,"requires_php":86,"tags":269,"homepage":271,"download_link":272,"security_score":117,"vuln_count":36,"unpatched_count":36,"last_vuln_date":37,"fetched_at":38},"customize-widgets-plus","Customize Widgets Plus","0.2","\u003Cp>This plugin consists of lab features and a testbed for improvements to Widgets and the Customizer.\u003C\u002Fp>\n\u003Cp>Requires PHP 5.3+.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Development of this plugin is done \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fxwp\u002Fwp-customize-widgets-plus\" rel=\"nofollow ugc\">on GitHub\u003C\u002Fa>. Pull requests welcome. Please see \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fxwp\u002Fwp-customize-widgets-plus\u002Fissues\" rel=\"nofollow ugc\">issues\u003C\u002Fa> reported there before going to the \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fsupport\u002Fplugin\u002Fcustomize-widgets-plus\" rel=\"ugc\">plugin forum\u003C\u002Fa>.\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>Current features:\u003C\u002Fp>\n\u003Ch4>Non-Autoloaded Widget Options\u003C\u002Fh4>\n\u003Cp>Widgets are stored in options (normally). Multi-widgets store all of their instances in one big serialized array specific to that type. When there are many widgets of a given type, the size of the serialized array can grow very large. What’s more is that \u003Ccode>WP_Widget\u003C\u002Fcode> does not explicitly \u003Ccode>add_option(... 'no' )\u003C\u002Fcode> before calling \u003Ccode>update_option()\u003C\u002Fcode>, and so all of the settings get added with autoloading. This is very bad when using Memcached Object Cache specifically because it can result in the total \u003Ccode>alloptions\u003C\u002Fcode> cache key to become larger than 1MB and result in Memcached failing to store the value in the cache. On WordPress.com the result is a \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FAutomattic\u002Fvip-quickstart\u002Fblob\u002Fmaster\u002Fwww\u002Fwp-content\u002Fmu-plugins\u002Falloptions-limit.php\" rel=\"nofollow ugc\">“Matt’s fault” error\u003C\u002Fa> which has to be fixed by the VIP team. Widget settings should not be stored in serialized arrays to begin with; each widget instance should be stored in a custom post type. But until this is done we should stop autoloading options. See also \u003Ca href=\"https:\u002F\u002Fcore.trac.wordpress.org\u002Fticket\u002F26876\" rel=\"nofollow ugc\">#26876\u003C\u002Fa> and \u003Ca href=\"https:\u002F\u002Fcore.trac.wordpress.org\u002Fticket\u002F23909\" rel=\"nofollow ugc\">#23909\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch4>Widget Number Incrementing\u003C\u002Fh4>\n\u003Cp>Implements fixes for Core issue \u003Ca href=\"https:\u002F\u002Fcore.trac.wordpress.org\u002Fticket\u002F32183\" rel=\"nofollow ugc\">#32183\u003C\u002Fa> (Widget ID auto-increments conflict for concurrent users). The stored widget_number option provides a centralized auto-increment number for whenever a widget is instantiated, even widgets in the Customizer that are not yet saved.\u003C\u002Fp>\n\u003Ch4>Efficient Multidimensional Setting Sanitizing\u003C\u002Fh4>\n\u003Cp>Settings for multidimensional options and theme_mods are extremely inefficient to sanitize in Core because all of the Customizer settings registered for the subsets of the \u003Ccode>option\u003C\u002Fcode> or \u003Ccode>theme_mod\u003C\u002Fcode> need filters that are added to the entire value, meaning sanitizing one single setting will result in all filters for all other settings in that \u003Ccode>option\u003C\u002Fcode>\u002F\u003Ccode>theme_mod\u003C\u002Fcode> will also get applied. This functionality seeks to improve this as much as possible, especially for widgets which are the worst offenders. Implements partial fix for \u003Ca href=\"https:\u002F\u002Fcore.trac.wordpress.org\u002Fticket\u002F32103\" rel=\"nofollow ugc\">#32103\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch4>HTTPS Resource Proxy\u003C\u002Fh4>\n\u003Cp>When \u003Ccode>FORCE_SSL_ADMIN\u003C\u002Fcode> is enabled (such as on WordPress.com), the Customizer will load the site into the preview iframe using HTTPS as well. If, however, external resources are being referenced which are not HTTPS, they will fail to load due to the browser’s security model raise mixed content warnings. This functionality will attempt to rewrite any HTTP URLs to be HTTPS ones via a WordPress-based proxy.\u003C\u002Fp>\n\u003Ch4>Widget Posts\u003C\u002Fh4>\n\u003Cp>Store widget instances in posts instead of options. Requires trunk due to patch committed in \u003Ca href=\"https:\u002F\u002Fcore.trac.wordpress.org\u002Fticket\u002F32474\" rel=\"nofollow ugc\">#32474\u003C\u002Fa>. More details forthcoming…\u003C\u002Fp>\n","Lab features and a testbed for improvements to Widgets and the Customizer.",2801,"2015-06-03T19:25:00.000Z",[110,111,270],"widgets","https:\u002F\u002Fgithub.com\u002Fxwp\u002Fwp-customize-widgets-plus","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fcustomize-widgets-plus.zip",{"slug":274,"name":275,"version":276,"author":5,"author_profile":6,"description":277,"short_description":278,"active_installs":253,"downloaded":279,"rating":35,"num_ratings":94,"last_updated":86,"tested_up_to":158,"requires_at_least":159,"requires_php":86,"tags":280,"homepage":281,"download_link":282,"security_score":35,"vuln_count":36,"unpatched_count":36,"last_vuln_date":37,"fetched_at":283},"customizer-browser-history","Customizer Browser History","0.5.2","\u003Cp>\u003Cem>This is a feature plugin intended to implement \u003Ca href=\"https:\u002F\u002Fcore.trac.wordpress.org\u002Fticket\u002F28536\" rel=\"nofollow ugc\">#28536\u003C\u002Fa>: Add browser history and deep linking for navigation in Customizer preview\u003C\u002Fem>\u003C\u002Fp>\n\u003Cp>This plugin keeps the Customizer URL in the browser updated with current previewed URL as the \u003Ccode>url\u003C\u002Fcode> query param and current expanded panel\u002Fsection\u002Fcontrol as \u003Ccode>autofocus\u003C\u002Fcode> params. This allows for bookmarking and also the ability to reload and return go the same view (which is great for developers), including which device you are previewing (desktop, tablet, or mobile). Not only will the URL be kept in sync with the current customizer UI, but new browser history entries will be added as you navigate around the site in the preview (via \u003Ccode>history.pushState()\u003C\u002Fcode>), allowing you to use the back\u002Fforward buttons as you would normally when browsing the site outside the customizer. The scroll position for each previewed URL is tracked as well, so that when you navigate back\u002Fforward the scroll position will be restored, just as happens when browsing the site outside the customizer preview. Restoring the scroll position also works when reloading the customizer, as the position is persisted in a \u003Ccode>scroll\u003C\u002Fcode> query parameter: again, this is extremely useful during development.\u003C\u002Fp>\n\u003Cp>This plugin complements well the \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fxwp\u002Fwp-customize-snapshots\" rel=\"nofollow ugc\">Customize Snapshots\u003C\u002Fa> plugin which allows you to save your Customizer state in a shapshot\u002Fchangeset with an associated UUID that also gets added to the browser URL in the Customizer.\u003C\u002Fp>\n\u003Cp>For example, if you load the Customizer and then click the “Site Identity” section, the URL will be replaced to add \u003Ccode>autofocus[section]=title_tagline\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>If you navigate into the nav menus panel, open a menu section, and then expand a nav menu item control, then the URL will have these \u003Ccode>autofocus\u003C\u002Fcode> params added:\u003C\u002Fp>\n\u003Cpre>\nautofocus[panel]=nav_menus&autofocus[section]=nav_menu[87]&autofocus[control]=nav_menu_item[5123]\n\u003C\u002Fpre>\n\u003Cp>And while these changes to the \u003Ccode>autofocus\u003C\u002Fcode> params are being made in the browser’s URL as the Customizer UI is interacted with, if you navigate to another page in the preview the \u003Ccode>url\u003C\u002Fcode> parameter will also be replaced to reflect the new preview URL.\u003C\u002Fp>\n\u003Cp>Note that the \u003Ccode>url\u003C\u002Fcode> param will be URL-encoded. So a typical Customizer URL would get updated to look like:\u003C\u002Fp>\n\u003Cpre>\nhttp:\u002F\u002Fexample.com\u002Fwp-admin\u002Fcustomize.php?url=http%3A%2F%2Fexample.com%2Fsample-page%2F&autofocus[panel]=widgets&autofocus[section]=sidebar-widgets-sidebar-1&autofocus[control]=widget_text[10]&device=mobile&scroll=200\n\u003C\u002Fpre>\n\u003Cp>The plugin will also persist the scroll position from the frontend to preview frame in the Customizer after clicking the “Customize” link in the frontend admin bar. This ensures you can quickly start editing whatever you were looking at the moment you clicked Customize, and it makes the Customizer load from the frontend in a more seamless way.\u003C\u002Fp>\n\u003Cp>Additionally, as you navigate around the Customizer preview, the close link in the Customizer controls pane will keep updating to point to the same URL that you are previewing, along with persisting the scroll position. In this way, whenever you close the Customizer via this link the user experience is that the Customizer sidebar is just removed, similar to as if they clicked the “Hide Controls” link at the bottom of the sidebar. This behavior is only active if the user had clicked the Customize link from the frontend. If they clicked Customize from the admin, then the Close link will remain linking back to the admin page they came from. Note that for responsive themes like Twenty Seventeen, the synced scroll position between the frontend and backend won’t always appear seamless since the Customizer controls panel being expanded causes the element dimensions in the preview to change.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Development of this plugin is done \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fxwp\u002Fwp-customizer-browser-history\" rel=\"nofollow ugc\">on GitHub\u003C\u002Fa>. Pull requests welcome. Please see \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fxwp\u002Fwp-customizer-browser-history\u002Fissues\" rel=\"nofollow ugc\">issues\u003C\u002Fa> reported there before going to the \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fsupport\u002Fplugin\u002Fcustomizer-browser-history\" rel=\"ugc\">plugin forum\u003C\u002Fa>.\u003C\u002Fstrong>\u003C\u002Fp>\n","Sync browser URL in Customizer with current preview URL and focused panels, sections, and controls.",3601,[110,111],"https:\u002F\u002Fgithub.com\u002Fxwp\u002Fwp-customizer-browser-history","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fcustomizer-browser-history.0.5.2.zip","2026-03-15T10:48:56.248Z",{"slug":285,"name":286,"version":287,"author":5,"author_profile":6,"description":288,"short_description":289,"active_installs":253,"downloaded":290,"rating":36,"num_ratings":36,"last_updated":291,"tested_up_to":292,"requires_at_least":293,"requires_php":86,"tags":294,"homepage":86,"download_link":298,"security_score":117,"vuln_count":36,"unpatched_count":36,"last_vuln_date":37,"fetched_at":38},"customizer-everywhere","Customizer Everywhere","0.1.2","\u003Cp>The “Preview” button when editing a post is replaced with a “Preview & Customize” button,\u003Cbr \u002F>\nwhich opens the customizer with the current post’s preview loaded into the customizer preview window.\u003C\u002Fp>\n\u003Cp>A separate window is opened for each edited post being previewed, as opposed to all previews going into the same window named \u003Ccode>wp-preview\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>When a customizer preview is opened for previewing a post, clicking the Back (Close or Cancel) button in the\u003Cbr \u002F>\ncustomizer controls, the opened window will close and the opener window will be focused on. This will rapidly take\u003Cbr \u002F>\nyou back to the page from which you opened the preview, assuming it is still open.\u003C\u002Fp>\n\u003Cp>It is not helpful to see in browser tabs “Customize Twenty Twelve — WordPress”. This title assumes the primary\u003Cbr \u002F>\npurpose of the customizer is to preview themes, when in reality it seems the primary purpose is to customize your\u003Cbr \u002F>\nalready-selected theme. In this latter case, it makes much more sense for the title to reflect the page currently\u003Cbr \u002F>\nbeing previewed. So when in the customizer, the parent document title will reflect the title of the page currently\u003Cbr \u002F>\nbeing previewed. As you navigate around the site within the preview iframe, the page’s title will update. This allows\u003Cbr \u002F>\n you to see which page is being customized just by looking at the label on your browser’s tab.\u003C\u002Fp>\n\u003Cp>In the Admin Bar, the “Customize” link is promoted from a submenu to a top-level position right after the Edit post\u003Cbr \u002F>\nlink.\u003C\u002Fp>\n\u003Cp>This prominent placement of the “Customize” link in the admin bar, along with the customizer being opened when\u003Cbr \u002F>\npreviewing a post\u002Fpage, are designed to encourage the use of the customizer in many more places than just the site’s\u003Cbr \u002F>\nfront page. The \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fwidget-customizer\u002F\" rel=\"ugc\">Widget Customizer\u003C\u002Fa> plugin conditionally shows\u003Cbr \u002F>\ncontrol sections in the customizer based on whether or not that sidebar is currently rendered in the customizer\u003Cbr \u002F>\npreview. Therefore, for some customizer controls to be accessed, the user must navigate—either within the customizer\u003Cbr \u002F>\nor outside—to a page that has the element which a control customizes.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Development of this plugin is done \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fx-team\u002Fwp-customizer-everywhere\" rel=\"nofollow ugc\">on GitHub\u003C\u002Fa>. Pull requests welcome. Please see \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fx-team\u002Fwp-customizer-everywhere\u002Fissues\" rel=\"nofollow ugc\">issues\u003C\u002Fa> reported there before going to the plugin forum.\u003C\u002Fstrong>\u003C\u002Fp>\n","Promote and enhance the use of customizer in more places; open post previews in the customizer and promote customize link to top of admin bar.",2383,"2015-02-25T01:44:00.000Z","3.7.41","3.6",[295,111,296,297],"admin-bar","preview","widget-customizer","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fcustomizer-everywhere.zip",{"slug":300,"name":301,"version":302,"author":5,"author_profile":6,"description":303,"short_description":304,"active_installs":253,"downloaded":305,"rating":36,"num_ratings":36,"last_updated":86,"tested_up_to":107,"requires_at_least":108,"requires_php":160,"tags":306,"homepage":308,"download_link":309,"security_score":35,"vuln_count":36,"unpatched_count":36,"last_vuln_date":37,"fetched_at":283},"js-widgets","JS Widgets","0.4.3","\u003Cp>\u003Cem>Important note:\u003C\u002Fem> This project was first started before the Gutenberg feature plugin was started. As such, the JS Widgets plugin should now be considered a \u003Cem>prototype\u003C\u002Fem> which may inform the way that widget \u003Cem>blocks\u003C\u002Fem> get implemented in Gutenberg. This plugin will no longer be actively developed.\u003C\u002Fp>\n\u003Cp>Also could be known as Widget Customizer 2.0, Widgets 3.0, or Widgets Next Generation.\u003C\u002Fp>\n\u003Cp>\u003Cem>Warning:\u003C\u002Fem> The APIs provided by this plugin are still in flux. If creating new widgets that extend the \u003Ccode>WP_JS_Widget\u003C\u002Fcode> class, please look at the changelog and ensure compatibility with your extended widgets before deploying.\u003C\u002Fp>\n\u003Cp>This plugin implements:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fcore.trac.wordpress.org\u002Fticket\u002F33507\" rel=\"nofollow ugc\">WP-CORE#33507\u003C\u002Fa>: Allow widget controls to be JS-driven.\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fcore.trac.wordpress.org\u002Fticket\u002F35574\" rel=\"nofollow ugc\">WP-CORE#35574\u003C\u002Fa>: Add REST API JSON schema information to WP_Widget.\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FWP-API\u002FWP-API\u002Fissues\u002F19\" rel=\"nofollow ugc\">WP-API#19\u003C\u002Fa>: Add widget endpoints to the WP REST API.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Features:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Integrates with \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fshortcode-ui\u002F\" rel=\"ugc\">Shortcake (Shortcode UI)\u003C\u002Fa> to allow all JS widgets to be made available as Post Elements in the editor.\u003C\u002Fli>\n\u003Cli>Widget instance settings in the Customizer are exported from PHP as regular JSON without any PHP-serialized base64-encoded \u003Ccode>encoded_serialized_instance\u003C\u002Fcode> anywhere to be seen.\u003C\u002Fli>\n\u003Cli>Previewing widget changes in the customizer is faster since the \u003Ccode>update-widget\u003C\u002Fcode> Ajax request can be eliminated since the JS control can directly manipulate the widget instance data.\u003C\u002Fli>\n\u003Cli>Widgets control forms use JS content templates instead of PHP to render the markup for each control, reducing the weight of the customizer load, especially when there are a lot of widgets in use.\u003C\u002Fli>\n\u003Cli>Widgets that extend \u003Ccode>WP_JS_Widget\u003C\u002Fcode> will editable from both the customizer and the widgets admin page using the same \u003Ccode>Form\u003C\u002Fcode> JS interface. This \u003Ccode>Form\u003C\u002Fcode> is also able to be embedded in other contexts, like on the frontend and as a Shortcake (Shortcode UI) form. See \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fxwp\u002Fwp-js-widgets\u002Fissues\u002F11\" rel=\"nofollow ugc\">#11\u003C\u002Fa>.\u003C\u002Fli>\n\u003Cli>Widgets employ the JSON Schema from the REST API to define an instance with validation and sanitization of the instance properties, beyond also providing \u003Ccode>validate\u003C\u002Fcode> and \u003Ccode>sanitize\u003C\u002Fcode> methods that work on the instance array as a whole.\u003C\u002Fli>\n\u003Cli>A widget instance can be blocked from being saved by returning a \u003Ccode>WP_Error\u003C\u002Fcode> from its \u003Ccode>validate\u003C\u002Fcode> or \u003Ccode>sanitize\u003C\u002Fcode> method. For example, the RSS widget will show an error message if the feed URL provided is invalid and the widget will block from saving until the URL is corrected.\u003C\u002Fli>\n\u003Cli>Widgets are exposed under the \u003Ccode>js-widgets\u002Fv1\u003C\u002Fcode> namespace, for example to list all Recent Posts widgets via the \u003Ccode>\u002Fjs-widgets\u002Fv1\u002Fwidgets\u002Frecent-posts\u003C\u002Fcode> or to get the Text widget with the “ID” (number) of 6, \u003Ccode>\u002Fjs-widgets\u002Fv1\u002Fwidgets\u002Ftext\u002F6\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>Customizer settings for widget instances (\u003Ccode>widget_{id_base}[{number}]\u003C\u002Fcode>) are directly mutated via JavaScript instead of needing to do an \u003Ccode>update-widget\u003C\u002Fcode> Admin Ajax roundtrip; this greatly speeds up previewing.\u003C\u002Fli>\n\u003Cli>Widget control forms can be extended to employ any JS framework for managing the UI, allowing Backbone, React, or any other frontend technology to be used.\u003C\u002Fli>\n\u003Cli>Compatible with widgets stored in a custom post type instead of options, via the Widget Posts module in the \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fxwp\u002Fwp-customize-widgets-plus\" rel=\"nofollow ugc\">Customize Widgets Plus\u003C\u002Fa> plugin.\u003C\u002Fli>\n\u003Cli>Compatible with \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fxwp\u002Fwp-customize-snapshots\" rel=\"nofollow ugc\">Customize Snapshots\u003C\u002Fa>, allowing changes made in the Customizer to be applied to requests for widgets via the REST API.\u003C\u002Fli>\n\u003Cli>Includes adaptations of all core widgets using the new \u003Ccode>WP_JS_Widget\u003C\u002Fcode> API.\u003C\u002Fli>\n\u003Cli>The adapted core widgets include additional raw data in their REST API item responses so that JS can render them client-side.\u003C\u002Fli>\n\u003Cli>The Notifications API is utilized to display warnings when a user attempts to provide markup in a core widget title or illegal HTML in a Text widget’s content.\u003C\u002Fli>\n\u003Cli>The Pages widget in Core is enhanced to make use of \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fcustomize-object-selector\u002F\" rel=\"ugc\">Customize Object Selector\u003C\u002Fa> if available to display a Select2 UI for selecting pages to exclude instead of providing page IDs.\u003C\u002Fli>\n\u003Cli>An bonus bundled plugin provides a “Post Collection” widget which, if the \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fcustomize-object-selector\u002F\" rel=\"ugc\">Customize Object Selector\u003C\u002Fa> plugin is installed, will provide a UI for curating an arbitrary list of posts to display.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>This plugin doesn’t yet implement any widgets that use JS templating for \u003Cem>frontend\u003C\u002Fem> rendering of the widgets. For that, please see the \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fxwp\u002Fwp-next-recent-posts-widget\" rel=\"nofollow ugc\">Next Recent Posts Widget\u003C\u002Fa> plugin.\u003C\u002Fp>\n\u003Cp>Limitations\u002FCaveats:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Only widgets that extend \u003Ccode>WP_JS_Widget\u003C\u002Fcode> will be exposed via the REST API. The plugin includes a \u003Ccode>WP_JS_Widget\u003C\u002Fcode> adapter class which demonstrates how to adapt existing \u003Ccode>WP_Widget\u003C\u002Fcode> classes for the new widget functionality.\u003C\u002Fli>\n\u003C\u002Ful>\n","A prototype of next generation of widgets in core, embracing JS for UI and powering the Widgets REST API.",3412,[111,307,270],"rest-api","https:\u002F\u002Fgithub.com\u002Fxwp\u002Fwp-js-widgets\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fjs-widgets.0.4.3.zip",{"slug":311,"name":312,"version":168,"author":5,"author_profile":6,"description":313,"short_description":314,"active_installs":253,"downloaded":315,"rating":36,"num_ratings":36,"last_updated":86,"tested_up_to":316,"requires_at_least":317,"requires_php":318,"tags":319,"homepage":321,"download_link":322,"security_score":35,"vuln_count":36,"unpatched_count":36,"last_vuln_date":37,"fetched_at":283},"lazy-loading-oembed-iframes","Lazy Loading oEmbed Iframes","\u003Cp>This plugin adds the \u003Ccode>loading=lazy\u003C\u002Fcode> attribute to \u003Ccode>iframe\u003C\u002Fcode> elements coming from oEmbeds. In WordPress 5.5, \u003Ccode>loading=lazy\u003C\u002Fcode> is added to images per \u003Ca href=\"https:\u002F\u002Fcore.trac.wordpress.org\u002Fticket\u002F44427\" rel=\"nofollow ugc\">#44427\u003C\u002Fa>, and in 5.7 it is being added to iframes as well per \u003Ca href=\"https:\u002F\u002Fcore.trac.wordpress.org\u002Fticket\u002F50756\" rel=\"nofollow ugc\">#50756\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>This plugin will be obsolete by the time WordPress 5.7 is released. When that happens, this plugin will do nothing.\u003C\u002Fp>\n","Add the loading=lazy attribute to iframes coming from oEmbeds in content",1303,"5.4.19","2.9","5.6",[320,32],"oembed","https:\u002F\u002Fgist.github.com\u002Fwestonruter\u002F9a8cda7307d08140f9edc29d246e46e8","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Flazy-loading-oembed-iframes.zip",{"slug":324,"name":325,"version":326,"author":5,"author_profile":6,"description":327,"short_description":328,"active_installs":253,"downloaded":329,"rating":36,"num_ratings":36,"last_updated":330,"tested_up_to":192,"requires_at_least":331,"requires_php":86,"tags":332,"homepage":337,"download_link":338,"security_score":117,"vuln_count":36,"unpatched_count":36,"last_vuln_date":37,"fetched_at":38},"sectionize","Sectionize","1.1","\u003Cp>\u003Cem>This plugin is developed at\u003Cbr \u002F>\n\u003Ca href=\"http:\u002F\u002Fwww.shepherd-interactive.com\u002F\" title=\"Shepherd Interactive specializes in web design and development in Portland, Oregon\" rel=\"nofollow ugc\">Shepherd Interactive\u003C\u002Fa>\u003Cbr \u002F>\nfor the benefit of the community. No support is available. Please post any questions to the \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Ftags\u002Fsectionize?forum_id=10\" rel=\"ugc\">support forum\u003C\u002Fa>.\u003C\u002Fem>\u003C\u002Fp>\n\u003Cp>Takes HTML content which contains flat heading elements inline with paragraphs\u003Cbr \u002F>\nand automatically nests them withing HTML5 \u003Ccode>\u003Csection>\u003C\u002Fcode> elements. It also\u003Cbr \u002F>\nconditionally prepends an \u003Ccode>\u003Col>\u003C\u002Fcode> Table of Contents (TOC) with links to the\u003Cbr \u002F>\nsections in the content, for example:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\u003Cnav class='toc'>\u003Col>\n    \u003Cli>\u003Ca href=\"#section-first-top\">First Top\u003C\u002Fa>\u003C\u002Fli>\n    \u003Cli>\u003Ca href=\"#section-second-top\">Second Top\u003C\u002Fa>\n    \u003Col>\n        \u003Cli>\u003Ca href=\"#section-first-sub\">First Sub\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"#section-second-sub\">Second Sub\u003C\u002Fa>\u003C\u002Fli>\n    \u003C\u002Fol>\n    \u003C\u002Fli>\n    \u003Cli>\u003Ca href=\"#section-third-top\">Third Top\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Fol>\u003C\u002Fnav>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>This would reflect original post content such as:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\u003Ch2>First Top\u003C\u002Fh2>\nLorem ipsum dolor sit amet, consectetur adipiscing elit.\n\u003Ch2>Second Top\u003C\u002Fh2>\nLorem ipsum dolor sit amet, consectetur adipiscing elit.\n\u003Ch3>First Sub\u003C\u002Fh2>\nLorem ipsum dolor sit amet, consectetur adipiscing elit.\n\u003Ch3>Second Sub\u003C\u002Fh2>\nLorem ipsum dolor sit amet, consectetur adipiscing elit.\n\u003Ch2>Third Top\u003C\u002Fh2>\nLorem ipsum dolor sit amet, consectetur adipiscing elit.\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Original post content such as this would be sectionized as follows:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\u003Csection id=\"section-first-top\">\n    \u003Ch2>First Top\u003C\u002Fh2>\n    Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\u003C\u002Fsection>\n\u003Csection id=\"section-second-top\">\n    \u003Ch2>Second Top\u003C\u002Fh2>\n    Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n    \u003Csection id=\"section-first-sub\">\n        \u003Ch3>First Sub\u003C\u002Fh2>\n        Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n    \u003C\u002Fsection>\n    \u003Csection id=\"section-second-sub\">\n        \u003Ch3>Second Sub\u003C\u002Fh2>\n        Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n    \u003C\u002Fsection>\n\u003C\u002Fsection>\n\u003Csection id=\"section-third-top\">\n    \u003Ch2>Third Top\u003C\u002Fh2>\n    Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\u003C\u002Fsection>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Adding a table of contents as such not only aids navigation for visitors once\u003Cbr \u002F>\non the page, but Google also now provides direct links to such sections in relevant search result\u003Cbr \u002F>\nsnippets (see \u003Ca href=\"http:\u002F\u002Fgoogleblog.blogspot.com\u002F2009\u002F09\u002Fjump-to-information-you-want-right-from.html\" title=\"Jump to the information you want right from the search snippets\" rel=\"nofollow ugc\">announcement\u003C\u002Fa>).\u003Cbr \u002F>\nSo people browsing search results may be able to see your section links\u003Cbr \u002F>\nright from the results page and then be able to jump directly to the relevant\u003Cbr \u002F>\nsection.\u003C\u002Fp>\n\u003Cp>The start\u002Fend tags for both the sections and the TOC, as well as the prefixes\u003Cbr \u002F>\nused when generating the section IDs, may all be configured via the following\u003Cbr \u002F>\nWordPress options (with their defaults):\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>sectionize_id_prefix\u003C\u002Fcode>: \u003Ccode>'section-'\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>sectionize_start_section\u003C\u002Fcode>: \u003Ccode>'\u003Csection id=\"%id\">'\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>sectionize_end_section\u003C\u002Fcode>:  \u003Ccode>\u003C\u002Fsection>\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>sectionize_include_toc_threshold\u003C\u002Fcode>: \u003Ccode>2\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>sectionize_before_toc\u003C\u002Fcode>: \u003Ccode>'\u003Cnav class=\"toc\">'\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>sectionize_after_toc\u003C\u002Fcode>: \u003Ccode>'\u003C\u002Fnav>'\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>sectionize_disabled\u003C\u002Fcode>: \u003Ccode>false\u003C\u002Fcode> (no corresponding function argument)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>These global WordPress options may be overridden by individual posts\u002Fpages by\u003Cbr \u002F>\ncreating custom fields (postmeta) with the same names.\u003C\u002Fp>\n\u003Cp>These options are retreived if their corresponding arguments are not supplied\u003Cbr \u002F>\nto the \u003Ccode>sectionize()\u003C\u002Fcode> function (that is, if they are \u003Ccode>null\u003C\u002Fcode>):\u003C\u002Fp>\n\u003Cpre>\u003Ccode>function sectionize($original_content,\n                    $id_prefix = null,\n                    $start_section = null,\n                    $end_section = null,\n                    $include_toc_threshold = null,\n                    $before_toc = null,\n                    $after_toc = null)\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>This \u003Ccode>sectionize()\u003C\u002Fcode> function is added as a filter for \u003Ccode>the_content\u003C\u002Fcode> (this is\u003Cbr \u002F>\ndisabled if the option or postmeta \u003Ccode>sectionize_disabled\u003C\u002Fcode> evaluates to \u003Ccode>true\u003C\u002Fcode>):\u003C\u002Fp>\n\u003Cpre>\u003Ccode>add_filter('the_content', 'sectionize');\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Noted above, the TOC is conditionally included. It is not included if:\u003C\u002Fp>\n\u003Col>\n\u003Cli>there are no headings in the content (thus there is nothing to sectionize),\u003C\u002Fli>\n\u003Cli>the headings are not nested properly (see below), or\u003C\u002Fli>\n\u003Cli>the heading count does not meet the threshold (or the threshold is -1)\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>If the number of headings in the content is less than the\u003Cbr \u002F>\n    include_toc_threshold option\u002Fargument then the TOC is not displayed;\u003Cbr \u002F>\nlikewise, if \u003Ccode>include_toc_threshold\u003C\u002Fcode> is \u003Ccode>-1\u003C\u002Fcode> then the TOC is not displayed.\u003C\u002Fp>\n\u003Cp>\u003Cem>Important!\u003C\u002Fem> Regarding headings being “nested properly”, you must ensure that\u003Cbr \u002F>\nyou properly arrange your headings in a hierarchical manner in which no heading\u003Cbr \u002F>\nis immediately preceeded by another heading that is more than one level greater\u003Cbr \u002F>\n(e.g. an \u003Ccode>h3\u003C\u002Fcode> must be preceeded by an \u003Ccode>h2\u003C\u002Fcode> or another \u003Ccode>h3\u003C\u002Fcode>). For example, this\u003Cbr \u002F>\nworks:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>h2\n    h3\n    h3\n        h4\n    h3\nh2\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>But this does not:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>h2\n    h4 -- fail\n        h6 -- fail\nh2\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>If you make such a mistake, this plugin will abort and have no effect. An error\u003Cbr \u002F>\nnotice will be included in the HTML output in the form of an HTML comment.\u003C\u002Fp>\n\u003Cp>Please see source code for additional documentation: numerous filters are provided\u003Cbr \u002F>\nto further customize the behavior. \u003Cem>Be one with the code!\u003C\u002Fem>\u003Cbr \u002F>\nTo help serve HTML5 content, see the \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fextend\u002Fplugins\u002Fxhtml5-support\u002F\" rel=\"ugc\">XHTML5 Support\u003C\u002Fa\u003C> plugin.\u003C\u002Fa>\u003C\u002Fp>\n","Parses HTML for sections demarcated by heading elements, wraps them in HTML5 section elements, and generates table of contents with links to each.",2287,"2009-12-18T00:38:00.000Z","2.8",[333,334,198,335,336],"html5","sections","table-of-contents","toc","http:\u002F\u002Fwordpress.org\u002Fextend\u002Fplugins\u002Fsectionize\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fsectionize.zip",{"slug":340,"name":341,"version":264,"author":5,"author_profile":6,"description":342,"short_description":343,"active_installs":253,"downloaded":344,"rating":36,"num_ratings":36,"last_updated":345,"tested_up_to":346,"requires_at_least":347,"requires_php":86,"tags":348,"homepage":350,"download_link":351,"security_score":117,"vuln_count":36,"unpatched_count":36,"last_vuln_date":37,"fetched_at":38},"widget-favorites","Widget Favorites","\u003Cp>Sometimes you have a certain widget configuration that you need to use over-and-over again.\u003Cbr \u002F>\nWidget Favorites provides a way to save a widget instance by name to identify it later\u003Cbr \u002F>\nwhen loading the favorited widget instance into another widget.\u003C\u002Fp>\n\u003Cp>Another way to look at this plugin is that it provides (non-automatic) revisions for widgets.\u003C\u002Fp>\n\u003Cp>Note that this only adds functionality to widgets managed in the Customizer.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Development of this plugin is done \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fxwp\u002Fwp-widget-favorites\" rel=\"nofollow ugc\">on GitHub\u003C\u002Fa>. Pull requests welcome. Please see \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fxwp\u002Fwp-widget-favorites\u002Fissues\" rel=\"nofollow ugc\">issues\u003C\u002Fa> reported there before going to the \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fsupport\u002Fplugin\u002Fwidget-favorites\" rel=\"ugc\">plugin forum\u003C\u002Fa>.\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Ch3>Other Related Plugins\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fsettings-revisions\u002F\" rel=\"ugc\">Settings Revisions\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Foomph-clone-widgets\u002F\" rel=\"ugc\">Oomph Clone Widgets\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fwidget-alias\u002F\" rel=\"ugc\">Widget Alias\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fduplicate-widget\u002F\" rel=\"ugc\">Duplicate Widget\u003C\u002Fa> (not updated in 2+ years)\u003C\u002Fli>\n\u003C\u002Ful>\n","Store revisions of widget instances for re-use.",2123,"2015-01-30T00:27:00.000Z","4.1.42","4.1",[111,349,270],"revisions","https:\u002F\u002Fgithub.com\u002Fxwp\u002Fwp-widget-favorites","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fwidget-favorites.zip",{"slug":353,"name":354,"version":355,"author":5,"author_profile":6,"description":356,"short_description":357,"active_installs":36,"downloaded":358,"rating":36,"num_ratings":36,"last_updated":359,"tested_up_to":158,"requires_at_least":360,"requires_php":174,"tags":361,"homepage":363,"download_link":364,"security_score":117,"vuln_count":36,"unpatched_count":36,"last_vuln_date":37,"fetched_at":38},"customize-comments","Customize Comments","0.1.0","\u003Cp>This plugin is a proof of concept for how comment editing might be added to the Customizer, with edits to comments being staged in changesets along with any other changes made in customziation session. It demonstrates scalable lazy-loading of controls\u002Fsettings via the REST API. It demonstrates both dynamic settings and dynamic partials.\u003C\u002Fp>\n\u003Cp>A new Comments section is added to the Customizer, and when this section is expanded the most recent comments are fetched from the REST API and then are added as textarea controls in the section. A button appears at the bottom of the section for loading subsequent pages of comments.\u003C\u002Fp>\n\u003Cp>The comments are listed with the comment author and publish date along with the post it was commented on. Only the comment’s content is currently editable. When you do edit a comment that appears in the preview, then the comment will be previewed with selective refresh after a low-fidelity instant preview.\u003C\u002Fp>\n\u003Cp>When you navigate to a post and see the comment list, clicking the “Edit Comment” link in the Customizer preview will cause the comment to be loaded into a new textarea control in the section, and the control will then be focused for editing.\u003C\u002Fp>\n\u003Cspan class=\"embed-youtube\" style=\"text-align:center; display: block;\">\u003Ciframe loading=\"lazy\" class=\"youtube-player\" width=\"750\" height=\"422\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002F-LdT8XO3ys8?version=3&rel=1&showsearch=0&showinfo=1&iv_load_policy=1&fs=1&hl=en-US&autohide=2&wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\">\u003C\u002Fiframe>\u003C\u002Fspan>\n\u003Cp>This is a natural companion to the \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fcustomize-posts\u002F\" rel=\"ugc\">Customize Posts\u003C\u002Fa> feature plugin.\u003C\u002Fp>\n","Edit comments with live preview and bundle edits in Customizer changesets.",1690,"2017-11-27T08:03:00.000Z","4.9",[362,110,111],"comments","https:\u002F\u002Fgithub.com\u002Fxwp\u002Fwp-customize-comments\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fcustomize-comments.0.1.0.zip"]