port( &#8216;search-element&#8217; ) (#78485). Default output is unchanged, with a path to making the modern markup the default in a future release.(<a href=\"https://github.com/WordPress/gutenberg/pull/78485\">78485</a>)</p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"query-block\">Query block </h3>\n\n\n\n<p class=\"has-text-align-right wp-block-paragraph\" id=\"query-block-theme-builder-site-admin-end-user\"><strong>[theme builder]</strong> <strong>[site admin][end user]</strong></p>\n\n\n\n<p class=\"wp-block-paragraph\">The Query block received an additional filter to control the list of blocks: You can now exclude the current post from a list of posts. This is useful when you want to add a list of posts with related posts. (<a href=\"https://github.com/WordPress/gutenberg/pull/64916\">64916</a>).</p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img alt=\"\" class=\"wp-image-46345\" height=\"326\" src=\"https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2026/07/Query-block-exclude-current-post-wp7-1.png?resize=652%2C326&#038;ssl=1\" width=\"652\" /></figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"general-quality-of-life-improvements\">General quality of life improvements. </h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"pattern-editing-experience-improvements\">Pattern editing experience improvements </h4>\n\n\n\n<p class=\"has-text-align-right wp-block-paragraph\" id=\"pattern-editing-experience-improvements-theme-builder-site-admin-developer\"><strong>[theme builder]</strong> <strong>[site admin]</strong> <strong>[developer]</strong></p>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress 7.0 shifted pattern editing to focus on content changes rather than exposing every tool, treating patterns more like single blocks. In 7.1, work focuses on UX refinements based on feedback, bug fixes, and general maintenance. For users inserting and customizing patterns, this means a more polished, predictable experience with fewer rough edges.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Tracking: <a href=\"https://github.com/WordPress/gutenberg/issues/75717\">WordPress 7.1: Pattern Editing Iteration</a> (#75717)</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Pattern Editing and Block Fields: Highlight selected block (<a href=\"https://github.com/WordPress/gutenberg/pull/74841\">74841</a><em>)</em></li>\n\n\n\n<li>Pattern editing: show root block identity when editing pattern sections <a href=\"https://github.com/WordPress/gutenberg/pull/79417\">#79417</a> </li>\n</ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"block-width-and-layout-controls\"> Block Width and Layout Controls </h4>\n\n\n\n<p class=\"has-text-align-right wp-block-paragraph\" id=\"block-width-and-layout-controls-theme-builder-site-admin-developer\"><strong>[theme builder]</strong> <strong>[site admin]</strong> <strong>[developer]</strong></p>\n\n\n\n<p class=\"wp-block-paragraph\">Refines spacing and layout tools to be more intuitive. The Columns block no longer shows a confusing &#8216;Skip&#8217; option in its layout picker, the Button block now uses the standard width control system, and spacing controls display in a more logical order when unlinked. These changes remove friction points that tripped up editors when building complex layouts.</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Button: Migrate to width block support <a href=\"https://github.com/WordPress/gutenberg/pull/74242\">#74242</a> </li>\n\n\n\n<li>Columns: Remove redundant Skip option from layout picker <a href=\"https://github.com/WordPress/gutenberg/pull/78405\">#78405</a> </li>\n\n\n\n<li>Re-order spacing side controls when unlinked <a href=\"https://github.com/WordPress/gutenberg/pull/66317\">#66317</a> </li>\n</ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"link-control-and-preview-enhancements\">Link Control and Preview Enhancements </h4>\n\n\n\n<p class=\"has-text-align-right wp-block-paragraph\" id=\"link-control-and-preview-enhancements-theme-builder-site-admin-developer\"><strong>[theme builder]</strong> <strong>[site admin]</strong> <strong>[developer]</strong></p>\n\n\n\n<p class=\"wp-block-paragraph\">When linking to pages or posts, the link picker now shows &#8216;Homepage&#8217; instead of just &#8216;Page&#8217; for your site&#8217;s front page, and uses the actual entity link title for previews. These small improvements make link creation feel smarter and help editors understand exactly what they&#8217;re linking to before publishing.</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use entity link title for link control preview <a href=\"https://github.com/WordPress/gutenberg/pull/77155\">#77155</a> </li>\n\n\n\n<li>Link Picker: Use Homepage badge instead of Page if Homepage <a href=\"https://github.com/WordPress/gutenberg/pull/75929\">#75929</a> </li>\n</ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"additional-css-validation\">Additional CSS Validation </h4>\n\n\n\n<p class=\"has-text-align-right wp-block-paragraph\" id=\"additional-css-validation-theme-builder-site-admin-developer-end-user\"><strong>[theme builder]</strong> <strong>[site admin]</strong> <strong>[developer]</strong><strong>[end user]</strong></p>\n\n\n\n<p class=\"wp-block-paragraph\">Additional CSS is now validated both on mount and via a new dimension validation endpoint for sideloaded styles. These checks prevent malformed or insecure CSS from breaking your site&#8217;s appearance or introducing security risks, giving you more confidence when adding custom styles.</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Validate additional CSS on mount <a href=\"https://github.com/WordPress/gutenberg/pull/78682\">#78682</a> </li>\n\n\n\n<li>Add dimension validation to sideload endpoint <a href=\"https://github.com/WordPress/gutenberg/pull/74903\">#74903</a> </li>\n</ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"block-editor-attribute-handling\">Block Editor Attribute Handling </h4>\n\n\n\n<p class=\"has-text-align-right wp-block-paragraph\" id=\"block-editor-attribute-handling-theme-builder-developer\"><strong>[theme builder][developer]</strong></p>\n\n\n\n<p class=\"wp-block-paragraph\">The block editor now correctly targets the right block when copying direct insert block attributes, fixing edge cases where attributes would apply to the wrong block. This fix ensures that copy-paste and duplication workflows behave as expected.</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Block Editor: Fix target block for copying direct insert block attributes <a href=\"https://github.com/WordPress/gutenberg/pull/77877\">#77877</a> </li>\n\n\n\n<li>Block Editor: Allow overriding `disableContentOnlyForTemplateParts` setting <a href=\"https://github.com/WordPress/gutenberg/pull/79191\">#79191</a> </li>\n</ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"image-handling-improved\">Image handling improved </h4>\n\n\n\n<p class=\"has-text-align-right wp-block-paragraph\" id=\"image-handling-improved-end-user-site-admin\"><strong>[end user][site admin]</strong></p>\n\n\n\n<p class=\"wp-block-paragraph\">A set of small fixes makes working with images more predictable. If an image points to a media library item that has since been deleted, the editor no longer treats it as a local attachment, preventing confusing errors. The crop button only appears when cropping is actually available for your user role and image type, so you&#8217;re never offered a tool that can&#8217;t work. </p>\n\n\n\n<p class=\"wp-block-paragraph\">And the featured image field now shows placeholder text making clear at a glance what goes there<em>.</em></p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Image block: Validate attachment ID exists before treating image as local <a href=\"https://github.com/WordPress/gutenberg/pull/77178\">#77178</a></li>\n\n\n\n<li>Image/Site Logo: hide crop toolbar when editMediaEntity is unavailable <a href=\"https://github.com/WordPress/gutenberg/pull/76626\">#76626</a></li>\n\n\n\n<li>Set placeholder to featured image field <a href=\"https://github.com/WordPress/gutenberg/pull/76342\">#76342</a></li>\n</ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"post-template-layout-improvements\">Post Template Layout Improvements </h4>\n\n\n\n<p class=\"has-text-align-right wp-block-paragraph\" id=\"post-template-layout-improvements-theme-builder-site-admin\"><strong>[theme builder][site admin]</strong></p>\n\n\n\n<p class=\"wp-block-paragraph\">Ensures the Post Template block&#8217;s fallback styles only apply when appropriate, preventing layout conflicts when custom minimum column widths are defined. This fix gives editors more predictable control over query loop layouts without unexpected style overrides.</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ensure Post Template fallback styles don&#8217;t apply when minimumColumnWidth is defined <a href=\"https://github.com/WordPress/gutenberg/pull/77411\">#77411</a> </li>\n</ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"post-title-block-enhancements\">Post Title Block Enhancements</h4>\n\n\n\n<p class=\"has-text-align-right wp-block-paragraph\" id=\"post-title-block-enhancements-site-admin-end-user\"><strong>[site admin][end user]</strong></p>\n\n\n\n<p class=\"wp-block-paragraph\">The Title block gains a placeholder attribute, letting you show helpful text when no title has been entered yet. This small addition improves the editing experience for custom post types and guides content creators to fill in required fields.</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Post Title: Add placeholder attribute <a href=\"https://github.com/WordPress/gutenberg/pull/76016\">#7601</a> <em>v22.7.0</em></li>\n</ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"block-inserter-enhancements\">Block Inserter Enhancements </h4>\n\n\n\n<p class=\"has-text-align-right wp-block-paragraph\" id=\"block-inserter-enhancements-site-admin-end-user\"><strong>[site admin][end user]</strong></p>\n\n\n\n<p class=\"wp-block-paragraph\">Makes discovering and adding blocks easier with visual polish to the inserter interface. The search input now stays visible while scrolling through block options, and the inserter button animates to clearly signal when the panel is open. These small touches reduce friction when building pages and help editors stay oriented while exploring block options.</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Block Inserter: Animate inserter button icon to signal open state. <a href=\"https://github.com/WordPress/gutenberg/pull/78306\">#78306</a> </li>\n\n\n\n<li>Make Block Inserter search input sticky while scrolling <a href=\"https://github.com/WordPress/gutenberg/pull/77698\">#77698</a></li>\n</ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"editor-enhancements\">Editor enhancements </h2>\n\n\n\n<p class=\"wp-block-paragraph\">Beyond the block improvements, the editing experience itself picks up refinements across the board. Notes mature into a fuller commenting workflow. Visual revisions gain a more detailed timeline. And your site&#8217;s brand identity gets a dedicated home in the Site Editor. </p>\n\n\n\n<p class=\"wp-block-paragraph\">A Dev Note provides a list of <a href=\"https://make.wordpress.org/core/2026/08/04/miscellaneous-block-editor-changes-in-wordpress-7-1/\">miscellaneous Editor changes</a>. </p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"notes-move-toward-a-full-commenting-workflow\">Notes move toward a full commenting workflow </h3>\n\n\n\n<p class=\"has-text-align-right wp-block-paragraph\" id=\"notes-move-toward-a-full-commenting-workflow-end-user-site-admin-developer-enterprise\"><strong>[end user][site admin][developer][enterprise]</strong></p>\n\n\n\n<p class=\"wp-block-paragraph\">Notes, the inline editorial comments right in the editor, continue to mature, with several additions in this release that make asynchronous collaboration richer and easier to act on without leaving WordPress.</p>\n\n\n\n<p class=\"wp-block-paragraph\">The headline feature:<a href=\"https://github.com/WordPress/gutenberg/pull/78218\"> inline notes</a>. You can now attach a note to a specific text selection rather than to a whole block. Select part of a paragraph, add a note, and the highlight stays anchored to that text as you keep editing around it. A single block can carry multiple inline notes, sorted by the order they appear, and none of the highlighting shows up in the published post. Also, blocks are no longer limited to a single conversation, either — you can start<a href=\"https://github.com/WordPress/gutenberg/pull/75147\"> multiple note threads on the same block</a>.</p>\n\n\n\n<p class=\"wp-block-paragraph\">The conversations themselves got more expressive, too. Notes now support<a href=\"https://github.com/WordPress/gutenberg/pull/78242\"> rich text formatting</a> — bold, italic, links, and code. <a href=\"https://github.com/WordPress/gutenberg/pull/79604\">@mention autocomplete</a> makes it quick to pull a colleague into a thread. Longer notes collapse behind a<a href=\"https://github.com/WordPress/gutenberg/pull/77446\"> &#8220;Show more&#8221; toggle</a>, and a<a href=\"https://github.com/WordPress/gutenberg/pull/80019\"> &#8220;Resolved&#8221; divider</a> in the sidebar separates finished discussions from open ones, so it&#8217;s easy to see what still needs attention.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Tracking:<a href=\"https://github.com/WordPress/gutenberg/issues/76316\"> Notes iteration for WordPress 7.1</a> (#76316)</p>\n\n\n\n		<figure class=\"wp-block-jetpack-videopress jetpack-videopress-player\">\n			<div class=\"jetpack-videopress-player__wrapper\"> </div>\n			\n			\n		</figure>\n		\n\n\n<h3 class=\"wp-block-heading\" id=\"dedicated-identity-section\">Dedicated Identity section </h3>\n\n\n\n<p class=\"has-text-align-right wp-block-paragraph\" id=\"dedicated-identity-section-site-admin-theme-builder-end-user\"><strong>[site admin][theme builder][end user]</strong></p>\n\n\n\n<p class=\"wp-block-paragraph\">A new <strong>Appearance &gt; Editor &gt; Identity</strong> screen consolidates your site&#8217;s logo, favicon, title, and tagline into one easy-to-find location, with inline editing so you can crop and adjust images right there. This eliminates hunting through <strong>Settings</strong> or digging into templates just to update foundational branding. For new site builders especially, it makes setting up your site&#8217;s identity quick and straightforward. Existing site owners have an intuitive place to update the data.  (<a href=\"https://github.com/WordPress/gutenberg/pull/76264\">76264</a>, <a href=\"https://github.com/WordPress/gutenberg/pull/76116\">76116</a>)</p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img alt=\"\" class=\"wp-image-46349\" height=\"561\" src=\"https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2026/07/Identity-section-in-site-editor-wp-7-1.png?resize=652%2C561&#038;ssl=1\" width=\"652\" /></figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"visual-revisions-improvement\">Visual revisions improvements </h3>\n\n\n\n<p class=\"has-text-align-right wp-block-paragraph\" id=\"visual-revisions-improvements-site-admin-end-user-theme-builder\"><strong>[site admin][end user][theme builder]</strong></p>\n\n\n\n<p class=\"wp-block-paragraph\">Building on the visual revisions introduced in 7.0, the revisions screen gains a paginated timeline in the inspector with more detailed information about each revision, making it easier to understand what changed as you scrub through versions. (<a href=\"https://github.com/WordPress/gutenberg/pull/77333\">77333</a>)</p>\n\n\n\n<p class=\"wp-block-paragraph\">Changes  made via autosave are now labeled in the revisions timeline and make the autosave notice work with the visual revisions UI.(<a href=\"https://github.com/WordPress/gutenberg/pull/79950\">79950</a>, <a href=\"https://github.com/WordPress/gutenberg/pull/79947\">79947</a>)</p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"apply-globally-now-with-review-panel\">Apply Globally now with review panel</h3>\n\n\n\n<p class=\"wp-block-paragraph\">The block inspector&#8217;s <strong>Apply globally</strong> action which has been a one button push of the block&#8217;s local style changes to Global Styles, has received an upgrade in WordPress 7.1 so designer can have a more granular control, on which part of the styles will make it into the global styles. </p>\n\n\n\n<p class=\"wp-block-paragraph\">The button now opens a review modal instead, listing each modified style with its current and new value. All changes come pre-selected; deselect any you want to keep as local overrides, and only the checked styles are applied. Undo still restores the previous state in one step. What was a somewhat risky action is now a deliberate choice. You see exactly what will change across your site before committing. (<a href=\"https://github.com/WordPress/gutenberg/pull/79839\">#79839</a>)</p>\n\n\n\n		<figure class=\"wp-block-jetpack-videopress jetpack-videopress-player\">\n			<div class=\"jetpack-videopress-player__wrapper\"> </div>\n			\n			\n		</figure>\n		\n\n\n<h2 class=\"wp-block-heading\" id=\"admin-workflow-updates\">Admin / Workflow updates</h2>\n\n\n\n<p class=\"wp-block-paragraph\">Updates to admin and workflow tools in 7.1 improve navigation, content management, and site administration. These changes are designed to reduce friction and help you work more efficiently within the WordPress dashboard.</p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"organized-command-palette\">Organized command palette </h3>\n\n\n\n<p class=\"has-text-align-right wp-block-paragraph\" id=\"organized-command-palette-all\"><strong>[all]</strong></p>\n\n\n\n<p class=\"wp-block-paragraph\">The command palette, the quick-access menu you open with keyboard shortcuts,  now groups results into recent, suggested, and matching sections, and remembers your recently-used commands across sessions. The visual design has also been refreshed to make scanning results easier. This helps you navigate WordPress faster by surfacing the tools you use most often right at the top. (<a href=\"https://github.com/WordPress/gutenberg/pull/75691\">75691</a>)</p>\n\n\n\n		<figure class=\"wp-block-jetpack-videopress jetpack-videopress-player\">\n			<div class=\"jetpack-videopress-player__wrapper\"> </div>\n			\n			\n		</figure>\n		\n\n\n<h3 class=\"wp-block-heading\" id=\"change-a-comment-s-parent-from-the-edit-comment-screen\">Change a comment&#8217;s parent from the Edit Comment screen </h3>\n\n\n\n<p class=\"has-text-align-right wp-block-paragraph\" id=\"change-a-comment-s-parent-from-the-edit-comment-screen-end-user-site-admin-enterprise\"><strong>[end user][site admin][enterprise]</strong></p>\n\n\n\n<p class=\"wp-block-paragraph\">Ever needed to fix a comment that landed in the wrong thread? The Edit Comment screen now has an &#8220;In reply to&#8221; control in the Save box — hit Edit and you get a dropdown of the post&#8217;s other comments, listed by the author with a short excerpt. Top-level comments just show &#8220;None.&#8221;</p>\n\n\n\n<p class=\"wp-block-paragraph\">You can&#8217;t create broken threads with it: the dropdown hides the comment itself and anything nested under it, and the server double-checks on save — the new parent has to be on the same post and can&#8217;t be the comment or one of its own replies (anything invalid gets bounced with a WP_Error). If the current parent wouldn&#8217;t normally show up in the list (a pingback, say), it&#8217;s kept in there as the selected option, so saving without touching the field changes nothing. Works without JavaScript too, and there are tests covering the validation. (<a href=\"https://core.trac.wordpress.org/ticket/65570\">65570</a>)</p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img alt=\"\" class=\"wp-image-46353\" height=\"485\" src=\"https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2026/07/Change-comments-parent.png?resize=652%2C485&#038;ssl=1\" width=\"652\" /></figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"see-an-excerpt-of-posts-without-titles\">See an excerpt of posts without titles </h3>\n\n\n\n<p class=\"has-text-align-right wp-block-paragraph\" id=\"see-an-excerpt-of-posts-without-titles-end-user-site-admin\"><strong>[end user][site admin]</strong></p>\n\n\n\n<p class=\"wp-block-paragraph\">If you publish posts without titles for instance for quick status-style updates, the Posts list has been pretty useless for telling them apart: just a column of identical &#8220;(no title)&#8221; links. </p>\n\n\n\n<p class=\"wp-block-paragraph\">Now, in Compact view, untitled posts show the first 15 words of the excerpt right after &#8220;(no title)&#8221;, so you can actually see what each post is at a glance. </p>\n\n\n\n<p class=\"wp-block-paragraph\">The checkbox&#8217;s screen-reader label gets the same text, password-protected posts keep their content hidden, and the Extended view is unchanged since it already shows excerpts.(<a href=\"https://core.trac.wordpress.org/ticket/65022\">65022</a>).</p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img alt=\"\" class=\"wp-image-46355\" height=\"348\" src=\"https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2026/07/no-title-posts-in-list.png?resize=652%2C348&#038;ssl=1\" width=\"652\" /></figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"media-library-infinite-scrolling-is-back-on-by-default-with-a-per-user-opt-out\">Media Library: infinite scrolling is back on by default, with a per-user opt-out </h3>\n\n\n\n<p class=\"has-text-align-right wp-block-paragraph\" id=\"media-library-infinite-scrolling-is-back-on-by-default-with-a-per-user-opt-out-end-user-site-admin\"><strong>[end user][site admin]</strong></p>\n\n\n\n<p class=\"wp-block-paragraph\">The Media Library grid now uses infinite scrolling by default, so attachments load continuously as you scroll instead of behind a &#8220;Load more&#8221; button. For anyone who prefers the previous behavior, there&#8217;s a new personal option: a &#8220;Disable infinite scrolling in the Media Library grid view&#8221; checkbox on the profile screen. The setting only appears for users who can actually upload files, since others never see the attachment grid.</p>\n\n\n\n<p class=\"wp-block-paragraph\">For developers, the existing media_library_infinite_scrolling filter still works and now takes top precedence: a hooked filter always wins, followed by the user&#8217;s profile preference, with infinite scrolling enabled when neither is set. Note the filter&#8217;s default value has flipped from false to true as of 7.1.0, so any code relying on the old default should be reviewed. The change ships with unit tests covering the new user option and the full precedence chain (<a href=\"https://core.trac.wordpress.org/ticket/65564\">65564</a>).</p>\n\n\n\n<p class=\"wp-block-paragraph\">Read the Dev note: <a href=\"https://make.wordpress.org/core/2026/07/23/media-library-infinite-scrolling-is-now-enabled-by-default-with-a-per-user-opt-out/\">Media Library infinite scrolling is now enabled by default, with a per-user opt-out</a>.</p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"hosts-can-now-tune-speculative-loading-defaults\">Hosts can now tune speculative loading defaults</h3>\n\n\n\n<p class=\"wp-block-paragraph\">Since WordPress 6.8, <a href=\"https://make.wordpress.org/core/2025/03/06/speculative-loading-in-6-8/\">speculative loading</a> lets browsers prefetch or prerender pages a visitor is likely to open next, making navigation feel near-instant. WordPress ships with deliberately cautious defaults — and until now, changing them required an mu-plugin. With WordPress 7.1, hosting providers and site owners can adjust the default mode and eagerness through environment variables or wp-config.php constants. A well-configured host with page and object caching in place can opt its sites into more aggressive speculation and pass the speed gains on to visitors. The real-world data hosts gather this way will also help inform whether core changes the defaults for everyone in a future release. The technical details are available in the core ticket (<a href=\"https://core.trac.wordpress.org/ticket/65624\">#65624</a>).</p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"developer-goodies\">Developer Goodies </h2>\n\n\n\n<p class=\"has-text-align-right wp-block-paragraph\" id=\"developer-goodies-developer-theme-builder-plugin-author-enterprise\"><strong>[developer][theme builder][plugin author][enterprise]</strong></p>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress 7.1 provides developers with expanded APIs, theme.json capabilities, and system improvements. These tools offer greater control over site design, block behavior, and system integrations.</p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"post-editor-iframe-now-always-on\">Post editor iframe now always on</h3>\n\n\n\n<p class=\"wp-block-paragraph\">Other editors in WordPress—the site editor, the template editor, and block, template, and device previews—have been unconditionally iframed for a long time, going back to the template editor&#8217;s introduction in 5.8. The post editor was the holdout: starting in 7.0, whether it ran isolated depended on the blocks actually present in a given post, so a post using only Block API v3+ blocks got the isolated canvas, while a post containing even one older block (API v1 or v2) dropped out of it entirely. That meant the same site, even the same author, could see the editor behave differently from post to post. <a href=\"https://github.com/WordPress/gutenberg/pull/75187\">In 7.1, that condition is removed</a>: every post editor is always iframed, regardless of theme type or block API version.</p>\n\n\n\n<p class=\"wp-block-paragraph\">For most people writing and editing content, this is good news—no more switching behavior depending on which blocks happen to be inserted. Block developers have a bit of homework, though: the iframe has its own document and window, separate from the admin page where editor scripts run, so any code that reaches for the global document or window to touch the canvas will now be looking at the wrong place. The usual fix is to get the canvas&#8217;s document from an element inside it (via ownerDocument and its defaultView) rather than the global object, and to use useRefEffect for attaching and cleaning up canvas event listeners.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Read the <a href=\"https://make.wordpress.org/core/2026/08/03/iframed-editor-changes-in-wordpress-7-1/\">dev note on the 7.1 changes</a> and the <a href=\"https://developer.wordpress.org/block-editor/reference-guides/block-api/block-api-versions/block-migration-for-iframe-editor-compatibility/\">block migration guide</a> for more details.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Ryan Welcher published a guide and a demo plugin. <a href=\"https://gutenbergtimes.com/the-post-editor-is-going-full-iframe-what-block-developers-need-to-know-before-wordpress-7-1/\">The post editor is going full iframe: what block developers need to know before WordPress 7.1</a> with code examples and instructions how to fix things if necessary. </p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"abilities-api-opens-up-its-execution-pipeline\">Abilities API opens up its execution pipeline</h3>\n\n\n\n<p class=\"wp-block-paragraph\">The Abilities API arrived in WordPress 6.9, and 7.1 gives extenders real control over it. Four new lifecycle filters let plugins step into ability execution — short-circuit it entirely (think caching, rate limiting, or maintenance mode), transform input, layer on extra authorization rules, or reshape and even recover results. Two more filters add custom input and output validation on top of JSON Schema, and a new <code>wp_ability_invoked</code> action fires on every invocation — even failed ones — handy for logging and auditing. The core info abilities return more user details, input over the REST API now arrives properly typed, and <code>wp_prepare_json_schema_for_client()</code> strips PHP callbacks and WordPress-only conventions before a schema goes out to REST clients, MCP integrations, or AI tools. </p>\n\n\n\n<p class=\"wp-block-paragraph\">A new <code>public</code> metadata flag rounds it out: declare once that an ability is meant for external clients, and REST, MCP adapters, and future integrations use it as their default — with channel-specific flags still able to override, and permission callbacks still guarding actual execution.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Finding the right abilities gets easier too: <code>wp_get_abilities()</code> now accepts arguments to filter registered abilities by category, namespace, or meta — with the same filtering available on the REST endpoint.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Details and code examples in these dev notes:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https://make.wordpress.org/core/2026/07/29/new-execution-lifecycle-filters-for-the-abilities-api-in-wordpress-7-1/\">New execution lifecycle filters for the Abilities API</a></li>\n\n\n\n<li><a href=\"https://make.wordpress.org/core/2026/07/31/abilities-api-improvements-in-wordpress-7-1/\">Abilities API improvements</a></li>\n\n\n\n<li><a href=\"https://make.wordpress.org/core/2026/07/31/json-schema-preparation-for-client-compatibility-in-wordpress-7-1/\">JSON Schema preparation for client compatibility</a></li>\n\n\n\n<li><a href=\"https://make.wordpress.org/core/2026/08/04/a-unified-public-exposure-flag-for-abilities-in-wordpress-7-1/\">A unified public exposure flag for Abilities </a></li>\n\n\n\n<li><a href=\"https://make.wordpress.org/core/2026/08/05/filtering-registered-abilities-with-wp_get_abilities-in-wordpress-7-1/\">Filtering registered abilities with wp_get_abilities() in WordPress 7.1</a></li>\n</ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"global-styles-and-theme-json\">Global Styles and theme.json </h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"text-shadow-support-for-theme-json\">Text Shadow support for theme.json</h4>\n\n\n\n<p class=\"wp-block-paragraph\">Theme authors can now define <a href=\"https://github.com/WordPress/gutenberg/pull/73320\">text shadows directly in theme.json</a> via a new textShadow property under styles.typography. It works everywhere you&#8217;d expect: at the root level, per-block (say, a shadow on paragraphs only), via style variations, and on elements — including pseudo-selectors like a link&#8217;s :hover state. Any valid CSS text-shadow value is accepted, including stacked multi-shadow definitions. Block placeholder text in the editor resets the shadow so it stays readable regardless of what the theme sets.</p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\"><span style=\"display: flex; padding: 10px 0px 0 16px; font-size: 0.8em; width: 100%; text-align: left; background-color: #FDF6E3; font-style: italic; color: #657B83;\"><span>JSON</span></span><span class=\"code-block-pro-copy-button\" style=\"color: #657B83; display: none;\" tabindex=\"0\"><pre class=\"code-block-pro-copy-button-pre\"><textarea class=\"code-block-pro-copy-button-textarea\" readonly=\"readonly\" tabindex=\"-1\">\"styles\": {\n		\"typography\": {\n			\"textShadow\": \"1px 1px 2px red, 0 0 1em blue, 0 0 0.2em blue;\"\n		},\n		\"blocks\": {\n			\"core/paragraph\": {\n				\"typography\": {\n					\"textShadow\": \"1px 1px 2px red, 0 0 1em red, 0 0 0.2em red;\"\n				}\n			}\n		},\n		\"elements\": {\n			\"link\": {\n				\":hover\": {\n					\"typography\": {\n						\"textShadow\": \"none\"\n</textarea></pre><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"with-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path class=\"without-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></span><pre class=\"shiki solarized-light\" style=\"background-color: #FDF6E3;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #2AA198;\">&quot;styles&quot;</span><span style=\"color: #657B83;\">: {</span></span>\n<span class=\"line\"><span style=\"color: #657B83;\">		</span><span style=\"color: #859900;\">&quot;typography&quot;</span><span style=\"color: #657B83;\">: {</span></span>\n<span class=\"line\"><span style=\"color: #657B83;\">			</span><span style=\"color: #859900;\">&quot;textShadow&quot;</span><span style=\"color: #657B83;\">: </span><span style=\"color: #2AA198;\">&quot;1px 1px 2px red, 0 0 1em blue, 0 0 0.2em blue;&quot;</span></span>\n<span class=\"line\"><span style=\"color: #657B83;\">		},</span></span>\n<span class=\"line\"><span style=\"color: #657B83;\">		</span><span style=\"color: #859900;\">&quot;blocks&quot;</span><span style=\"color: #657B83;\">: {</span></span>\n<span class=\"line\"><span style=\"color: #657B83;\">			</span><span style=\"color: #859900;\">&quot;core/paragraph&quot;</span><span style=\"color: #657B83;\">: {</span></span>\n<span class=\"line\"><span style=\"color: #657B83;\">				</span><span style=\"color: #859900;\">&quot;typography&quot;</span><span style=\"color: #657B83;\">: {</span></span>\n<span class=\"line\"><span style=\"color: #657B83;\">					</span><span style=\"color: #859900;\">&quot;textShadow&quot;</span><span style=\"color: #657B83;\">: </span><span style=\"color: #2AA198;\">&quot;1px 1px 2px red, 0 0 1em red, 0 0 0.2em red;&quot;</span></span>\n<span class=\"line\"><span style=\"color: #657B83;\">				}</span></span>\n<span class=\"line\"><span style=\"color: #657B83;\">			}</span></span>\n<span class=\"line\"><span style=\"color: #657B83;\">		},</span></span>\n<span class=\"line\"><span style=\"color: #657B83;\">		</span><span style=\"color: #859900;\">&quot;elements&quot;</span><span style=\"color: #657B83;\">: {</span></span>\n<span class=\"line\"><span style=\"color: #657B83;\">			</span><span style=\"color: #859900;\">&quot;link&quot;</span><span style=\"color: #657B83;\">: {</span></span>\n<span class=\"line\"><span style=\"color: #657B83;\">				</span><span style=\"color: #859900;\">&quot;:hover&quot;</span><span style=\"color: #657B83;\">: {</span></span>\n<span class=\"line\"><span style=\"color: #657B83;\">					</span><span style=\"color: #859900;\">&quot;typography&quot;</span><span style=\"color: #657B83;\">: {</span></span>\n<span class=\"line\"><span style=\"color: #657B83;\">						</span><span style=\"color: #859900;\">&quot;textShadow&quot;</span><span style=\"color: #657B83;\">: </span><span style=\"color: #2AA198;\">&quot;none&quot;</span></span>\n<span class=\"line\"></span></code></pre></div>\n\n\n\n<p class=\"wp-block-paragraph\">More details in the Dev Note: <a href=\"https://make.wordpress.org/core/2026/07/23/text-shadow-support-in-global-styles/\">Text Shadow Support in Global Styles</a></p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"text-align-block-support-migration\">Text-Align Block Support Migration</h4>\n\n\n\n<p class=\"wp-block-paragraph\">Nine more core blocks (Post Date, Post Excerpt, Post Navigation Link, Post Title, Query Title, Site Tagline, Site Title, Pullquote and Term Name) now use WordPress&#8217;s standardized <a href=\"https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/#align\">text-align system</a>. As part of a larger <a href=\"https://github.com/WordPress/gutenberg/issues/60763\">migration effort</a> this update ensures consistent alignment controls across the editor and makes these blocks behave predictably alongside newer blocks. </p>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress EndUser are not supposed to see any changes and existing blocks continue to work. Theme designers are now able to style any of these blocks text align via theme.json property. The code example shows how to set the center as the site-wide TextAlign default. And `&#8221;textAlign&#8221;: false` disables the feature for this block </p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\"><span style=\"display: flex; padding: 10px 0px 0 16px; font-size: 0.8em; width: 100%; text-align: left; background-color: #FDF6E3; font-style: italic; color: #657B83;\"><span>JSON</span></span><span class=\"code-block-pro-copy-button\" style=\"color: #657B83; display: none;\" tabindex=\"0\"><pre class=\"code-block-pro-copy-button-pre\"><textarea class=\"code-block-pro-copy-button-textarea\" readonly=\"readonly\" tabindex=\"-1\">{\n	\"version\": 3,\n	\"styles\": {\n		\"blocks\": {\n			\"core/pullquote\": {\n				\"typography\": {\n					\"textAlign\": \"center\"\n				}\n			}\n		}\n	}\n}\n</textarea></pre><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"with-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path class=\"without-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></span><pre class=\"shiki solarized-light\" style=\"background-color: #FDF6E3;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #657B83;\">{</span></span>\n<span class=\"line\"><span style=\"color: #657B83;\">	</span><span style=\"color: #859900;\">&quot;version&quot;</span><span style=\"color: #657B83;\">: </span><span style=\"color: #D33682;\">3</span><span style=\"color: #657B83;\">,</span></span>\n<span class=\"line\"><span style=\"color: #657B83;\">	</span><span style=\"color: #859900;\">&quot;styles&quot;</span><span style=\"color: #657B83;\">: {</span></span>\n<span class=\"line\"><span style=\"color: #657B83;\">		</span><span style=\"color: #859900;\">&quot;blocks&quot;</span><span style=\"color: #657B83;\">: {</span></span>\n<span class=\"line\"><span style=\"color: #657B83;\">			</span><span style=\"color: #859900;\">&quot;core/pullquote&quot;</span><span style=\"color: #657B83;\">: {</span></span>\n<span class=\"line\"><span style=\"color: #657B83;\">				</span><span style=\"color: #859900;\">&quot;typography&quot;</span><span style=\"color: #657B83;\">: {</span></span>\n<span class=\"line\"><span style=\"color: #657B83;\">					</span><span style=\"color: #859900;\">&quot;textAlign&quot;</span><span style=\"color: #657B83;\">: </span><span style=\"color: #2AA198;\">&quot;center&quot;</span></span>\n<span class=\"line\"><span style=\"color: #657B83;\">				}</span></span>\n<span class=\"line\"><span style=\"color: #657B83;\">			}</span></span>\n<span class=\"line\"><span style=\"color: #657B83;\">		}</span></span>\n<span class=\"line\"><span style=\"color: #657B83;\">	}</span></span>\n<span class=\"line\"><span style=\"color: #657B83;\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"></span></code></pre></div>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"block-visibility\">Block Visibility</h4>\n\n\n\n<p class=\"wp-block-paragraph\">Adds <code>settings.blockVisibility.allowEditing</code> to theme.json, allowing themes to disable the block visibility feature entirely.</p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\"><span style=\"display: flex; padding: 10px 0px 0 16px; font-size: 0.8em; width: 100%; text-align: left; background-color: #FDF6E3; font-style: italic; color: #657B83;\"><span>JSON</span></span><span class=\"code-block-pro-copy-button\" style=\"color: #657B83; display: none;\" tabindex=\"0\"><pre class=\"code-block-pro-copy-button-pre\"><textarea class=\"code-block-pro-copy-button-textarea\" readonly=\"readonly\" tabindex=\"-1\">{\n  \"settings\": {\n    \"blockVisibility\": {\n      \"allowEditing\": false\n    }\n  }\n}\n</textarea></pre><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"with-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path class=\"without-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></span><pre class=\"shiki solarized-light\" style=\"background-color: #FDF6E3;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #657B83;\">{</span></span>\n<span class=\"line\"><span style=\"color: #657B83;\">  </span><span style=\"color: #859900;\">&quot;settings&quot;</span><span style=\"color: #657B83;\">: {</span></span>\n<span class=\"line\"><span style=\"color: #657B83;\">    </span><span style=\"color: #859900;\">&quot;blockVisibility&quot;</span><span style=\"color: #657B83;\">: {</span></span>\n<span class=\"line\"><span style=\"color: #657B83;\">      </span><span style=\"color: #859900;\">&quot;allowEditing&quot;</span><span style=\"color: #657B83;\">: </span><span style=\"color: #B58900;\">false</span></span>\n<span class=\"line\"><span style=\"color: #657B83;\">    }</span></span>\n<span class=\"line\"><span style=\"color: #657B83;\">  }</span></span>\n<span class=\"line\"><span style=\"color: #657B83;\">}</span></span>\n<span class=\"line\"></span></code></pre></div>\n\n\n\n<p class=\"wp-block-paragraph\">When set to false, the toolbar button and block options menu item are hidden. In this regard, it makes this block support consistent with color, typography etc.</p>\n\n\n\n<p class=\"wp-block-paragraph\">blockVisibility.allowEditing follows the layout flag. The reason is the two-fold nature of blockVisibility at the block supports level: a bool means don&#8217;t render the block at all, but viewport settings allow users to control visibility per viewport.</p>\n\n\n\n<p class=\"wp-block-paragraph\">The object shape also leaves the door open to extending block visibility to triggers, not only blockVisibility.viewports but others like post type or whatever. (<a href=\"https://github.com/WordPress/gutenberg/pull/76559\">76559</a>).</p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"block-supports-css-variables-by-feature-selector\">Block Supports: CSS variables by feature selector</h4>\n\n\n\n<p class=\"wp-block-paragraph\">Block Supports<a href=\"https://github.com/WordPress/gutenberg/pull/75226\"> now generates CSS custom properties</a> based on a block&#8217;s feature-specific selectors, not just its root selector. Some blocks—the Button block is the example given—define their outer wrapper and an inner styling target as different elements, and previously there was no way to output a preset variable (like a dimension size) onto that inner element specifically. Theme and plugin authors building design systems now have a way to target the right element per feature, without needing custom CSS to work around the mismatch.</p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"a-minimum-width-option-for-block-dimensions\">A minimum-width option for block dimensions</h4>\n\n\n\n<p class=\"wp-block-paragraph\">Blocks already supported height, minHeight, and width. What was missing was a way to stop something from shrinking too far—so a layout element wouldn&#8217;t collapse into an unusable sliver on a narrow screen. <a href=\"https://github.com/WordPress/gutenberg/pull/76949\">Minimum-width closes that gap</a>, mirroring how minimum-height already works.</p>\n\n\n\n<p class=\"wp-block-paragraph\">It&#8217;s opt-in at the block level: the control stays hidden in the inspector until a block explicitly enables it, though it shows by default in the global styles panel. Theme-defined dimension presets carry over automatically, so existing spacing scales just work. The Group block is the first to adopt it.</p>\n\n\n\n<p class=\"wp-block-paragraph\">You’ll find more details in the Dev Note <a href=\"https://make.wordpress.org/core/2026/07/26/new-block-support-in-wordpress-7-1-minimum-width/\">New Block Support in WordPress 7.1: Minimum Width</a></p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"design-system-theme-provider\">Design System Theme Provider </h3>\n\n\n\n<p class=\"wp-block-paragraph\">The first version of the design system’s theme component arrives in WordPress 7.1. It consists of standardized CSS custom properties that follow the W3C Design Tokens specification. You probably won&#8217;t spot the difference right away — the default theme was deliberately built to match existing styles — but this is the machinery that will power the admin color scheme in the Site Editor. You can read more details on the future direction in the <a href=\"https://make.wordpress.org/core/2026/07/07/merge-proposal-design-system-theming/\">Merge Proposal: Design System Theming</a> </p>\n\n\n\n<p class=\"wp-block-paragraph\">The Dev Note has more: <a href=\"https://make.wordpress.org/core/2026/07/31/design-system-theming-in-wordpress-7-1/\">Design System Theming in WordPress 7.1</a></p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"admin-color-schemes-in-site-editor\">Admin color schemes in Site Editor</h4>\n\n\n\n<p class=\"wp-block-paragraph\">The Site Editor&#8217;s sidebar and interface now respect your chosen WordPress admin color scheme instead of always showing a dark background. This brings visual consistency across the post editor, Site Editor, and admin dashboard. If you&#8217;ve personalized WordPress with a color scheme you prefer, that choice now carries through everywhere you work. <a href=\"https://github.com/WordPress/gutenberg/pull/78397\">78397</a></p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"mix-static-html-with-editable-blocks\">Mix static HTML with editable blocks</h3>\n\n\n\n<p class=\"wp-block-paragraph\">A new innerContent block support lets a block keep static HTML fragments interleaved with editable inner blocks as the canonical source of its own markup. In practice, this means a hand-written HTML structure can have just a piece of it—a paragraph, an image—editable in place, while the rest stays fixed and can&#8217;t be moved, removed, or rearranged.</p>\n\n\n\n<p class=\"wp-block-paragraph\">The Custom HTML block is the first adopter: pasting HTML with a block comment delimiter embedded in it (for example, a &lt;!&#8211; wp:paragraph &#8211;&gt; block inside a larger static &lt;div&gt;) makes that inner piece editable directly in the canvas, while the surrounding markup remains locked in place. It&#8217;s a narrow, developer-facing capability for now—the HTML block is the only place it&#8217;s wired up—but it opens the door for custom blocks to offer the same kind of &#8220;mostly static, partly editable&#8221; experience going forward. (<a href=\"https://github.com/WordPress/gutenberg/pull/79115\">79115</a>)</p>\n\n\n\n<p class=\"wp-block-paragraph\">The dev note can be found on the Make Core Blog: <a href=\"https://make.wordpress.org/core/2026/07/23/editable-blocks-inside-the-custom-html-block/\">Editable blocks inside the Custom HTML block</a> </p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"block-bindings-for-list-items-and-inner-blocks\">Block Bindings for list-items and inner blocks</h3>\n\n\n\n<p class=\"wp-block-paragraph\">The List Item block has gained Block Bindings support. A List Item&#8217;s content can now be connected to a data source—a custom field, a pattern override, or another registered source—so individual entries in a list can be populated dynamically rather than typed in by hand. The change <a href=\"https://github.com/WordPress/gutenberg/pull/78947\">registers content as a bindable attribute</a> for core/list-item.</p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https://github.com/WordPress/gutenberg/pull/79346\">A related fix rounds out the feature</a>: previously, if a bound List Item also contained a nested sub-list, that nested list was dropped when the binding was rendered. Now a List Item can carry a bound value and a nested list beneath it at the same time. In practice, this means multi-level lists—say, a team member&#8217;s name pulled from a custom field, with a nested list of their current projects underneath—can now be fully dynamic without losing structure.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Tracking: <a href=\"https://github.com/WordPress/gutenberg/issues/77199\">Block Bindings in WordPress 7.1</a> (#77199)</p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"connectors-authentication-improvements\">Connectors authentication improvements</h3>\n\n\n\n<p class=\"wp-block-paragraph\">The Connectors framework, which manages WordPress&#8217;s connections to external services like AI providers, now supports username and application password authentication as an alternative to API keys. A <a href=\"https://github.com/WordPress/gutenberg/pull/79403\">merged pull request</a> adds a default connector form for this method, along with the underlying authentication type, mirroring the equivalent API already available in WordPress Core.</p>\n\n\n\n<p class=\"wp-block-paragraph\">The change also handles the practical details: saved passwords are masked in the UI and over REST, credentials can be set via constants or environment variables instead of the database, and a <a href=\"https://github.com/WordPress/wordpress-develop/pull/12264\">companion Core patch</a> keeps the two in sync. For connectors that require an account login rather than a bare API key, this removes the need for a custom settings screen.</p>\n\n\n\n<p class=\"wp-block-paragraph\">This lands alongside a broader <a href=\"https://github.com/WordPress/gutenberg/issues/78647\">open proposal for a PHP-side field registry</a> that would let connector authors declare arbitrary settings—model choice, temperature, custom URLs, and more—the way register_setting() works elsewhere in WordPress. That registry isn&#8217;t built yet; the application password work is a first, concrete step (new auth method, not new field types), addressing one of the two gaps the proposal identified rather than the full vision.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Tracking: <a href=\"https://github.com/WordPress/gutenberg/issues/78647\">Connectors: proposal for a PHP-side field registry for connector configuration</a> (#78647)</p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"blocks-package-stabilizes-two-experimental-functions\">Blocks package stabilizes two experimental functions</h3>\n\n\n\n<p class=\"wp-block-paragraph\">The <a href=\"https://github.com/WordPress/gutenberg/pull/79928\">Blocks package stabilizes</a> cloneSanitizedBlock and sanitizeBlockAttributes, dropping their __experimental prefixes now that the functions have been stable in practice for some time. The old __experimental-prefixed names still work but will log a deprecation notice, so plugins or themes importing them directly should switch to the new names.</p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"post-author-notifications-the-filter-decides\">Post author notifications: the filter decides</h3>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>notify_post_author</code> filter <a href=\"https://make.wordpress.org/core/2026/08/05/the-notify_post_author-filter-now-has-the-final-say-on-post-author-notifications/\">now has the final say</a>: approval status is checked before the filter runs, so it receives an accurate default and returning <code>true</code> reliably sends a notification — even for unapproved comments. Sites forcing notifications with <code>__return_true</code> should switch to a callback that checks approval, or they&#8217;ll start receiving emails for spam and moderated comments. (<a href=\"https://core.trac.wordpress.org/ticket/64217\">#64217</a>). More Details can be found in the Dev note <a href=\"https://make.wordpress.org/core/2026/08/05/the-notify_post_author-filter-now-has-the-final-say-on-post-author-notifications/\">The notify_post_author filter now has the final say on post author notifications</a></p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"accessible-tooltips-and-toggle-tips-api\">Accessible tooltips and toggle tips API</h3>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress adds a core mechanism for accessible tooltips (<a href=\"https://core.trac.wordpress.org/ticket/51006\">51006</a>), offering an alternative to the title attribute, which is not available to keyboard and touch users. Two new functions cover different use cases: wp_get_tooltip() exposes an accessible name when a control has focus or hover, such as for icon-only buttons, and wp_get_toggletip() implements a popover disclosure with extended help information that stays open until dismissed. Both generate accessible markup that avoids excess verbosity for screen readers and follows best practices for voice command users.</p>\n\n\n\n<p class=\"wp-block-paragraph\">The first toggle tip in core explains the &#8220;Remember Me&#8221; option on the login screen (<a href=\"https://core.trac.wordpress.org/ticket/55343\">55343</a>). Plugin developers can use the functions for their own settings screens and metaboxes. (<a href=\"https://core.trac.wordpress.org/changeset/62741\">62741</a>). </p>\n\n\n\n<p class=\"wp-block-paragraph\">Dev Note is now available with the details: <a href=\"https://make.wordpress.org/core/2026/08/03/introducing-name-and-informational-tool-tips-in-wordpress-7-1/\">Introducing name and informational tool tips in WordPress 7.1</a></p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img alt=\"\" class=\"wp-image-46367\" height=\"434\" src=\"https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2026/07/Tooltip-API-wp-7-1-edited.png?resize=652%2C434&#038;ssl=1\" width=\"652\" /></figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"filtering-site-editor-screens\">Filtering Site Editor screens</h3>\n\n\n\n<p class=\"wp-block-paragraph\">Plugin developers can now configure the Site Editor&#8217;s Pages, Templates, Template Parts, and Patterns screens through four new PHP filters — one per screen. Each filter adjusts the DataViews and DataForm components powering these screens: the default view (layout, sort order, visible fields), the layouts available to users, the preconfigured views in the sidebar such as &#8220;All&#8221; or &#8220;Drafts,&#8221; and the fields shown in the Quick Edit form. </p>\n\n\n\n<p class=\"wp-block-paragraph\">This creates a single place of configuration per entity, with more screens — including the editor inspector — planned to draw from the same source in future releases (<a href=\"https://github.com/WordPress/gutenberg/issues/76544\">#76544</a>). Code examples are in the Dev Note: <a href=\"https://make.wordpress.org/core/2026/07/31/filtering-site-editor-screens-in-wordpress-7-1/\">Filtering Site Editor Screens in WordPress 7.1.</a></p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"post-list-table-markup-changed-for-accessibility\">Post list table markup changed for accessibility</h3>\n\n\n\n<p class=\"wp-block-paragraph\">An eleven-year-old accessibility ticket is resolved: in post list tables, the row header (<code>th scope=\"row\"</code>) moves from the checkbox column to the title column, so screen readers identify each row by the post&#8217;s name rather than by a checkbox that may not even be present. (<a href=\"https://core.trac.wordpress.org/ticket/32892\">#32892</a>). </p>\n\n\n\n<p class=\"wp-block-paragraph\">Extenders should check their CSS and JavaScript: selectors like <code>th.check-column</code> or ones expecting the title and row actions inside a <code>td</code> need updating. The dev note <a href=\"https://make.wordpress.org/core/2026/08/03/post-list-tables-row-headers-changed/\">Post list tables row headers changed</a> lists the affected patterns, and keeping both <code>td</code> and <code>th</code> selectors preserves compatibility with older WordPress versions. </p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n\n<p class=\"wp-block-paragraph\">A list of <a href=\"https://make.wordpress.org/core/tag/dev-notes+7-1/\">all the dev notes can be reviewed from the Make Core blog</a></p>\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Thu, 30 Jul 2026 13:51:54 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:18:\"Birgit Pauli-Haack\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:20;a:6:{s:4:\"data\";s:21:\"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:79:\"Open Channels FM: Why Open Source Projects Need a License Before They Need Code\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:34:\"https://openchannels.fm/?p=2556844\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:86:\"https://openchannels.fm/why-open-source-projects-need-a-license-before-they-need-code/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:212:\"Open source fosters creativity but involves complex issues like licensing and ownership, especially in hackathons. Proper planning with appropriate licenses upfront is crucial for project success and flexibility.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Thu, 30 Jul 2026 13:35:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:8:\"Bob Dunn\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:21;a:6:{s:4:\"data\";s:21:\"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:37:\"Open Channels FM: Signal – Issue 18\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:34:\"https://openchannels.fm/?p=2557496\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:40:\"https://openchannels.fm/signal-issue-18/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:188:\"Talk about personal journeys in web development, the complexities of fame, and the benefits of open source, emphasizing enriching content options for listeners beyond traditional podcasts.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 29 Jul 2026 17:54:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:8:\"Bob Dunn\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:22;a:6:{s:4:\"data\";s:21:\"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:40:\"WordPress.org blog: WordPress 7.1 Beta 4\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://wordpress.org/news/?p=21243\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:56:\"https://wordpress.org/news/2026/07/wordpress-7-1-beta-4/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:6493:\"<p class=\"wp-block-paragraph\">WordPress 7.1 Beta 4 is ready for download and testing! </p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>This beta release is intended for testing and development</strong> only. Please do not install, run, or test this version of WordPress on production or mission-critical websites. Instead, use a test environment or local site to explore the new features.</p>\n\n\n\n<h2 class=\"wp-block-heading\">How to Test WordPress 7.1 Beta 4</h2>\n\n\n\n<p class=\"wp-block-paragraph\">You can test WordPress 7.1 Beta 4 in any of the following ways:</p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>WordPress Beta Tester Plugin</strong></td><td>Install and activate the <a href=\"https://wordpress.org/plugins/wordpress-beta-tester/\" rel=\"noreferrer noopener\" target=\"_blank\">WordPress Beta Tester</a> plugin on a WordPress install. Select the “Bleeding edge” channel and “Beta/RC Only” stream.</td></tr><tr><td><strong>Direct Download</strong></td><td>Download the <a href=\"https://wordpress.org/wordpress-7.1-beta4.zip\">Beta 4 version (zip)</a> and install it on a WordPress website.</td></tr><tr><td><strong>Command Line (WP-CLI)</strong></td><td>Use this <a href=\"https://make.wordpress.org/cli/\" rel=\"noreferrer noopener\" target=\"_blank\">WP-CLI</a> command: <br /><code>wp core update --version=7.1-beta4</code></td></tr><tr><td><strong>WordPress Playground</strong></td><td>Use a <a href=\"https://playground.wordpress.net/?site-slug=kind-classic-mountain&amp;networking=no&amp;php=8.3&amp;wp=beta&amp;language=&amp;multisite=no\" rel=\"noopener\" target=\"_blank\">7.1 Beta 4 WordPress Playground instance</a> to test the software directly in your browser. No setup required-just click and go!</td></tr></tbody></table></figure>\n\n\n\n<p class=\"wp-block-paragraph\">The scheduled final release date for WordPress 7.1 is <strong>August 19, 2026</strong>. The full <a href=\"https://make.wordpress.org/core/2026/07/03/wordpress-7-1-release-party-schedule/\">release schedule can be found here</a>. Your help testing Beta and RC versions is vital to making this release as stable and powerful as possible. Thank you to everyone who contributes by testing!</p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Find out what’s new in WordPress 7.1</strong>: Read the <a href=\"https://wordpress.org/news/2026/07/wordpress-7-1-beta-1/\">Beta 1 announcement</a> for details and highlights.</p>\n\n\n\n<h2 class=\"wp-block-heading\">How important is your testing?</h2>\n\n\n\n<p class=\"wp-block-paragraph\">Testing for issues is a critical part of developing any software, and it’s a meaningful way for anyone to contribute – whether or not you have experience. <a href=\"https://make.wordpress.org/test/2026/07/15/help-test-wordpress-7-1/\">Details on what to test in WordPress 7.1 are available here</a>.</p>\n\n\n\n<p class=\"wp-block-paragraph\">If you encounter an issue, please share it in the <a href=\"https://wordpress.org/support/forum/alphabeta/\" rel=\"noopener\" target=\"_blank\">Alpha/Beta area</a> of the support forums. If you are comfortable submitting a reproducible bug report, you can do so <a href=\"https://core.trac.wordpress.org/newticket\" rel=\"noopener\" target=\"_blank\">via WordPress Trac</a>. You can also check your issue against this list of <a href=\"https://core.trac.wordpress.org/tickets/major\" rel=\"noopener\" target=\"_blank\">known bugs</a>.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Curious about testing releases in general and how to get started? Follow along with the<a href=\"https://make.wordpress.org/test/\"> testing initiatives in Make Core</a> and join the <a href=\"https://wordpress.slack.com/messages/core-test/\">#core-test channel</a> on <a href=\"https://wordpress.slack.com/\">Making WordPress Slack</a>.</p>\n\n\n\n<h2 class=\"wp-block-heading\">What’s in WordPress 7.1 Beta 4?</h2>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress 7.1 Beta 4 contains more than <strong>114</strong> updates and fixes since the Beta 3 release, including <strong>51</strong> in the Editor and <strong>63</strong> in Core. </p>\n\n\n\n<p class=\"wp-block-paragraph\">Each beta cycle focuses on bug fixes, and more are on the way with your help through testing. You can browse the technical details for all issues addressed since Beta 3 using these links:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https://github.com/WordPress/gutenberg/commits/wp/7.1?since=2026-07-22&amp;until=2026-07-29\" rel=\"noopener\" target=\"_blank\">GitHub commits for 7.1</a>  since July 22, 2026</li>\n\n\n\n<li><a href=\"https://core.trac.wordpress.org/query?status=closed&amp;changetime=07%2F22%2F2026..07%2F29%2F2026&amp;milestone=7.1&amp;col=id&amp;col=milestone&amp;col=owner&amp;col=type&amp;col=priority&amp;order=id\" rel=\"noopener\" target=\"_blank\">Closed Trac tickets for 7.1</a> since July 22, 2026</li>\n</ul>\n\n\n\n<p class=\"wp-block-paragraph\">Beta 4 brings a round of fixes that make the editor smoother to work with. Notes now stay reliably tied to the passage they refer to, and tagged people are displayed cleanly and clearly.</p>\n\n\n\n<h2 class=\"wp-block-heading\">A Beta 4 haiku</h2>\n\n\n\n<p class=\"wp-block-paragraph\">Testers lend their eyes,<br />edge cases hide in plain sight—<br />Patch, rebuild, refine.</p>\n\n\n\n<p class=\"has-text-align-right wp-block-paragraph\"><em>Props to <a class=\"mention\" href=\"https://profiles.wordpress.org/krupajnanda/\"><span class=\"mentions-prefix\">@</span>krupajnanda</a> for preparing this post and <a class=\"mention\" href=\"https://profiles.wordpress.org/annezazu/\"><span class=\"mentions-prefix\">@</span>annezazu</a>, <a class=\"mention\" href=\"https://profiles.wordpress.org/wildworks/\"><span class=\"mentions-prefix\">@</span>wildworks</a>, <a class=\"mention\" href=\"https://profiles.wordpress.org/amykamala/\"><span class=\"mentions-prefix\">@</span>amykamala</a> for proofreading and review.</em></p>\n\n\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image size-large has-custom-border\"><a href=\"https://us.wordcamp.org/2026/\" rel=\" noopener\" target=\"_blank\"><img alt=\"WordCamp US: Powered by WordPress, Driven by Community, August 16-19, 2026\" class=\"wp-image-20859\" height=\"321\" src=\"https://i0.wp.com/wordpress.org/news/files/2026/06/wcus-2026-teaser.png?resize=1024%2C321&#038;ssl=1\" width=\"1024\" /></a><figcaption class=\"wp-element-caption\">Join us for the launch of WordPress 7.1 at <a href=\"https://us.wordcamp.org/2026/\">WordCamp US 2026</a>, August 16–19.</figcaption></figure>\n</div>\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 29 Jul 2026 15:30:58 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:17:\"Benjamin Zekavica\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:23;a:6:{s:4:\"data\";s:21:\"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:107:\"WPTavern: #227 – Maciek Palmowski on Testing Secure WordPress Hosting: Does the Marketing Match Reality?\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:48:\"https://wptavern.com/?post_type=podcast&p=206791\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:118:\"https://wptavern.com/podcast/227-maciek-palmowski-on-testing-secure-wordpress-hosting-does-the-marketing-match-reality\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:50326:\"<details>Transcript<div>\n<p class=\"wp-block-paragraph\">[00:00:19] <strong>Nathan Wrigley:</strong> Welcome to the Jukebox Podcast from WP Tavern. My name is Nathan Wrigley.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Jukebox is a podcast which is dedicated to all things WordPress. The people, the events, the plugins, the blocks, the themes, and in this case, testing secure WordPress hosting, does the marketing match the reality?</p>\n\n\n\n<p class=\"wp-block-paragraph\">If you&#8217;d like to subscribe to the podcast, you can do that by searching for WP Tavern in your podcast player of choice, or by going to wptavern.com/feed/podcast, and you can copy that URL into most podcast players.</p>\n\n\n\n<p class=\"wp-block-paragraph\">If you have a topic that you&#8217;d like us to feature on the podcast, I&#8217;m keen to hear from you and hopefully get you, or your idea, featured on the show. Head to wptavern.com/contact/jukebox, and use the form there.</p>\n\n\n\n<p class=\"wp-block-paragraph\">So on the podcast today we have Maciek Palmowski. Maciek is based in Poland and works at Patchstack, one of the companies in the WordPress ecosystem dedicated specifically to security. At Patchstack, Maciek collaborates with other security professionals on industry reports, bug bounty programmes, and solutions for agencies, product owners, and hosting companies aiming to secure their client sites.</p>\n\n\n\n<p class=\"wp-block-paragraph\">I met up with Maciek at WordCamp Europe, and we discussed his presentation there. It examined the claims of secure hosting made by many WordPress hosting providers. He describes how Patchstack set out to test these claims with real world penetration testing, using 30 known plugin vulnerabilities across multiple hosts. Employing standardised methodologies and validating their results independently.</p>\n\n\n\n<p class=\"wp-block-paragraph\">The findings are sobering. The majority of WordPress specific attacks still get through, and there&#8217;s a significant gap between the marketing hype and real protection.</p>\n\n\n\n<p class=\"wp-block-paragraph\">The conversation starts with Maciek&#8217;s background, and how his journey in the WordPress security space led to a focus on the promises made by hosts.</p>\n\n\n\n<p class=\"wp-block-paragraph\">From there, the discussion gets into the research approach, the selection of well-known vulnerabilities, consistent testing across different hosting environments, and the surprising result that even hosts with identical security tooling produce drastically different outcomes, showing it&#8217;s not just about the tools you use, but how you use them.</p>\n\n\n\n<p class=\"wp-block-paragraph\">We talk about the Swiss cheese model of security, every layer will have holes, so you need multiple overlapping defences, and honest communication from hosts about their limitations.</p>\n\n\n\n<p class=\"wp-block-paragraph\">We also explored whether an industry-wide standard, or badge, for secure hosting is feasible or even desirable, given how easy it is for strong marketing claims to outpace reality.</p>\n\n\n\n<p class=\"wp-block-paragraph\">AI also enters the conversation, increasing both the speed and sophistication of attacks, and making patching, and processes, even more important, especially as the volume of vulnerabilities continues to rise and the time to exploitation drops.</p>\n\n\n\n<p class=\"wp-block-paragraph\">If you&#8217;re interested in understanding what secure hosting really means, how to ask intelligent questions of providers, and the realities of WordPress security in 2026, this episode is for you.</p>\n\n\n\n<p class=\"wp-block-paragraph\">If you&#8217;d like to find out more, you can find all of the links in the show notes by heading to wptavern.com/podcast, where you&#8217;ll find all the other episodes as well.</p>\n\n\n\n<p class=\"wp-block-paragraph\">And so without further delay, I bring you Maciek Palmowski.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:03:56] <strong>Maciek Palmowski:</strong> I am joined on the podcast by Maciek Palmowski. Hello Maciek.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Perfect. You did great.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:04:01] <strong>Nathan Wrigley:</strong> For some reason, your name has got into my head. A lot of the people that I interview, I struggle with their name, and I continue to struggle, but for some reason, I established many years ago that was how to say your name. And I think I&#8217;ve done it correctly ever since then.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:04:16] <strong>Maciek Palmowski:</strong> Yes you did. You&#8217;re almost having the typical Polish accent, so you&#8217;re doing great.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:04:21] <strong>Nathan Wrigley:</strong> So we are at WordCamp Europe, which is in Krakow, or Krakow, I don&#8217;t know how.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:04:26] <strong>Maciek Palmowski:</strong> Krakow.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:04:27] <strong>Nathan Wrigley:</strong> Thank you, that was good. And the reason Maciek is correcting my pronunciation is because Maciek is actually from Poland, which I suppose means that this is a bit of a, well, it&#8217;s like a home game to you.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:04:37] <strong>Maciek Palmowski:</strong> In a way so, but it&#8217;s also like a bit of a shame because I do like travelling when WordCamp Europe&#8217;s are happening. And, you know, just hopping on the train and going to Krakow, it was like a, I mean it&#8217;s cool because, yeah, the venue&#8217;s amazing, everything is great, but still I&#8217;m staying home, so yeah.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:04:53] <strong>Nathan Wrigley:</strong> Yeah, mixed feelings. So Maciek has done, or is going to do a presentation at WordCamp EU. Have you done it yet?</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:05:02] <strong>Maciek Palmowski:</strong> I will do it tomorrow.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:05:04] <strong>Nathan Wrigley:</strong> Okay. And are you all set, are you one of these like really prepared people that has all the slides done, or are you last minute?</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:05:11] <strong>Maciek Palmowski:</strong> Everything is ready. I already did one version of it at the Checkout Summit in Palermo, so.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:05:17] <strong>Nathan Wrigley:</strong> Oh I see. So you&#8217;ve had a sort of dry run of elsewhere.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:05:19] <strong>Maciek Palmowski:</strong> Of course.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:05:20] <strong>Nathan Wrigley:</strong> Excellent. So the presentation, which is going to be the focus of today&#8217;s conversation, is called Testing the promise, does secure hosting deliver? And I may as well read the blurb because it was a reasonably short one.</p>\n\n\n\n<p class=\"wp-block-paragraph\">So it says, secure hosting, in quotes, is everywhere in WordPress. What does it actually protect against? We put this claim to the test with real penetration testing. 30 known vulnerabilities, multiple hosting providers, standardised methodology, validated by independent observers. The findings reveal a critical gap between marketing and reality. WordPress specific attacks succeed most of the time. That&#8217;s quite an alarming sentence. This talk shares the complete results and explains why generic security fails.</p>\n\n\n\n<p class=\"wp-block-paragraph\">So, we&#8217;ll get into that in a moment. But as with all people, when I&#8217;m talking to them about security, I guess it&#8217;s good to establish who you are, and what your credentials are and what you&#8217;ve done, and how is it that you get to talk about security with authority. So over to you really, a little moment to give us your bio and tell us about you.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:06:20] <strong>Maciek Palmowski:</strong> Okay. So I work at Patchstack, and Patchstack is one of those few companies in WordPress space that are doing a lot in terms of security. We are constantly running this bug bounty for the whole ecosystem. We have quite a few solutions for both clients and hosting companies, and I work there right now. My role is, if I remember, the Growth Team Engineer, something like this.</p>\n\n\n\n<p class=\"wp-block-paragraph\">But yeah, I do spend a lot of time working with other security people. So when we are working on all the reports, when we are checking the data, I&#8217;m also part of those teams that are working on it. So yeah, I think I know a thing or two about what is happening behind the scenes when it comes to WordPress security.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:07:02] <strong>Nathan Wrigley:</strong> Yeah, thank you. Always good to get that established though, right at the outset.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Patchstack is a company which is not a host though, I suppose that&#8217;s important to mention at the beginning. It&#8217;s a company which is in the security space, very much in the WordPress space, but perhaps more broad than WordPress, I&#8217;m not sure. But not a hosting company.</p>\n\n\n\n<p class=\"wp-block-paragraph\">But obviously your presentation focuses its aim on hosting, I guess because that&#8217;s one of the places where the claim about security is most often made. You know, you&#8217;ll go to a, the landing page of hosting Company X, and you&#8217;ll see somewhere fairly near the top, secure hosting, or something along those lines. And you&#8217;ve decided to examine that in fine detail and look at these 30 vulnerabilities.</p>\n\n\n\n<p class=\"wp-block-paragraph\">I guess really just tell us about this test and what it is that you decided to do and some of the items that came out of that.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:07:50] <strong>Maciek Palmowski:</strong> Okay, so maybe let&#8217;s start with how it even started, right? Because there was a trigger. At some point we published one report about the state of WordPress security. We tweeted about this. We got the response from none other than Matt Mullenweg, who kind of asked a very interesting question, but isn&#8217;t hosting companies taking care of this already?</p>\n\n\n\n<p class=\"wp-block-paragraph\">And this was, kind of at this moment when we were, we thought that we know the answer that, no they aren&#8217;t. But to be honest, we didn&#8217;t have any broader proof about this.</p>\n\n\n\n<p class=\"wp-block-paragraph\">We knew how it&#8217;s working at some hosting companies, but we could say that it was more of an anecdotal evidence that we had. So this was kind of the trigger that made us, okay, let&#8217;s check this. But not with one partner or two partners, but with more hosting companies.</p>\n\n\n\n<p class=\"wp-block-paragraph\">So we did this research twice. First we just did kind of a beta run because we weren&#8217;t sure about the result and, is it even a good idea to go deeper inside of it? And during our first run, we were already very surprised because like the methodology was very simple. We just installed vulnerable plugins and we checked if we would be able to use the vulnerability. Because if the hosting is claiming that, we got your back, we are making your website secure, we have this and that, this means that they should protect against it. So it was as simple as that.</p>\n\n\n\n<p class=\"wp-block-paragraph\">And when we were doing our first test, we were quite surprised because we saw, if I remember, that 80% of the attacks went through. 80% of the attacks. So our first reaction was, okay, we are doing something wrong. Okay, this was only few hosting companies, less plugins, but still the result were so surprising for us because we thought that, okay, that the problem exists, but it&#8217;s not that big of a problem. But it was.</p>\n\n\n\n<p class=\"wp-block-paragraph\">So that&#8217;s why we did the second test. And this is about which the, my talk will be mostly when we tested more hosting companies, more plugins. And we saw that the problem still exists.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Of course it was, in some cases 70 few percent. So still, it&#8217;s a huge problem, especially if we are talking about some companies that are literally saying, you don&#8217;t have to install anything additional when it comes to security on your website. We got your back. They don&#8217;t. We found a lot of interesting things, but still the problem exists.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:10:21] <strong>Nathan Wrigley:</strong> So just deep diving into that a little bit, when tests like this are done, there&#8217;s obviously, the claim might be levelled, you know, obviously Patchstack would, this kind of maybe benefits Patchstack, if you know what I mean.</p>\n\n\n\n<p class=\"wp-block-paragraph\">So let&#8217;s just sort of clear up what the test involved. So presumably the plugins that you chose are ones where it&#8217;s publicly known that there&#8217;s a vulnerability in this component or this particular file or what have you. So is that the case? This is stuff that, longstanding understanding that there&#8217;s a problem here.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:10:51] <strong>Maciek Palmowski:</strong> Yes. We only use the plugins that we had all the proof of concepts. So we know how have the vulnerability happened, what was the attack vector? They were all reported through our bug bounty programme, because that&#8217;s why we had the proof of concept. Yeah, and that&#8217;s it.</p>\n\n\n\n<p class=\"wp-block-paragraph\">It was, like I said, it was as simple as that. We had a really broad mix of all the plugins. How many? It was 30 something of those plugins, if I remember. Different ones. Some were connected with WooCommerce. So, like a very broad selection of them. Different vulnerability types. So we try to mix it up as much as possible.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:11:27] <strong>Nathan Wrigley:</strong> Was the situation for each hosting company the same though? In other words, was the things that you did in one hosting environment the exact same as you did in another hosting environment? No. You mixed that up a bit as well.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:11:38] <strong>Maciek Palmowski:</strong> I mean we used all the same plugins, like the methodology was always the same. But we got totally different results. Even if, and this was one of the most interesting findings, because very often hostings will put a logo of some company that takes care of security. For example, say, Cloudflare. And despite using the same stack for security, they got different results.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:12:02] <strong>Nathan Wrigley:</strong> Interesting.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:12:03] <strong>Maciek Palmowski:</strong> So it turns out, in many cases, it&#8217;s not about the tools that you are using, it&#8217;s how you are using them, which was very interesting. And we did everything. We tried to enable every feature, every security features on those hosting, to kind of give them a chance to kind of make sure that they are defending the most as they can.</p>\n\n\n\n<p class=\"wp-block-paragraph\">And the result in most cases was very simple. They were doing quite well with the generic ones like uploads, patch reversal, things like this, which are very generic in PHP. But with those WordPress specific attacks, they just failed miserably.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:12:44] <strong>Nathan Wrigley:</strong> That&#8217;s so interesting. The word secure hosting, which you&#8217;ll see all over the place, it feels a bit like using the word healthy on food. There&#8217;s no real definition of what healthy is. You know, a company selling chocolate could probably pretend that it&#8217;s healthy compared to something else.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:13:04] <strong>Maciek Palmowski:</strong> Like here, healthy chocolate is exactly, like in some cases secure hosting.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:13:07] <strong>Nathan Wrigley:</strong> Right. So what do you take from this then? I mean basically, is your survey saying that whenever you see the word secure hosting, be sceptical?</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:13:16] <strong>Maciek Palmowski:</strong> Yes.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:13:16] <strong>Nathan Wrigley:</strong> Okay. As simple as that.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:13:18] <strong>Maciek Palmowski:</strong> It&#8217;s as simple as that. Because one of the things that we were always promoting, security is not a plugin, it&#8217;s not a one button thing. Security is a process. It&#8217;s layers.</p>\n\n\n\n<p class=\"wp-block-paragraph\">And that&#8217;s kind of why we, especially after this report starting kind of using the term, Swiss cheese layer model. Because every layer will fail in some way. That&#8217;s also why you still need all the security solutions that hosting provides, because they do have a lot of interesting solutions against those generic attacks.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Because they&#8217;re doing really great when it comes to those generic ones. And that&#8217;s great because some of the attacks will be already dealt with. So whatever passes to the second layer, it has less work to do because a lot of it was already stopped at the first layer. The second layer should be something more WordPress specific that understand what is installed. And with this it can catch also a lot of it.</p>\n\n\n\n<p class=\"wp-block-paragraph\">But still, you have to be prepared that, because again, this layer also isn&#8217;t perfect. Because there are zero days vulnerabilities, there are custom code, there are a lot of things that can happen, that your website will be hacked. I mean, weak password. Simple as that. That&#8217;s why you also need to have a layer, which will be more of what to do if everything else fails. Because you do need to know that you have to inform your clients, all the GDPR related things. How to kind of, I don&#8217;t know, use the backups.</p>\n\n\n\n<p class=\"wp-block-paragraph\">In short you need to have procedures. You have to be prepared before the attack happens. Because let&#8217;s be honest, asking some lawyers about, what should we send to our clients? The moment when, well, the milk is already spilled. It&#8217;s like the worst moment to think about it. Especially that, hey, your website was just hacked. It&#8217;s not just a technical problem, it&#8217;s also a business problem. Again, with those GDPRs and everything.</p>\n\n\n\n<p class=\"wp-block-paragraph\">So yeah, the more layers, the better. You still need to remember, every layer can fail in some place. That&#8217;s why the more, the better.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:15:29] <strong>Nathan Wrigley:</strong> Would you like to see a standard industry-wide definition of something like a badge or, I don&#8217;t know, let&#8217;s say for example, that you put the word secure hosting on your website, that has to actually stand for something.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Because obviously coming from the background that you do with a broad oversight on what that is, you have a vast amount of data at your disposal. You can see all of this kind of stuff. But every company can make the claim that our food is healthy, our hosting is secure. But I don&#8217;t know, in the model that we&#8217;ve got where any company can put anything they like on a website, I don&#8217;t really know how you do that, but some sort of accreditation or something. I don&#8217;t know.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:16:08] <strong>Maciek Palmowski:</strong> Honestly, it&#8217;s really difficult because as I said before, a lot of companies using the same tools were failing in different ways. So that&#8217;s a problem. On the other hand, like sometimes the, those stupid things like weak passwords. And it doesn&#8217;t matter that you had a, let&#8217;s call it a certified secure hosting, you still failed because your password was weak, you know? So, also certificates like this can backfire because some people might think I have a secure hosting, I don&#8217;t have to worry about things. And then you have 10 admin accounts for everyone.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:16:43] <strong>Nathan Wrigley:</strong> Is there is there something, some mark of that description that you, personally, that you go looking for though? Is there some credentialing system which you think actually does carry some weight? So for example, I don&#8217;t know, like the insurance space or the accountancy space or something like that. You have to have that accreditation in order to do business. Is there something like that? Is there a mark which hosting companies can apply for which you could have some confidence in it?</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:17:13] <strong>Maciek Palmowski:</strong> Okay. So for sure one of those things would be, and I don&#8217;t want to say it as an advertisement, but it is a thing that you see that the hosting is thinking a bit better about security, kind of looking if they are a Patchstack partner. Because this kind of automatically means that they do have this WordPress, the security WordPress layer. So that&#8217;s already a good sign.</p>\n\n\n\n<p class=\"wp-block-paragraph\">So yeah, I would start with this. I think that&#8217;s kind of one of the simplest ways, but again, Patchstack isn&#8217;t the only solution that does it. So looking for partners of such companies might be the best way to start because having those Patchstack aware security solutions built in, into the hosting is a really good sign.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:18:05] <strong>Nathan Wrigley:</strong> Yeah, okay. Now, the inevitable conversation in the year 2026 is AI. It doesn&#8217;t matter which area of WordPress you&#8217;re talking about. AI manages to get in somewhere. I am presuming that the landscape in terms of security only got more complicated because of AI. Because I&#8217;m imagining that attacks that needed to be conceived by a human can now be conceived in a fraction of the time by an AI agent. But not just one, maybe a dozen or a thousand or whatever it may be.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Let&#8217;s just talk about that for a moment. It feels almost as if AI and security are like, that&#8217;s a real systemic problem for the future of the entire industry. Because these things can happen so fast, a plugin vulnerability is discovered by an AI agent. It then discovers the attack surface, implements the attack all in a matter of seconds, possibly. What&#8217;s the position? Like, how do we stay calm basically in the year 2026?</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:19:09] <strong>Maciek Palmowski:</strong> So the problem already existed around a year ago, because a year ago when we did our State of WordPress Security Report, we already saw that vulnerabilities are being used after around five hours after kind of being published. So five hours. That&#8217;s the first thing, because we still have a lot of people that say, yeah, just update your WordPress weekly and you&#8217;re good to go. No, you&#8217;re not. Looking at this number, you have five hours.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:19:39] <strong>Nathan Wrigley:</strong> Okay. Let&#8217;s just parse that at the moment. So the vulnerability is published. So there&#8217;s a whole thing there, like the vulnerability may well have been discovered prior to being published, so that&#8217;s a whole other thing.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:19:52] <strong>Maciek Palmowski:</strong> So first the vulnerability is discovered. Then at least how it works on, with our bug bounty. We inform the vendor they have, let&#8217;s say around a month to fix it. When they fix it, we publish everything and, yeah.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:20:09] <strong>Nathan Wrigley:</strong> Okay, so from the moment you publish, you can then detect that that is being leveraged within a space of five hours.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:20:17] <strong>Maciek Palmowski:</strong> Yes.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:20:17] <strong>Nathan Wrigley:</strong> Okay, that&#8217;s really interesting.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:20:19] <strong>Maciek Palmowski:</strong> But there is a problem. There is a really big problem. So if the vendor doesn&#8217;t respond, we still publish it.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:20:26] <strong>Nathan Wrigley:</strong> How long do you give them? Is it like.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:20:27] <strong>Maciek Palmowski:</strong> It is the one month.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:20:28] <strong>Nathan Wrigley:</strong> Okay, thirty days.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:20:30] <strong>Maciek Palmowski:</strong> Of course, if they reach out that there is some problem, they need like extra days. But in most cases, we&#8217;re talking about the vendors that just don&#8217;t respond at all. We publish it anyway.</p>\n\n\n\n<p class=\"wp-block-paragraph\">But the problem is that, from all the vulnerabilities that were discovered last year, 50% weren&#8217;t patched at the moment of publishing about it. 50%.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:20:50] <strong>Nathan Wrigley:</strong> So half of the plugins where there was a known vulnerability, the vendor had been informed, they&#8217;d had this 30 day window. Half of them made no amendment to their code.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:21:01] <strong>Maciek Palmowski:</strong> Exactly.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:21:02] <strong>Nathan Wrigley:</strong> Okay. Wow, okay.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:21:03] <strong>Maciek Palmowski:</strong> Again, going back to this classical, yeah, just update your WordPress regularly. No.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:21:08] <strong>Nathan Wrigley:</strong> No, that&#8217;s a really different surface, isn&#8217;t it?</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:21:11] <strong>Maciek Palmowski:</strong> It doesn&#8217;t work on so many levels. Because not only the problem is with the fact that, still the famous five hours, which also, it&#8217;s five hours now. It was much longer a few years ago. On the other hand, yeah, most of those, I mean around half of it aren&#8217;t patched, so the attacks will happen quicker than it get patched. So yeah, there is a lot of problems like this. And also the problem with security is that it&#8217;s really difficult to sell.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:21:39] <strong>Nathan Wrigley:</strong> It&#8217;s like insurance, isn&#8217;t it?</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:21:40] <strong>Maciek Palmowski:</strong> Yeah. But insurance, okay, you see your car, your house, it&#8217;s real. It&#8217;s real, you kind of see it. The only category of websites that it&#8217;s much easier to kind of explain is e-commerce.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:21:54] <strong>Nathan Wrigley:</strong> Yes. You can feel the tightening on your wallet.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:21:56] <strong>Maciek Palmowski:</strong> They literally see the money. They can kind of really, okay, one hour of my website not working equals this and this Złotys or Euros or whatever. So that&#8217;s easier to explain. But for most people, yeah, security, meh.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:22:11] <strong>Nathan Wrigley:</strong> Yeah. That&#8217;s really interesting. So you mentioned, about this survey, you mentioned that fully 80% of your penetration testing resulted in something. What were the sort of, the high level items? Apart from that 80% figure. What were some of the other, because you said there were a few interesting things that dropped out of it. Can you mention anything else?</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:22:31] <strong>Maciek Palmowski:</strong> So like I said, one of the things was that we learned that, despite using the same tools, we got different results. That was also a surprise for us.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:22:39] <strong>Nathan Wrigley:</strong> So let&#8217;s just figure that out. So at hosting company A, we&#8217;ve got a WordPress website with the same collection of plugins in. Hosting company B, exactly the same as far as you can make it the same, but things are different.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:22:52] <strong>Maciek Palmowski:</strong> No, no, they are, for example, they&#8217;re using for security the same tools.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:22:56] <strong>Nathan Wrigley:</strong> Right, okay.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:22:57] <strong>Maciek Palmowski:</strong> So in theory, if they&#8217;re using the same tools, we should have exactly the same results.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:23:03] <strong>Nathan Wrigley:</strong> So does that then point to a different set of configurations on the backend, or is it more curious than that? You just don&#8217;t quite know what&#8217;s going on.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:23:12] <strong>Maciek Palmowski:</strong> I mean because it&#8217;s not something that they will tell us. But yeah, in most cases, it&#8217;s all about configuration because the fact that you&#8217;re using a tool, it&#8217;s also important how you use a tool.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Also, with security is very often about, is something easy to use or is something secure? And kind of finding the balance. So some of the companies probably had a bit more aggressive configuration, which is better from the security point of view, but probably more often result in some annoying side effects for the user.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Also what, this was one of the most interesting things, but also what was very interesting because we contacted every company afterwards and we informed them that we did the test. Here are the results, what went through, what was blocked. And some of the companies did an amazing job of fixing whatever they could. On the other hand, we saw that some of the companies, because we did some extra tests later just to check what they did with our report, did nothing.</p>\n\n\n\n<p class=\"wp-block-paragraph\">That&#8217;s one of the things about security in general, not about the hosting, about even having vulnerability in your plugin. That&#8217;s normal that we make mistakes. We&#8217;re humans, right? So that&#8217;s normal. What&#8217;s important is how we deal with them. If you have a problem and you fix it as quickly as possible, as good as possible, that&#8217;s great because you learn from your mistakes, you fix it, and you move on. Perfect. Good job. Now you are in a much better position than before. But if you get this, you look at it and you say, ah, this is fine, that&#8217;s the worst behaviour from the security point of view that you can have.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:24:57] <strong>Nathan Wrigley:</strong> I&#8217;m going to ask you not to name names here, but were some of the companies familiar to us?</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:25:05] <strong>Maciek Palmowski:</strong> For sure, because we did test the biggest ones. But there is a reason why we didn&#8217;t want to name them, and it wasn&#8217;t about that we were afraid that I know someone will get mad or whatever. It was more about this weird side effect that could happen.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Some users would think, my hosting isn&#8217;t on this list, so probably I&#8217;m secure. Probably you&#8217;re not, you just weren&#8217;t in the test. Because we also did some site checks and everything. And we saw that a lot of those problems happen at most of the hosting companies. And like I said, the more important part was how did they reacted after getting the report. Like I said, it was a more common problem that we even thought.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:25:43] <strong>Nathan Wrigley:</strong> Do you, obviously, you know, caveat all of this with the fact that you work for Patchstack and what have you, do you see it even as the role of a hosting company to have any position on security publicly? Or would you prefer them not to make grand claims about things that you believe they can&#8217;t necessarily substantiate?</p>\n\n\n\n<p class=\"wp-block-paragraph\">I don&#8217;t really know where I&#8217;m going with that question, but I&#8217;m just wondering if there&#8217;s just a sense that the language that&#8217;s being used is too strong. You know, secure hosting implies we&#8217;ve got all the padlocks, and the padlocks are there and you&#8217;ve got nothing to worry about. You&#8217;ve found a different picture. So I&#8217;m just wondering whether or not you would just prefer that the hosting companies stop talking about this altogether.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:26:27] <strong>Maciek Palmowski:</strong> I do think that&#8217;s, one of the biggest problem here is about the claims, the bold claims, the whole marketing around it. Sometimes even you can find documentation of some of them that, yeah, you don&#8217;t need to install any third party tool because we got you covered. We checked it, no they didn&#8217;t. So that&#8217;s kind of the problem.</p>\n\n\n\n<p class=\"wp-block-paragraph\">It&#8217;s really more about the, how they market it. If they would say, okay, so we have a really performant hosting that does this, this and this. When it comes to security, kind of do it yourself. I mean we are providing this layer, but the rest is up to you. And that&#8217;s okay. That&#8217;s an honest claim. We are not doing everything for you. We are doing this part, but this is up to you. This would be much better.</p>\n\n\n\n<p class=\"wp-block-paragraph\">I know that from the marketing point of view, it doesn&#8217;t sound as good as, we got all the security that you can imagine, don&#8217;t have to worry about this. Because that&#8217;s kind of the thing that very often managed hosts trying to sell, that you don&#8217;t have to worry about things. You just have to focus on whatever you have, writing content, selling stuff. If you have a e-commerce, whatever, that&#8217;s it. That&#8217;s kind of the only thing you should think of. Not about performance, because we got your back. Not about security, again, we got your back. And if you are paying for a managed hosting and suddenly they would start having like this different way of messaging to, it&#8217;s not that obvious that we have your back in everything. That would be very difficult for them.</p>\n\n\n\n<p class=\"wp-block-paragraph\">So now it&#8217;s kind of the problem that, because everyone is kind of using this messaging, everyone else also has to. And also if we think about how a lot of those algorithms, look like that algorithms love bold claims. They want something white or black, not grey. And the truth is, most of the things we are talking about, it doesn&#8217;t matter, security, SEO performance, it&#8217;s everything in the grey zone. That&#8217;s why a lot of developers can end their talk with, yeah, it depends. There is no right or wrong. It depends because there are so many things you have to think about.</p>\n\n\n\n<p class=\"wp-block-paragraph\">I could say that, and this is my kind of thing that, most of the websites that people have should be static. They don&#8217;t need even WordPress at all. This is a horrible claim if you&#8217;re a manager of a WordPress hosting, right? So that&#8217;s the thing. But it all depends on so many things, but yeah, the messaging is important.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:29:08] <strong>Nathan Wrigley:</strong> Yeah, if you were, on a personal level, if you were going out there looking and let&#8217;s say, if you can somehow put your job hat to one side, what would be the kind of things that you would be looking for? What questions would you be asking related to security if you were to be going to these companies?</p>\n\n\n\n<p class=\"wp-block-paragraph\">From everything that you said, obviously it&#8217;s not black, it&#8217;s not white, it&#8217;s definitely grey. So every setup has some way of being vulnerable. But what are the kind of intelligent questions that you would be bringing to hosts to get some reassurance that at least they appear to know what they&#8217;re doing, even if they can&#8217;t make the claim that they&#8217;re a hundred percent cast iron, water tight? What might be some intelligent questions to start asking?</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:29:49] <strong>Maciek Palmowski:</strong> One of the best questions you can ask is just, is there any solution in your security stack that is WordPress aware? Not the general one. Because if they only start talking about some web firewall, things like this, it&#8217;s already kind of a red flag. Because this is, overall, if we&#8217;re talking about firewalls, that&#8217;s not the correct layer about which, this is the generic one.</p>\n\n\n\n<p class=\"wp-block-paragraph\">So this is the main question. How do you take care of WordPress specific attacks? Simple question. And if they will start responding, yeah, that we have this web application firewall that, in most cases this will be a sign that, no, we are not talking about the correct layer. That&#8217;s not it. It&#8217;s probably not aware about what is happening in WordPress.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:30:40] <strong>Nathan Wrigley:</strong> Okay. So given that this is a WordPress podcast, and we are at a WordPress event, that would be the beginning of your questioning is demonstrate that something in your stack is specific to WordPress.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:30:52] <strong>Maciek Palmowski:</strong> Exactly.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:30:53] <strong>Nathan Wrigley:</strong> Okay. And beyond that, is there any questions that, so let&#8217;s imagine that they come back with, yes, we have something specific, it&#8217;s WordPress. What would be sort of sensible follow up questions?</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:31:00] <strong>Maciek Palmowski:</strong> I mean you can kind of start off about, okay, what exactly you are using? Because there is a limited amount of tools that are really WordPress aware. So if they will answer with kind of a product name, that&#8217;s kind of the easy way that then you can check it on your own. But that&#8217;s kind of the thing. Is it WordPress aware?</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:31:19] <strong>Nathan Wrigley:</strong> Does it worry you in some way that there&#8217;s this perception out there that WordPress is insecure? You know, if you ask a thousand people, you&#8217;d maybe get 800 saying, oh WordPress, you know, we&#8217;re not touching that with a barge pole.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Do you worry that content like this, that you are putting out, that that might fuel that fire? Does it concern you in any way that it might lean into the argument that, I don&#8217;t know, somebody can link to that blog post from a rival CMS, or a SaaS platform, which does something similar to WordPress? Where do you sit on that?</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:31:51] <strong>Maciek Palmowski:</strong> That&#8217;s a really difficult question. And this is one of the questions that when I talk on non WordPress events, I love to ask people. Is WordPress secure? And in most cases, I see that most of the room is, yes, it&#8217;s unsecure for sure. And I&#8217;m like, no, that&#8217;s not true. WordPress is secure. Every year there is just a few minor vulnerabilities in Core. That&#8217;s it. The problem is, of course, that WordPress on its own lacks some functionality. That&#8217;s why we install plugins.</p>\n\n\n\n<p class=\"wp-block-paragraph\">And here we enter another problem because, okay, every year we have like thousands of those vulnerabilities in general in plugins. On the other hand, we have thousands of plugins. So kind of statistics will always look bad. But that&#8217;s why every time when you want to select a new plugin, you need to do some research. Yeah, I know it&#8217;s boring and everything but, hey, now we have AI, you can do it much quicker. It can help you a lot.</p>\n\n\n\n<p class=\"wp-block-paragraph\">But looking at all those databases, for example, we have one database, WPScan has. There are those databases of WordPress vulnerabilities that occur to every plugin. And you can see, is the plugin you&#8217;re interested in had a lot of vulnerabilities? On the other hand, how it kind of looked historically. It&#8217;s not just about the number of them. In general, it requires some research.</p>\n\n\n\n<p class=\"wp-block-paragraph\">And yeah, if we are just like looking at this, and this kind of vibe that right now we have that we are just about really bold opinions stated quickly that will fit one TikTok, yeah, WordPress is in a horrible position because, let&#8217;s be honest, it&#8217;s like, if you have, I&#8217;m not sure how many seconds does a TikTok movie has?</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:33:39] <strong>Nathan Wrigley:</strong> I think 30.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:33:40] <strong>Maciek Palmowski:</strong> Okay, let&#8217;s say 30. So it will sound much better that you will say, yeah, WordPress is unsecure, which is not entirely true because it depends again. One of the most boring, especially again for those algorithms and everything, it&#8217;s a grey zone.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Because we are collaborating with a lot of companies that are making plugins, and we see how their security flow looks like. How they are dealing with vulnerabilies that are discovered. And honestly, I&#8217;m amazed how well some of those companies are doing it. They are very serious about it. They understand how important it is. For them it&#8217;s something very important.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:34:22] <strong>Nathan Wrigley:</strong> I suppose WordPress is a victim of its own success in that sense. And it would be a bit like, I guess a good analogy might be if you&#8217;ve got a car manufacturer and they produce a thousand cars a year and you compare them to Ford who make, let&#8217;s say, I don&#8217;t know, 20 million a year. And the question is, well, whose cars break down more often?</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:34:41] <strong>Maciek Palmowski:</strong> Yeah. Do we look at the percentage of the number?</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:34:44] <strong>Nathan Wrigley:</strong> Right. And if you say, well, 400,000 Fords broke down last year, and one of these other manufacturer, you can immediately see why there&#8217;s a problem there. And that I think is the landscape in which WordPress is often painted. The reason there&#8217;s lots of publications like yours bringing out WordPress information is because it&#8217;s the most popular thing. It makes sense to write about the most popular thing and to try to find the vulnerabilities and disclose them in a sensible way. So I don&#8217;t know what we do with that. It is just the way it is.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:35:15] <strong>Maciek Palmowski:</strong> I would also say there is one more interesting aspect because WordPress is considered unsecure because of the plugins. But what&#8217;s funny, for example, Elementor is also considered unsecure because there are plugins for Elementor. This is a very weird moment when the thing that brought WordPress to its bigger success, security wise, is its biggest problem right now.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Because WordPress did a lot of, I mean it was always great to, being as it&#8217;s kind of, let&#8217;s call it entry level CMS. For many people, it was also the way how they began the adventure with PHP development because it was so easy. Now we kind of have the, all the consequences of being that easy.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:36:06] <strong>Nathan Wrigley:</strong> Yeah, in a sense, this is going to sound ridiculous, we should be glad that there&#8217;s people talking about WordPress vulnerabilities, because it means the project is successful. And it also means that it&#8217;s, there&#8217;s an industry of WordPress security solutions, and there are people who take this very seriously and dedicate their lives to it. And you may not find that in some of these other ones, you know, some of the smaller CMSs and things like that.</p>\n\n\n\n<p class=\"wp-block-paragraph\">I think we&#8217;ve probably hit about the sweet spot for the amount of time. But Maciek, I don&#8217;t know if there was anything in that report that you have got lined up in your presentation that I never got to. If there was a particular thread that you wanted to pull. If there is, go for it.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:36:46] <strong>Maciek Palmowski:</strong> No, I think we covered all the important things. And as you kind of said, this AI aspect, this will change so many things.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:36:55] <strong>Nathan Wrigley:</strong> Yeah, we&#8217;ll come back in two years and this conversation will be a very different thing.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:36:57] <strong>Maciek Palmowski:</strong> Oh, I think even in few months which will be very interesting. Yeah, so this aspect, it&#8217;s really very surprising. And I think that everyone who is right now kind of giving somewhere a talk about AI and security is in a very difficult spot because.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:37:14] <strong>Nathan Wrigley:</strong> Yeah, your content is going to look stale quickly.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:37:16] <strong>Maciek Palmowski:</strong> Yeah because you know it&#8217;s like, but a week ago everything changed. Yeah, I have to rewrite everything.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:37:20] <strong>Nathan Wrigley:</strong> Speaking of which, by the time that this goes out, hopefully you have managed to give out your presentation at WordCamp Europe. I will link to it and anything else that we&#8217;ve mentioned today in the WP Tavern post. So go and check that out. But I will specifically link to the wordpress.tv version of your presentation, which no doubt will have been created by then. So Maciek, thank you for chatting to me today. Good luck. I hope presentation goes well.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:37:43] <strong>Maciek Palmowski:</strong> Thank you. Thank you so much. Yes. I might need a bit because, you know, it&#8217;s WordCamp Europe. It&#8217;s a big conference.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:37:49] <strong>Nathan Wrigley:</strong> It is, yeah. Good luck. I hope that you manage to stay calm.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:37:52] <strong>Maciek Palmowski:</strong> Thank you.</p>\n</div></details>\n\n\n\n<p class=\"wp-block-paragraph\">On the podcast today we have <a href=\"https://www.linkedin.com/in/maciekpalmowski/\">Maciek Palmowski</a>.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Maciek is based in Poland and works at <a href=\"https://patchstack.com\">Patchstack</a>, one of the companies in the WordPress ecosystem dedicated specifically to security. At Patchstack, Maciek collaborates with other security professionals on industry reports, bug bounty programs, and solutions for agencies, product owners, and hosting companies aiming to secure their client sites.</p>\n\n\n\n<p class=\"wp-block-paragraph\">I met up with Maciek at WordCamp Europe in Kraków, and we discussed his presentation there. It examined the claims of “secure hosting” made by many WordPress hosting providers. He describes how Patchstack set out to test these claims with real-world penetration testing, using 30 known plugin vulnerabilities across multiple hosts, employing standardised methodologies, and validating their results independently. The findings are sobering. The majority of WordPress-specific attacks still get through, and there’s a significant gap between the marketing hype and real protection.</p>\n\n\n\n<p class=\"wp-block-paragraph\">The conversation starts with Maciek’s background and how his journey in the WordPress security space led to a focus on the promises made by hosts. From there, the discussion gets into the research approach: the selection of well-known vulnerabilities, consistent testing across different hosting environments, and the surprising result that even hosts with identical security tooling produced drastically different outcomes, showing it’s not just about what tools you use, but how you use them.</p>\n\n\n\n<p class=\"wp-block-paragraph\">We talk about the “Swiss cheese” model of security, every layer will have holes, so you need multiple, overlapping defenses, and honest communication from hosts about their limitations. We also explored whether an industry-wide standard or badge for “secure hosting” is feasible or even desirable, given how easy it is for strong marketing claims to outpace reality.</p>\n\n\n\n<p class=\"wp-block-paragraph\">AI also enters the conversation, increasing both the speed and sophistication of attacks, and making patching and processes even more important, especially as the volume of vulnerabilities continues to rise and the time to exploitation drops.</p>\n\n\n\n<p class=\"wp-block-paragraph\">If you’re interested in understanding what “secure hosting” really means, how to ask intelligent questions of providers, and the realities of WordPress security in 2026, this episode is for you.</p>\n\n\n\n<h2 class=\"wp-block-heading\">Useful links</h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https://patchstack.com\">Patchstack</a></p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https://checkoutsummit.com\"> Checkout Summit</a></p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https://europe.wordcamp.org/2026/session/testing-the-promise-does-secure-hosting-deliver/\">Testing the promise: does secure hosting deliver?</a> &#8211; Maciek&#8217;s presentation at WordCamp Europe 2026. It includes the video of the presentation.</p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https://patchstack.com/whitepaper/state-of-wordpress-security-in-2026/\"> State of WordPress Security in 2026 Report</a></p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https://wpscan.com\">WPScan</a></p>\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 29 Jul 2026 13:00:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:14:\"Nathan Wrigley\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:24;a:6:{s:4:\"data\";s:21:\"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:85:\"Open Channels FM: Navigating Client Expectations in the Age of AI-Assisted Web Design\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:34:\"https://openchannels.fm/?p=2557092\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:92:\"https://openchannels.fm/navigating-client-expectations-in-the-age-of-ai-assisted-web-design/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:224:\"The growing use of AI tools is reshaping web design, as clients increasingly present AI-generated content. Education and proactive communication are essential for web professionals to navigate these complexities effectively.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 29 Jul 2026 12:49:58 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:8:\"Bob Dunn\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:25;a:6:{s:4:\"data\";s:21:\"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:90:\"Open Channels FM: Fame Then and Now – How the Internet Changed What It Means to Be Known\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:34:\"https://openchannels.fm/?p=2557615\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:93:\"https://openchannels.fm/fame-then-and-now-how-the-internet-changed-what-it-means-to-be-known/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:132:\"Bob and Nathan dissect fame, revealing it’s often more a glorious prison than a prize, making anonymity sound downright luxurious.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 29 Jul 2026 10:39:34 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:8:\"Bob Dunn\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:26;a:6:{s:4:\"data\";s:21:\"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:81:\"Open Channels FM: Leading Tech Firms Unite to Form Open Source Secure AI Alliance\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:34:\"https://openchannels.fm/?p=2557661\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:88:\"https://openchannels.fm/leading-tech-firms-unite-to-form-open-source-secure-ai-alliance/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:122:\"Today\'s top story. NVIDIA announces the formation of the Open Source Secure AI Alliance, a coalition of over 40 companies.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 29 Jul 2026 10:11:44 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:8:\"Bob Dunn\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:27;a:6:{s:4:\"data\";s:21:\"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:82:\"Open Channels FM: A Journey Back to Enjoying Web Development and Personal Blogging\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:34:\"https://openchannels.fm/?p=2557646\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:89:\"https://openchannels.fm/a-journey-back-to-enjoying-web-development-and-personal-blogging/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:195:\"In this episode, Bob and Simon discuss the creative ups and downs of building personal websites, overcoming perfectionism, and finding joy in fun coding projects as part of the indie web journey.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 29 Jul 2026 06:08:19 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:8:\"Bob Dunn\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:28;a:6:{s:4:\"data\";s:21:\"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:77:\"Open Channels FM: Why Real-Time Threat Detection Matters for Website Security\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:34:\"https://openchannels.fm/?p=2557083\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:84:\"https://openchannels.fm/why-real-time-threat-detection-matters-for-website-security/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:359:\"Much of the conversation around web security centers on preventative measures and layers of defense, but there’s a new front line that deserves focused attention: real-time threat detection at the runtime level. With attacks now happening faster and at greater scale thanks to AI, the ability to identify and block malicious activity as it unfolds [&#8230;]\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 28 Jul 2026 15:38:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:8:\"Bob Dunn\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:29;a:6:{s:4:\"data\";s:21:\"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:98:\"Open Channels FM: AI Bots Now Dominate Web Traffic and Court Sides Against Google in Scraping Case\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:34:\"https://openchannels.fm/?p=2557527\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:105:\"https://openchannels.fm/ai-bots-now-dominate-web-traffic-and-court-sides-against-google-in-scraping-case/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:222:\"Automated bots now dominate web traffic, outnumbering humans, significantly impacting ad models. In legal news, SERPAPI won a court case against Google\'s web scraping efforts. Tech mourns icons Om Malik and John C. Dvorak.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 28 Jul 2026 07:24:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:8:\"Bob Dunn\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:30;a:6:{s:4:\"data\";s:21:\"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:19:\"Matt: How ISO Works\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:23:\"https://ma.tt/?p=153694\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:36:\"https://ma.tt/2026/07/how-iso-works/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:457:\"<p class=\"wp-block-paragraph\">Inspired by Om I&#8217;ve been getting back into my DSLR photography. I learned a lot about how ISO settings work from <a href=\"https://www.youtube.com/@MinutePhysics\">this delightful physics YouTube channel MinutePhysics</a>.</p>\n\n\n\n<figure class=\"wp-block-embed alignwide is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n\n</div></figure>\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Sun, 26 Jul 2026 00:08:33 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:4:\"Matt\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:31;a:6:{s:4:\"data\";s:21:\"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:116:\"Gutenberg Times: WordPress 7.1 Beta 3, AI in Action at #WCUS, Playground UI testing and more — Weekend Edition 370\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://gutenbergtimes.com/?p=46166\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:120:\"https://gutenbergtimes.com/wordpress-7-1-beta-3-ai-in-action-at-wcus-playground-ui-testing-and-more-weekend-edition-370/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:23259:\"<p class=\"wp-block-paragraph\">Hi,</p>\n\n\n\n<p class=\"wp-block-paragraph\">After a few month dealing with a bad knee and a bad back, I enjoy moving again. As long as the weather is nice, I will be biking, swimming and walking the city with all the tourists that populate downtown Munich. </p>\n\n\n\n<p class=\"wp-block-paragraph\">From an SEO veteran&#8217;s surprisingly upbeat take on WordPress market share to a one-file answer to &#8220;what makes a block theme,&#8221; this week&#8217;s finds dig a little deeper than the usual headlines. There&#8217;s also plenty of hands-on material, whether you want to test 7.1 Beta 3, try the new Playground UI, or get your store ready for agentic commerce.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Enjoy your weekend! </p>\n\n\n\n<p class=\"wp-block-paragraph\">Yours, <img alt=\"💕\" class=\"wp-smiley\" src=\"https://s.w.org/images/core/emoji/17.0.2/72x72/1f495.png\" style=\"height: 1em;\" /><br /><em>Birgit</em></p>\n\n\n\n\n\n<h2 class=\"wp-block-heading\" id=\"wcus-2026-has-a-dedicated-ai-track-the-ai-in-action-sessions-are-built-around-the-questions-site-builders-are-actually-sitting-with-right-now-how-do-you-set-guardrails-for-ai-assisted-development-without-losing-client-trust-how-do-you-build-sites-that-serve-ai-agents-as-visitors-not-just-humans-what-are-the-legal-and-ethical-boundaries-when-you-put-ai-tools-in-front-of-clients\"><strong>WCUS 2026 has a dedicated AI track </strong></h2>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"wcus-2026-has-a-dedicated-ai-track-the-ai-in-action-sessions-are-built-around-the-questions-site-builders-are-actually-sitting-with-right-now-how-do-you-set-guardrails-for-ai-assisted-development-without-losing-client-trust-how-do-you-build-sites-that-serve-ai-agents-as-visitors-not-just-humans-what-are-the-legal-and-ethical-boundaries-when-you-put-ai-tools-in-front-of-clients\">The AI in Action sessions are built around the questions site builders are actually sitting with right now. How do you set guardrails for AI-assisted development without losing client trust? How do you build sites that serve AI agents as visitors, not just humans? What are the legal and ethical boundaries when you put AI tools in front of clients?</p>\n\n\n\n<p class=\"wp-block-paragraph\">They’re practical sessions for developers navigating a workspace that changed faster than anyone planned for. <a href=\"https://us.wordcamp.org/2026/schedule/\">The full schedule is live</a>. If you’re figuring out how AI changes your pricing, your workflow, or your service model, this is a rare room to be in. </p>\n\n\n\n<p class=\"wp-block-paragraph\">August 16–19, Phoenix Convention Center. $100 includes four days, all sessions, lunch, and the community social.<br /><img alt=\"🎟\" class=\"wp-smiley\" src=\"https://s.w.org/images/core/emoji/17.0.2/72x72/1f39f.png\" style=\"height: 1em;\" /> <a href=\"https://href.li/?https://us.wordcamp.org/2026/tickets/\" rel=\"noopener\" target=\"_blank\">us.wordcamp.org/2026/tickets</a></p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https://us.wordcamp.org/2026/tickets\"><img alt=\"WordCamp US 2026\" class=\"wp-image-46239\" height=\"256\" src=\"https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2026/07/Screenshot-2026-07-24-at-16.11.31.png?resize=652%2C256&#038;ssl=1\" width=\"652\" /></a></figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"0-word-press-release-information\">Developing Gutenberg and WordPress</h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https://wordpress.org/news/2026/07/wordpress-7-1-beta-3/\"><strong>WordPress 7.1 Beta 3</strong></a> is now available for testing. </p>\n\n\n\n<p class=\"wp-block-paragraph\">Rae Morey, The Repository, has the news <a href=\"https://www.therepository.email/wordpress-7-1-beta-3-now-available-punts-unicode-email-support-over-security-concerns\"><strong>WordPress 7.1 Beta 3 Now Available, Punts Unicode Email Support Over Security Concerns</strong></a></p>\n\n\n\n<p class=\"wp-block-paragraph\">Contribute by <a href=\"https://make.wordpress.org/test/2026/07/15/help-test-wordpress-7-1/\"><strong>Help Test WordPress 7.1</strong></a> and learn deeply how the new features and blocks work. It&#8217;s a very impactful way to contribute to the open-source project that powers hundreds of millions of websites. </p>\n\n\n\n<p class=\"wp-block-paragraph\">Quite a few Dev notes made it out of the publishing queue this week: </p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https://make.wordpress.org/core/2026/07/23/text-shadow-support-in-global-styles/\">Text Shadow Support in Global Styles</a></li>\n\n\n\n<li><a href=\"https://make.wordpress.org/core/2026/07/23/editor-components-updates-in-wordpress-7-1/\">Editor components updates in WordPress 7.1</a></li>\n\n\n\n<li><a href=\"https://make.wordpress.org/core/2026/07/23/editable-blocks-inside-the-custom-html-block/\">Editable blocks inside the Custom HTML block</a></li>\n\n\n\n<li><a href=\"https://make.wordpress.org/core/2026/07/24/react-19-punted-beyond-wordpress-7-1-experiment-in-gutenberg/\">React 19: punted beyond WordPress 7.1, experiment in Gutenberg</a></li>\n\n\n\n<li><a href=\"https://make.wordpress.org/core/2026/07/24/registering-and-rendering-svg-icons-in-wordpress-7-1/\">Registering and rendering SVG icons in WordPress 7.1</a></li>\n</ul>\n\n\n\n<div class=\"wp-block-group has-light-background-background-color has-background\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<p class=\"wp-block-paragraph\"><img alt=\"🎙\" class=\"wp-smiley\" src=\"https://s.w.org/images/core/emoji/17.0.2/72x72/1f399.png\" style=\"height: 1em;\" /> The latest episode is <a href=\"https://gutenbergtimes.com/podcast/gutenberg-changelog-133-gutenberg-23-6-release-and-wordpress-7-1/\">Gutenberg Changelog #133 – Gutenberg 23.6 Release and WordPress 7.1</a></p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img alt=\"\" class=\"wp-image-46424\" height=\"186\" src=\"https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2026/08/Screenshot-2026-07-31-at-13.13.07.png?resize=652%2C186&#038;ssl=1\" width=\"652\" /></figure>\n\n\n<div class=\"wp-block-newsletterglue-showhide ng-block\" width=\"100%\">\n<figure class=\"wp-block-embed is-type-rich is-provider-pocket-casts wp-block-embed-pocket-casts\"><div class=\"wp-block-embed__wrapper\">\n\n</div></figure>\n</div></div></div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"0-p\">Plugins, Themes, and Tools for #nocode site builders and owners</h2>\n\n\n\n<p class=\"wp-block-paragraph\">On the WordPress.com blog, <strong>Joe Fylan</strong> explains <a href=\"https://wordpress.com/blog/2026/07/10/what-is-agentic-commerce/\"><strong>what agentic commerce means for your store</strong></a>. AI assistants that discover, compare, and buy products on a shopper&#8217;s behalf. You&#8217;ll get an overview of where  the big AI tools stand on in-chat checkout, plus reassurance that small stores can win with verifiable facts. Fylan&#8217;s checklist for getting ready: clear product descriptions, structured data, and making sure your robots.txt isn&#8217;t blocking the agents you want.</p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Dave Smith</strong>, core committer and Gutenberg contributor,  thinks <a href=\"https://www.youtube.com/watch?v=PIyNUmX7sFc\">WordPress has a homepage problem — and he built a better version</a> to prove it. In his video, he walks you through why setting a static homepage trips up so many beginners, then demos a prototype exploring a simpler, clearer approach. You can <a href=\"https://getdave.github.io/rsm-editor-prototype\">try the live demo</a> yourself in the browser. Smith wants to know if the direction resonates, so drop your homepage struggles in the video&#8217;s comments.</p>\n\n\n<div class=\"wp-block-newsletterglue-showhide ng-block\" width=\"100%\">\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n\n</div></figure>\n</div>\n\n\n<h2 class=\"wp-block-heading\" id=\"2-word-press-6-0-1-and-6-1-scheduled\">Theme Development for Full Site Editing and Blocks</h2>\n\n\n\n<p class=\"wp-block-paragraph\">In episode 226 of the WP Tavern Jukebox podcast, <strong>Nathan Wrigley </strong>talks with <strong>Jessica Lyschik</strong> about <a href=\"https://wptavern.com/podcast/226-jessica-lyschik-on-why-accessibility-in-wordpress-themes-is-easier-than-you-think\">why accessibility in WordPress themes is easier than you think</a>. Fresh from her WordCamp Europe 2026 <a href=\"https://wordpress.tv/2026/06/05/accessibility-in-themes-easier-than-you-think/\">talk,</a> Lyschik walks you through the recently updated accessibility-ready requirements, quick wins like correct HTML tags, alt text, and skip links, and why block themes make much of this effortless because Core handles it. The insight: AI agents navigate your site like screen readers do.</p>\n\n\n<div class=\"wp-block-newsletterglue-showhide ng-block\" width=\"100%\">\n<figure class=\"wp-block-embed is-type-rich is-provider-pocket-casts wp-block-embed-pocket-casts\"><div class=\"wp-block-embed__wrapper\">\n\n</div></figure>\n</div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ryan Welcher </strong>digs into <a href=\"https://gutenbergtimes.com/how-wordpress-decides-a-theme-is-a-block-theme/\"><strong>how WordPress decides a theme is a &#8220;block theme&#8221;</strong></a> — and the answer might surprise you. It all comes down to one file: <code>templates/index.html</code> exists, or it doesn&#8217;t. Neither theme.json nor patterns flip the switch, which is why Astra, Kadence, and Blocksy all still test classic. </p>\n\n\n<div class=\"ng-block-0de6ebe6e719443e wp-block-newsletterglue-container ng-block\" style=\"color: #666666;\" width=\"100%\"><div><div><div class=\"ng-block-vs ng-block-vs-1\" colspan=\"3\" height=\"0\" style=\"height: 0px;\"></div></div><div><div class=\"ng-block-hs ng-block-hs-1\" height=\"0\" style=\"width: 0px;\"></div><div align=\"none\" class=\"ng-block-td\" style=\"font-size: 16px; font-family: Helvetica; line-height: 1.6; font-weight: normal; padding-top: 20px; padding-bottom: 20px; padding-left: 0px; padding-right: 0px; text-align: none; color: #666666; background-color: #fdfcea; border-radius: 12px;\"><div class=\"ng-block-58c1b8b6dd798ecc wp-block-newsletterglue-text ng-block\" style=\"color: #666666;\" width=\"100%\"><div><div><div align=\"none\" class=\"ng-block-td\" style=\"font-size: 16px; font-family: Helvetica; line-height: 1.6; font-weight: normal; padding-top: 8px; padding-bottom: 10px; padding-left: 20px; padding-right: 20px; text-align: none; color: #666666;\"><p><strong> <a href=\"https://make.wordpress.org/core/handbook/references/keeping-up-with-gutenberg-index/\" rel=\"noreferrer noopener\" target=\"_blank\">&#8220;Keeping up with Gutenberg &#8211; Index 2026&#8221;</a> </strong><br />A chronological list of the WordPress Make Blog posts from various teams involved in Gutenberg development: Design, Theme Review Team, Core Editor, Core JS, Core CSS, Test, and Meta team from Jan. 2024 on. Updated by yours truly. </p></div></div></div></div>\n\n<div class=\"ng-block-0b37023c5576594c wp-block-newsletterglue-text ng-block\" style=\"color: #666666;\" width=\"100%\"><div><div><div align=\"none\" class=\"ng-block-td\" style=\"font-size: 16px; font-family: Helvetica; line-height: 1.6; font-weight: normal; padding-top: 8px; padding-bottom: 10px; padding-left: 20px; padding-right: 20px; text-align: none; color: #666666;\"><p>The previous years are also available: <br /><strong><strong><a href=\"https://make.wordpress.org/core/handbook/references/keeping-up-with-gutenberg-index/keeping-up-with-gutenberg-index-2020/\">2020</a> | <a href=\"https://make.wordpress.org/core/handbook/references/keeping-up-with-gutenberg-index/keeping-up-with-gutenberg-index-2021/\">2021</a></strong> | <strong><a href=\"https://make.wordpress.org/core/handbook/references/keeping-up-with-gutenberg-index/keeping-up-with-gutenberg-index-2022/\">2022</a></strong></strong> | <strong><a href=\"https://make.wordpress.org/core/handbook/references/keeping-up-with-gutenberg-index/gutenberg-index-2023\">2023</a></strong> | <a href=\"https://make.wordpress.org/core/handbook/references/keeping-up-with-gutenberg-index/gutenberg-index-2024/\"><strong>2024</strong></a> | <strong><a href=\"https://make.wordpress.org/core/handbook/references/keeping-up-with-gutenberg-index/gutenberg-index-2025/\">2025</a></strong></p></div></div></div></div></div><div class=\"ng-block-hs ng-block-hs-2\" height=\"0\" style=\"width: 0px;\"></div></div><div><div class=\"ng-block-vs ng-block-vs-2\" colspan=\"3\" height=\"0\" style=\"height: 0px;\"></div></div></div></div>\n\n\n<h2 class=\"wp-block-heading\" id=\"3-building-themes-for-fse-and-word-press\">Building Blocks and Tools for the Block editor</h2>\n\n\n\n<p class=\"wp-block-paragraph\">In episode 477 of the WP Builds podcast, <strong>Nathan Wrigley</strong> talks with <strong>Olly Campion </strong>and <strong>Tommy Rocket</strong>t about <a href=\"https://wpbuilds.com/2026/07/23/477-classic-themes-to-block-editor-lessons-from-a-wordpress-plugin-business/\"><strong>lessons from their WordPress plugin business</strong></a> and their block-based plugin Slidey Panel, which slides customizable side panels into any site. You&#8217;ll hear how years of client work revealed a gap in both classic themes and the block editor, the philosophy behind their &#8220;page as panel&#8221; approach, and their candid take on AI, market share shifts, and the future of bespoke agency work.</p>\n\n\n<div class=\"wp-block-newsletterglue-showhide ng-block\" width=\"100%\">\n<figure class=\"wp-block-embed is-type-rich is-provider-pocket-casts wp-block-embed-pocket-casts\"><div class=\"wp-block-embed__wrapper\">\n\n</div></figure>\n</div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ryan Welcher</strong> walks you through <a href=\"https://www.youtube.com/watch?v=IwmF28FIt-4\">What&#8217;s New for WordPress Developers for July 2026</a> in his monthly video roundup. You&#8217;ll learn why WordPress 7.0.2 is a must-install security release, how to test React 19 via a runtime flag in Gutenberg 23.4, and what the now-enforced iframed editor means for your themes. He also covers responsive styling, Block Bindings for list items, and MCP support in Playground. Prefer reading? There&#8217;s a <a href=\"https://developer.wordpress.org/news/2026/07/whats-new-for-developers-july-2026/\">companion post on the Developer Blog</a>.</p>\n\n\n<div class=\"wp-block-newsletterglue-showhide ng-block\" width=\"100%\">\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n\n</div></figure>\n</div>\n\n\n<h2 class=\"wp-block-heading\" id=\"what-s-new-with-playground\">What&#8217;s new with Playground</h2>\n\n\n\n<p class=\"wp-block-paragraph\">The Playground team wants your <a href=\"https://make.wordpress.org/playground/2026/07/17/help-us-test-the-new-wordpress-playground-ui/\">help testing the new WordPress Playground UI</a> before it officially launches. <strong>Fellyph Cintra </strong>shares four testing modules you can pick from: creating and managing Playgrounds, the Blueprint experience, developer tools like Files and Logs, and import/export workflows. Five minutes on desktop or mobile is enough, and the post walks you through each step. Feedback on text clarity, mechanics, and design goes into the GitHub issue <a href=\"https://github.com/WordPress/wordpress-playground/issues/4092\">#4092.</a></p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Elliott Richmond</strong> shares how he <a href=\"https://elliottrichmond.co.uk/using-wordpress-playground-and-blueprints-to-train-clients-on-block-themes/\"><strong>uses WordPress Playground and Blueprints to train clients on block themes</strong></a>, inspired by WordCamp Europe. For a client migrating from a classic theme, he trimmed a gigabyte-plus database to a 50MB export, then built a Blueprint that loads their actual theme, plugin, and content into a disposable in-browser site. You send one link, the client can safely break things, and a refresh resets everything — no hosting or credentials needed.</p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"wordpress-and-ai\">WordPress and AI </h2>\n\n\n\n<p class=\"wp-block-paragraph\">On the Kinsta blog, <strong>Carlo Daniele</strong> takes <a href=\"https://kinsta.com/blog/wordpress-ai/\"><strong>a deep dive into the WordPress AI integration architecture</strong></a> that arrived with WordPress 7.0. You&#8217;ll learn how the three layers — Connectors, AI Client, and Providers — replace bundled SDKs and provider-specific code with the unified <code>wp_ai_client_prompt()</code> function. Daniele then walks you through building a real plugin, available on GitHub, that transcribes an audio note and converts it into structured Gutenberg blocks via two AI passes.</p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n\n<p class=\"wp-block-paragraph\">An interesting take: On the MemberPress blog, SEO veteran <strong>Curt Noble</strong> argues that <strong><a href=\"https://memberpress.com/blog/wordpress-lost-market-share-got-stronger-heres-why/\">WordPress lost market share and got stronger</a>.</strong> Drawing on twenty years in SEO, including his own private blog network (PBN) days, Noble contends the dip mostly reflects Google demolishing the spam economy that ran on WordPress. Meanwhile, search interest hit a five-year high, WordPress dominates the top 10,000 sites, and the vibe-coding security hangover is sending founders back to proven platforms. Noble&#8217;s bigger point: with the AI Client, Abilities API, and MCP Adapter, WordPress became the platform AI agents can natively and safely operate.</p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Jeff Paul</strong> announced <a href=\"https://make.wordpress.org/ai/2026/07/21/whats-new-in-ai-1-2-0/\"><strong>what&#8217;s new in AI 1.2.0</strong></a>, the latest release of the canonical AI plugin. You&#8217;ll find a new Suggest Reply experiment that drafts contextual comment responses for moderators to review, bulk Content Summary generation for existing content libraries, and two read-only Abilities: <code>core/read-content</code> and <code>core/read-users</code>. The settings screen got simpler, too, with advanced controls now tucked behind an opt-in Developer Tools option. Content Translations and C2PA (Coalition for Content Provenance and Authenticity)  tracking are on the 1.3.0 roadmap.</p>\n\n\n<div class=\"ng-block-a88e7c465125b244 wp-block-newsletterglue-container ng-block\" style=\"color: #666666;\" width=\"100%\"><div><div><div class=\"ng-block-vs ng-block-vs-1\" colspan=\"3\" height=\"0\" style=\"height: 0px;\"></div></div><div><div class=\"ng-block-hs ng-block-hs-1\" height=\"0\" style=\"width: 0px;\"></div><div align=\"none\" class=\"ng-block-td\" style=\"font-size: 16px; font-family: Helvetica; line-height: 1.6; font-weight: normal; padding-top: 20px; padding-bottom: 20px; padding-left: 0px; padding-right: 0px; text-align: none; color: #666666; background-color: #f8f8f8; border-radius: 8px;\"><div class=\"ng-block-601e88bab89a55c4 wp-block-newsletterglue-text ng-block\" style=\"color: #666666;\" width=\"100%\"><div><div><div align=\"none\" class=\"ng-block-td\" style=\"font-size: 16px; font-family: Helvetica; line-height: 1.6; font-weight: normal; padding-top: 8px; padding-bottom: 10px; padding-left: 20px; padding-right: 20px; text-align: none; color: #666666;\"><p><strong><a href=\"https://gutenbergtimes.com/need-a-zip-from-master/\">Need a plugin .zip from Gutenberg&#8217;s master branch?</a></strong><br />Gutenberg Times provides daily build for testing and review.</p></div></div></div></div>\n\n<div class=\"ng-block-e0fbdd0e6696fb8b wp-block-newsletterglue-image ng-block size-full is-resized\" width=\"100%\"><div><div><div align=\"center\" class=\"ng-block-td\" style=\"padding-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px;\"><a href=\"https://playground.wordpress.net/?blueprint-url=https://gutenbergtimes.com/wp-content/uploads/2020/11/playnightly.json\"><img alt=\"\" class=\"wp-image-42874 ng-image\" height=\"45\" src=\"https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2024/02/Screenshot-2025-11-15-at-12.06.44.png?resize=196%2C45&#038;ssl=1\" style=\"border-style: none; border-color: transparent;\" width=\"196\" /></a></div></div></div></div>\n\n<div class=\"ng-block-8ddb6772b022efdb wp-block-newsletterglue-text ng-block\" style=\"color: #666666;\" width=\"100%\"><div><div><div align=\"none\" class=\"ng-block-td\" style=\"font-size: 16px; font-family: Helvetica; line-height: 1.6; font-weight: normal; padding-top: 8px; padding-bottom: 10px; padding-left: 20px; padding-right: 20px; text-align: none; color: #666666;\"><p>Now also available via <a href=\"https://playground.wordpress.net/?blueprint-url=https://gutenbergtimes.com/wp-content/uploads/2020/11/playnightly.json\">WordPress Playground</a>. There is no need for a test site locally or on a server. Have you been using it? <a href=\"mailto:pauli@gutenbergtimes.com\">Email me </a>with your experience.</p></div></div></div></div></div><div class=\"ng-block-hs ng-block-hs-2\" height=\"0\" style=\"width: 0px;\"></div></div><div><div class=\"ng-block-vs ng-block-vs-2\" colspan=\"3\" height=\"0\" style=\"height: 0px;\"></div></div></div></div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n\n<p class=\"has-text-align-center has-small-font-size wp-block-paragraph\"><em>Questions? Suggestions? Ideas? </em><br /><em>Don&#8217;t hesitate to send <a href=\"mailto:pauli@gutenbergtimes.com\">them via email</a> or</em><br /><em> send me a message on WordPress Slack or Twitter @bph</em>.</p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" />\n\n\n\n<p class=\"has-text-align-center has-small-font-size wp-block-paragraph\">For questions to be answered on the <a href=\"http://gutenbergtimes.com/podcast\">Gutenberg Changelog</a>, <br />send them to <a href=\"mailto:changelog@gutenbergtimes.com\">changelog@gutenbergtimes.com</a></p>\n\n\n<div class=\"ng-block-27d18150ad27cc4b wp-block-newsletterglue-separator ng-block\" style=\"color: #666666;\" width=\"100%\"><div><div><div align=\"center\" class=\"ng-block-td\" style=\"padding-top: 20px; padding-bottom: 20px; padding-left: 20px; padding-right: 20px; color: #666666;\"><hr style=\"background-color: transparent; color: transparent; margin: 0; border: 0; border-top: 1px solid #666666; width: 560px; height: 0;\" /></div></div></div></div>\n\n<div class=\"wp-block-newsletterglue-showhide ng-block\" width=\"100%\"><div class=\"ng-block-e02eed48e108a176 wp-block-newsletterglue-text ng-block\" style=\"color: #666666;\" width=\"100%\"><div><div><div align=\"none\" class=\"ng-block-td\" style=\"font-size: 14px; font-family: Helvetica; line-height: 0.2; font-weight: normal; padding-top: 8px; padding-bottom: 10px; padding-left: 20px; padding-right: 20px; text-align: none; color: #666666;\"><p><strong>Featured Image: </strong></p></div></div></div></div></div>\n\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Sat, 25 Jul 2026 10:41:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:18:\"Birgit Pauli-Haack\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:32;a:6:{s:4:\"data\";s:21:\"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:68:\"Aaron D. Campbell: WP2Shell: Coordination Was Part of the Protection\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:34:\"https://aarondcampbell.com/?p=3026\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:84:\"https://aarondcampbell.com/2026/07/wp2shell-coordination-was-part-of-the-protection/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:417:\"<p>WP2Shell showed that coordinated disclosure is more than a private warning. It\'s a system for turning trust, preparation, and fast execution into protection for users.</p>\n<p>The post <a href=\"https://aarondcampbell.com/2026/07/wp2shell-coordination-was-part-of-the-protection/\">WP2Shell: Coordination Was Part of the Protection</a> appeared first on <a href=\"https://aarondcampbell.com\">Aaron D. Campbell</a>.</p>\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Fri, 24 Jul 2026 18:37:35 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:17:\"Aaron D. Campbell\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:33;a:6:{s:4:\"data\";s:21:\"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:94:\"Open Channels FM: Our Guide to Open Channels FM Podcast Network’s Channels, Series, and Blog\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:34:\"https://openchannels.fm/?p=2557382\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:96:\"https://openchannels.fm/our-guide-to-open-channels-fm-podcast-networks-channels-series-and-blog/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:127:\"A guide to better understand the content, both audio and written that makes the Open Channels Podcast Network what it is today.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Fri, 24 Jul 2026 11:53:38 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:8:\"Bob Dunn\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:34;a:6:{s:4:\"data\";s:21:\"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:13:\"Matt: AI Slop\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:23:\"https://ma.tt/?p=153646\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:30:\"https://ma.tt/2026/07/ai-slop/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:461:\"<p class=\"wp-block-paragraph\">If you&#8217;re going to give me AI slop, at least make it fun! Give me <a href=\"https://en.wikipedia.org/wiki/Iambic_pentameter\">iambic pentameter</a>. Make it all rhyme. Have <a href=\"https://suno.com/\">it be a song</a>. I think we&#8217;re under-utilizing the artistic and creative capabilities of models by making them produce work that <a href=\"https://www.pangram.com/\">sort-of-but-not-really looks like human effort</a>.</p>\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 22 Jul 2026 20:34:55 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:4:\"Matt\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:35;a:6:{s:4:\"data\";s:21:\"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:40:\"WordPress.org blog: WordPress 7.1 Beta 3\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://wordpress.org/news/?p=21177\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:56:\"https://wordpress.org/news/2026/07/wordpress-7-1-beta-3/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:7521:\"<p class=\"wp-block-paragraph\">WordPress 7.1 Beta 3 is ready for download and testing! </p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>This beta release is intended for testing and development</strong> only. Please do not install, run, or test this version of WordPress on production or mission-critical websites. Instead, use a test environment or local site to explore the new features.</p>\n\n\n\n<h2 class=\"wp-block-heading\">How to Test WordPress 7.1 Beta 3</h2>\n\n\n\n<p class=\"wp-block-paragraph\">You can test WordPress 7.1 Beta 3 in any of the following ways:</p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>WordPress Beta Tester Plugin</strong></td><td>Install and activate the <a href=\"https://wordpress.org/plugins/wordpress-beta-tester/\" rel=\"noreferrer noopener\" target=\"_blank\">WordPress Beta Tester</a> plugin on a WordPress install. Select the “Bleeding edge” channel and “Beta/RC Only” stream.</td></tr><tr><td><strong>Direct Download</strong></td><td>Download the <a href=\"https://wordpress.org/wordpress-7.1-beta3.zip\">Beta 3 version (zip)</a> and install it on a WordPress website.</td></tr><tr><td><strong>Command Line (WP-CLI)</strong></td><td>Use this <a href=\"https://make.wordpress.org/cli/\" rel=\"noreferrer noopener\" target=\"_blank\">WP-CLI</a> command: <br /><code>wp core update --version=7.1-beta3</code></td></tr><tr><td><strong>WordPress Playground</strong></td><td>Use a <a href=\"https://playground.wordpress.net/?site-slug=kind-classic-mountain&amp;networking=no&amp;php=8.3&amp;wp=beta&amp;language=&amp;multisite=no\" rel=\"noopener\" target=\"_blank\">7.1 Beta 3 WordPress Playground instance</a> to test the software directly in your browser. No setup required-just click and go!</td></tr></tbody></table></figure>\n\n\n\n<p class=\"wp-block-paragraph\">The scheduled final release date for WordPress 7.1 is <strong>August 19, 2026</strong>. The full <a href=\"https://make.wordpress.org/core/2026/07/03/wordpress-7-1-release-party-schedule/\">release schedule can be found here</a>. Your help testing Beta and RC versions is vital to making this release as stable and powerful as possible. Thank you to everyone who contributes by testing!</p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Find out what’s new in WordPress 7.1</strong>: Read the <a href=\"https://wordpress.org/news/2026/07/wordpress-7-1-beta-1/\">Beta 1 announcement</a> for details and highlights.</p>\n\n\n\n<h2 class=\"wp-block-heading\">How important is your testing?</h2>\n\n\n\n<p class=\"wp-block-paragraph\">Testing for issues is a critical part of developing any software, and it’s a meaningful way for anyone to contribute – whether or not you have experience. <a href=\"https://make.wordpress.org/test/2026/07/15/help-test-wordpress-7-1/\">Details on what to test in WordPress 7.1 are available here</a>.</p>\n\n\n\n<p class=\"wp-block-paragraph\">If you encounter an issue, please share it in the <a href=\"https://wordpress.org/support/forum/alphabeta/\" rel=\"noopener\" target=\"_blank\">Alpha/Beta area</a> of the support forums. If you are comfortable submitting a reproducible bug report, you can do so <a href=\"https://core.trac.wordpress.org/newticket\" rel=\"noopener\" target=\"_blank\">via WordPress Trac</a>. You can also check your issue against this list of <a href=\"https://core.trac.wordpress.org/tickets/major\" rel=\"noopener\" target=\"_blank\">known bugs</a>.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Curious about testing releases in general and how to get started? Follow along with the<a href=\"https://make.wordpress.org/test/\"> testing initiatives in Make Core</a> and join the <a href=\"https://wordpress.slack.com/messages/core-test/\">#core-test channel</a> on <a href=\"https://wordpress.slack.com/\">Making WordPress Slack</a>.</p>\n\n\n\n<h2 class=\"wp-block-heading\">What&#8217;s in WordPress 7.1 Beta 3?</h2>\n\n\n\n<p class=\"wp-block-paragraph\">For technical details on the more than <strong>71 issues</strong> addressed since Beta 1, see the following links:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https://core.trac.wordpress.org/query?status=closed&amp;changetime=07%2F15%2F2026..07%2F22%2F2026&amp;milestone=7.1&amp;group=component&amp;col=id&amp;col=milestone&amp;col=owner&amp;col=type&amp;col=priority&amp;order=id\">Closed 7.1 WordPress Core Trac tickets</a> since July 15, 2026</li>\n\n\n\n<li><a href=\"https://github.com/WordPress/gutenberg/commits/wp/7.1?since=2026-07-15&amp;until=2026-07-22\">7.1 Gutenberg commits</a> since July 15, 2026</li>\n</ul>\n\n\n\n<p class=\"wp-block-paragraph\">Note: <strong>Beta 2 was released on July 17, 2026</strong>, as part of the <a href=\"https://wordpress.org/news/2026/07/wordpress-7-0-2-release/\">WordPress 7.0.2 release</a> and includes important security fixes.</p>\n\n\n\n<h3 class=\"wp-block-heading\">Beta 3 introduces two improvements to styling.</h3>\n\n\n\n<p class=\"wp-block-paragraph\">Applying local style changes globally is no longer an all-or-nothing action. The <a href=\"https://github.com/WordPress/gutenberg/pull/79839\" rel=\"noopener\" target=\"_blank\">Apply globally</a> option in the block inspector now opens a quick review step, allowing you to choose which modified styles to apply globally while keeping the rest as local overrides.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Other notable fixes include improvements to media uploads: long animated GIF uploads no longer hang, images rotated using EXIF metadata are processed correctly, and uploading a single HEIC image in Safari no longer creates two entries.</p>\n\n\n\n<p class=\"wp-block-paragraph\">The editor also includes additional fixes for Notes, responsive styling, and custom CSS. For developers, WordPress Coding Standards has been updated to version 3.4.0.</p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https://make.wordpress.org/core/2026/05/22/extending-unicode-support-in-email-addresses-usernames-and-slugs/\" rel=\"noopener\" target=\"_blank\">Unicode email address support</a> will <strong>not be included</strong> in WordPress 7.1. The work will continue in a community plugin, allowing broader testing of compatibility, security, and data-handling considerations.</p>\n\n\n\n<h2 class=\"wp-block-heading\">A Beta 3 haiku</h2>\n\n\n\n<p class=\"wp-block-paragraph\">Fresh bugs surface now,<br />click by click, we chase them down—<br />codebase grows steady.</p>\n\n\n\n<p class=\"has-text-align-right wp-block-paragraph\"><em>Props to </em><a class=\"mention\" href=\"https://profiles.wordpress.org/krupajnanda/\"><span class=\"mentions-prefix\">@</span>krupajnanda</a>, <a class=\"mention\" href=\"https://profiles.wordpress.org/annezazu/\"><span class=\"mentions-prefix\">@</span>annezazu</a>, <br /><a class=\"mention\" href=\"https://profiles.wordpress.org/wildworks/\"><span class=\"mentions-prefix\">@</span>wildworks</a>, <a class=\"mention\" href=\"https://profiles.wordpress.org/amykamala/\"><span class=\"mentions-prefix\">@</span>amykamala</a> <em>for proofreading and review.</em></p>\n\n\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image size-large has-custom-border\"><a href=\"https://us.wordcamp.org/2026/\"><img alt=\"WordCamp US: Powered by WordPress, Driven by Community, August 16-19, 2026\" class=\"wp-image-20859\" height=\"321\" src=\"https://i0.wp.com/wordpress.org/news/files/2026/06/wcus-2026-teaser.png?resize=1024%2C321&#038;ssl=1\" width=\"1024\" /></a><figcaption class=\"wp-element-caption\">Join us for the launch of WordPress 7.1 at <a href=\"https://us.wordcamp.org/2026/\">WordCamp US 2026</a>, August 16–19.</figcaption></figure>\n</div>\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 22 Jul 2026 15:23:14 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:17:\"Benjamin Zekavica\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:36;a:6:{s:4:\"data\";s:21:\"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:37:\"Open Channels FM: Signal – Issue 17\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:34:\"https://openchannels.fm/?p=2557126\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:40:\"https://openchannels.fm/signal-issue-17/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:213:\"Talk about the intersection of open source software and business, rapid security response amid AI advancements, the importance of fundamentals in AI implementation, and concise content creation for engaging media.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 22 Jul 2026 13:10:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:8:\"Bob Dunn\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:37;a:6:{s:4:\"data\";s:21:\"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:100:\"WPTavern: #226 – Jessica Lyschik on Why Accessibility in WordPress Themes Is Easier Than You Think\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:48:\"https://wptavern.com/?post_type=podcast&p=206634\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:114:\"https://wptavern.com/podcast/226-jessica-lyschik-on-why-accessibility-in-wordpress-themes-is-easier-than-you-think\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:55129:\"<details>Transcript<div>\n<p class=\"wp-block-paragraph\">[00:00:19] <strong>Nathan Wrigley:</strong> Welcome to the Jukebox Podcast from WP Tavern. My name is Nathan Wrigley.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Jukebox is a podcast which is dedicated to all things WordPress. The people, the events, the plugins, the blocks, the themes, and in this case, why accessibility in WordPress themes is easier than you think.</p>\n\n\n\n<p class=\"wp-block-paragraph\">If you&#8217;d like to subscribe to the podcast, you can do that by searching for WP Tavern in your podcast player of choice, or by going to wptavern.com/feed/podcast, and you can copy that URL into most podcast players.</p>\n\n\n\n<p class=\"wp-block-paragraph\">If you have a topic that you&#8217;d like us to feature on the podcast, I&#8217;m keen to hear from you and hopefully get you, or your idea, featured on the show. Head to wptavern.com/contact/jukebox and use the form there.</p>\n\n\n\n<p class=\"wp-block-paragraph\">So on the podcast today we have Jessica Lyschik. Jessica is a longtime member of the WordPress community who&#8217;s been working in the ecosystem since 2015. She&#8217;s spent years learning and advocating for web accessibility, both as a developer and as an active community participant, joining agencies, working on theme reviews, and helping improve standards.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Many theme creators assume that making themes accessible is an intimidating task, but Jessica&#8217;s here to show you that achieving an accessibility ready WordPress theme is more straightforward than you might imagine.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Her WordCamp Europe 2026 presentation, accessibility in themes, easier than you think, aimed to demystify the requirements for accessible themes. Explaining what the WordPress guidelines mean in practise, where the low hanging fruit is, and how both block and classic themes can reach accessibility ready status with manageable efforts.</p>\n\n\n\n<p class=\"wp-block-paragraph\">We talk about the personal and moral journey that brings developers to accessibility. The technical hurdles and documentation challenges, and the ways in which things like AI agents are putting accessibility in the spotlight for everyone.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Jessica talks about practical steps that quickly improve accessibility, like using correct HTML tags, adding alternative text to images, and configuring skip to content links, and shares why building accessibility in from the start saves time and effort down the road.</p>\n\n\n\n<p class=\"wp-block-paragraph\">We also explore the differences, and possible advantages, of block themes when it comes to accessibility, and why theme guidelines work the way they do, and the importance of interdisciplinary awareness across SEO, design, and content teams.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Jessica mentions helpful resources, influential leaders in accessibility, and the ongoing need for documentation improvements to help everyone level up.</p>\n\n\n\n<p class=\"wp-block-paragraph\">If you&#8217;ve ever felt overwhelmed by accessibility requirements, or wonder why they matter, and how you can build better WordPress sites that work for everyone, this episode is for you.</p>\n\n\n\n<p class=\"wp-block-paragraph\">If you&#8217;re interested in finding out more, you can find all of the links in the show notes by heading to wptavern.com/podcast, where you&#8217;ll find all the other episodes as well.</p>\n\n\n\n<p class=\"wp-block-paragraph\">And so without further delay, I bring you Jessica Lyschik.</p>\n\n\n\n<p class=\"wp-block-paragraph\">I am joined on the podcast by Jessica Lyschik. Hello, Jessica.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:03:39] <strong>Jessica Lyschik:</strong> Hi Nathan.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:03:41] <strong>Nathan Wrigley:</strong> Nice to have you with us. This is my second interview at WordCamp Europe 2026. We&#8217;re in a beautiful, big media room. I&#8217;ve got to say, this is one of the nicest spaces I&#8217;ve ever had for these kind of interviews, so that&#8217;s really nice.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Jessica has already done, I want to say presentation but maybe it was a workshop. I&#8217;m not sure.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:03:57] <strong>Jessica Lyschik:</strong> No, it was a regular talk actually, yeah.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:03:59] <strong>Nathan Wrigley:</strong> Okay. And how did it go?</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:04:00] <strong>Jessica Lyschik:</strong> It went super well, except for my slides went missing in between. That wasn&#8217;t so great. But the audience was very respectful of that, and I made a bit fun of it, so they laughed for a second and I tried, the media guys tried to fix that. We got it fixed in the end. I would&#8217;ve winged it anyway because I, like I knew what was coming up. But it&#8217;s always good to have your slides. It&#8217;s like seeing them, because for me it&#8217;s also visual reminder. It&#8217;s like, I need to see what I&#8217;m talking about, so I&#8217;m not losing track of it. But yeah, this was just a little technical hiccup. But overall I got very great feedback so far on my talk, and I&#8217;m very glad.</p>\n\n\n\n<p class=\"wp-block-paragraph\">There were also quite a lot of people. I did not expect this many. And that makes me just super happy that people are actually interested in this topic, although it is sort of scary for some of them if they even like try to touch this topic. We can probably get into the details later. Yeah, just overall like, what does it do? Why do I need that? These unanswered questions that they have that they were like, ah, no, I&#8217;m not really interested into that.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:05:01] <strong>Nathan Wrigley:</strong> Oh, that&#8217;s nice a big reception.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:05:03] <strong>Jessica Lyschik:</strong> Yeah. And that&#8217;s just great to see because I think just as we all grow older, and I even noticed that, and I&#8217;ve said that in my talk, like I kind of get to appreciate when a website is accessible. I mean I&#8217;m still have a long time to go, hopefully in my life, but I start to appreciate the small things that make just browsing websites easier, to be honest.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:05:23] <strong>Nathan Wrigley:</strong> So I guess we should introduce the subject and then give you a chance to introduce yourself because it feels like in this context, the subject at hand, it&#8217;s important to know that you know what you are doing. It&#8217;s not, well, I suppose it&#8217;s a general skill in that it should be something most people know an awful lot about. But I fear that that&#8217;s not the case.</p>\n\n\n\n<p class=\"wp-block-paragraph\">So the presentation that you&#8217;ve just given was called accessibility in themes, easier than you think. That&#8217;s nicely phrased. Let&#8217;s get them through the door.</p>\n\n\n\n<p class=\"wp-block-paragraph\">And then the blurb that went with that, I&#8217;ll just read that into the record then everybody knows what we&#8217;re talking about. So it says, many theme developers assume accessibility ready requirements are hard to meet, but that&#8217;s rarely true. This session shares practical insights for real theme reviews, and shows how both block and classic themes can reach accessibility ready status with manageable effort.</p>\n\n\n\n<p class=\"wp-block-paragraph\">So that&#8217;s the context of what we&#8217;re going to talk about today. However, as I just alluded to, could you just tell us a bit about you, how long you&#8217;ve been using WordPress, and then I guess if you want to focus a bit on your accessibility credentials and what you&#8217;ve been doing in that space.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:06:23] <strong>Jessica Lyschik:</strong> Yeah, of course. So yeah, I&#8217;ve been using WordPress, I think I started around 2005 or 6 already. So like dipped my toes into it, played with it around, just got a feel for it. But actually professionally, I started out in 2015 in the WordPress ecosystem.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Before that, I already joined the community. So I was working at another place that did not use WordPress before. And then in 2015 I joined a WordPress agency. Today they&#8217;re called Syde, for anyone who&#8217;s wondering. And ever since I&#8217;ve been into WordPress that long.</p>\n\n\n\n<p class=\"wp-block-paragraph\">And accessibility in that case I have, I think it was a gradual process more of. It was not just like, I&#8217;m now doing accessibility. That just didn&#8217;t happen. It was, I learned it over time. And when I started learning about how to create a website accessibility was absolutely not a thing. No one cared about it. And it just became more and more aware for people, for developers, especially in the past couple years. I think we still have some way to go but like, as I said earlier, there were so many people interested in my talk. So I think we&#8217;re now at a pace where things get really interesting for many more people.</p>\n\n\n\n<p class=\"wp-block-paragraph\">And yeah, I learned a lot along the way. Made a lot of mistakes along the way. But I&#8217;m glad I&#8217;m learning this. I&#8217;m still learning. So it&#8217;s always something that you continuously learn, because I think the hardest part to grasp for people is that, if you are abled, it&#8217;s like you can see, you can hear, you can navigate a device with your own hands, all stuff like that, you take it for granted.</p>\n\n\n\n<p class=\"wp-block-paragraph\">And if you suddenly see or people tell you the perspective of like a blind person, a person who&#8217;s deaf, a person who may not be able to use a device like you do, maybe have a hand injury, or no hands anymore, that&#8217;s also happening. Then you start to wonder, okay, how do these people actually like use websites or use their phones or computers? And there are many different ways to do that. And I think if you have the chance to learn about this, it is absolutely eye-opening.</p>\n\n\n\n<p class=\"wp-block-paragraph\">You can also then, there was a talk at WordCamp Leipzig this year, but also last year, I attended last year, by a blind person. And her brother was also blind. He was a developer. And they shared like how bad some websites are, and how they struggle to like get the information out of the website, and what crazy, crazy stuff people are doing to their websites that do not make it accessible for these people.</p>\n\n\n\n<p class=\"wp-block-paragraph\">And then you are sitting there and wondering, oh my God. And sometimes I have to say, I even did this in the past and I didn&#8217;t know, but I&#8217;m glad today that I learned about this and make a better web essentially. Yeah, that&#8217;s why I&#8217;m here sharing my knowledge.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:09:11] <strong>Nathan Wrigley:</strong> It kind of sounds for me, so when I talk about accessibility, there&#8217;s always two strands to it. There&#8217;s like this legal bit where the governments are increasingly talking about things that will happen to you as a company that builds websites if you don&#8217;t follow guidelines. So that&#8217;s one side.</p>\n\n\n\n<p class=\"wp-block-paragraph\">But there&#8217;s also this moral side. There&#8217;s the side of, we ought to do this despite what the law says. You know, it&#8217;s just a necessary thing. And it feels to me as if your journey in this was a moral one.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:09:38] <strong>Jessica Lyschik:</strong> More of, yes.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:09:39] <strong>Nathan Wrigley:</strong> Yeah, there was a definite need here. You know, in the real world when you see somebody, let&#8217;s say somebody who&#8217;s sitting in a wheelchair and they&#8217;re trying to get into a post office and there&#8217;s a step that they can&#8217;t get over, there&#8217;s no bit of you which doesn&#8217;t see that as unjust. Every bit of you says that character can&#8217;t get over that step. That&#8217;s wrong.</p>\n\n\n\n<p class=\"wp-block-paragraph\">And yet, the bit of the world which is becoming increasingly the way that we interact, you know, we book flights, we file our taxes, we do our banking, we, all of these things, they&#8217;re completely invisible.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Most of the time we&#8217;re doing the internet by ourselves. You know, we might be sitting on a train, but nevertheless it&#8217;s a solitary activity, or we&#8217;re in our own home or whatever. And these pitfalls, the equivalent of the step in front of the post office is totally invisible.</p>\n\n\n\n<p class=\"wp-block-paragraph\">And it also seems that the voice of the people whose lives are made more difficult is just drowned out. Somehow that anger that they must feel never seems to rise to the top quite enough that we all take the necessary steps.</p>\n\n\n\n<p class=\"wp-block-paragraph\">I don&#8217;t know if any of that landed, and there was definitely no question there, but I&#8217;ll hand it back to you if any of that resonates.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:10:49] <strong>Jessica Lyschik:</strong> No, I think you, you&#8217;ve put it absolutely right. And the invisibility is the thing, because a step for us is visually, like we see it I mean. If you&#8217;re blind, you&#8217;re not seeing it. But let&#8217;s put it away for a second. But in the web, the invisibility is like the key thing. And I just talked to Anne-Mieke Bovelett about, who&#8217;s doing another accessibility talk this afternoon. She told me about like a company where they put effort into their website, making it more accessible. And their sales actually increased. So it can definitely help. This is just one example.</p>\n\n\n\n<p class=\"wp-block-paragraph\">But there&#8217;s also a new player in the field that will probably even increase the interest in accessibility, and that is AI agents. Because AI agents, they do not see a website as we do visually. They rely on that the website is technically built correctly. Google actually just last month announced that they will focus on this. They will focus on the accessibility for the AI agent. I have put a link in my slides to that document. This is basically, I think something that will be easier to grasp for people for some weird reason. But it&#8217;s made more visible to them because if an AI agent cannot read your website, and I know we are probably still at the very beginning of this AI agent stuff, but I think this will increase over the next couple months or even years.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:12:14] <strong>Nathan Wrigley:</strong> That&#8217;s really interesting because when an individual, let&#8217;s go back 10 years, when an individual is creating a website, every single bit that you have to achieve is a minute of work or another minute or 20 minutes or an hour or what have you. And so there was this whole thing of just building the website, especially when page builders and things like that came along, just building the website to see what it looks like. And that whole accessibility layer just basically gets ignored.</p>\n\n\n\n<p class=\"wp-block-paragraph\">However, that&#8217;s what you&#8217;ve just said is curious because the AI agent building the website, to the AI agent, that&#8217;s kind of no extra work to get it right, if you know what I mean? If it&#8217;s configured to do all of the bits correctly, I&#8217;m using air quotes around the word correctly, then in theory it should be quite a good custodian of accessibility when it&#8217;s building things. I guess only time will tell whether that actually happens.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:13:08] <strong>Jessica Lyschik:</strong> Yeah, but it&#8217;s also for like, not the agents itself building, but also the agents visiting your website. Especially if you do like, I think shopping will be the one thing that if you say, hey, I don&#8217;t know what the best coffee or what, this is like a good topic. Yeah, okay, here are three options. And then, okay, buy me option one, a kilo of these beans or whatever. The AI agent, if the shop is accessible, the AI agent could do the shopping for you. This is where things are going and progressing towards, that you are not actively anymore the person who actually goes to the online shop, puts it in the cart, goes to the checkout and does all that stuff for you. But if the agent knows all that, it can do it for you.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:13:50] <strong>Nathan Wrigley:</strong> Can I ask a question then? Because I may have, I think I&#8217;ve understood what you were just saying and curiously, I&#8217;ve never had that thought, the one that you&#8217;ve just expressed. I want to know if I&#8217;ve got it right. Are you saying that in a world in which we increasingly ask AI to achieve things on the web for us, if it&#8217;s built with accessibility in mind, it&#8217;s more likely to be able to achieve the result of, let&#8217;s say, buy me a kilo of coffee.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:14:14] <strong>Jessica Lyschik:</strong> Yep.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:14:15] <strong>Nathan Wrigley:</strong> That&#8217;s so interesting.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:14:16] <strong>Jessica Lyschik:</strong> Yeah because like, Anne-Mieke, whom I just talked about, shared a long document with me recently and I was just reading through it and was like, yeah, of course. Of course, if we technically do things right, we use the right elements, we do the right descriptions for everything that a computer, because AI agent is just a computer. Like assistive technology, like a screen reader who needs to read the right structure out of it and to fit the right content. But also is able to interact with stuff, like click on that button, put that in the cart, go to the checkout and so on. It&#8217;s basically the same. An AI agent is a screen reader.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:14:53] <strong>Nathan Wrigley:</strong> Yeah, that&#8217;s really interesting. I&#8217;m thinking of a map where I&#8217;m trying to get to a destination, but the map has no directions. Imagine a scenario where we set off from one place and our destination is here. What you are saying is all the instructions in between to get from the start to the end can be read if the HTML and all of the bits and pieces wrapped up in that are correct. I had never had that thought before. That&#8217;s so interesting.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:15:17] <strong>Jessica Lyschik:</strong> Yeah, that&#8217;s very interesting. And I did not focus too much on this topic in my talk, but I wanted to put it in there at least in one slide to give like the food for thought that people can actually think about it because this is like what&#8217;s hyped right now. I have not tried out this whole agent thing yet, but like from a developer perspective, I can totally see that this is something that will increasingly help AI agents to achieve stuff.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:15:41] <strong>Nathan Wrigley:</strong> Yeah. And presumably make it so that a whole tranche of people who struggle with the web as it is currently might be able to interact with their voice or whatever other technique they use. We&#8217;ve completely gone off the rails, but that was such an interesting aside, thank you.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:15:58] <strong>Jessica Lyschik:</strong> Yeah, I think this is something interesting to share. And as I said, I wanted to focus more on the technical details in my talk, so I left it kind of out. But I think it&#8217;s a great opportunity to share it here with you.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:16:08] <strong>Nathan Wrigley:</strong> Yeah. That was lovely. Thank you.</p>\n\n\n\n<p class=\"wp-block-paragraph\">So let&#8217;s go back to the WordPress bits and pieces then, and I&#8217;ll just do the title again because hopefully that&#8217;ll refresh it in listeners&#8217; minds. Accessibility in themes, easier than you think. Dear listener, if you&#8217;ve been using WordPress for any length of time, you&#8217;ll know that the themes still plays a giant part in the structure of your website and the way that people experience it.</p>\n\n\n\n<p class=\"wp-block-paragraph\">So where are we at then in the year 2026? Does the theme still represent a huge part of accessibility? In your experience, is it easier than most people think to get an accessible website in the year 2026? We&#8217;ll get into block based themes and classic themes and all that in a minute. But essentially what I&#8217;m asking is, is it an easier thing to get right than most people imagine?</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:16:51] <strong>Jessica Lyschik:</strong> Yes, because I think what scares people off from my own experience, there are requirements to get the accessibility ready tag in the wordpress.org theme repository. And these requirements, if you first read them, they&#8217;ll sound a bit cryptic and you do not really understand what they actually mean.</p>\n\n\n\n<p class=\"wp-block-paragraph\">In my talk, I was trying to combine this, what the requirement says with what is actually meant by that. Because right now, and this is something I would like to improve for the future, I&#8217;ve already talked to people about this, and I will have another chat with Rian Rietveld about it later, or tomorrow. Let&#8217;s see when we can make that happen.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Because right now the requirements read like, okay, this must be achieved. This is what the website should do. Then there are some testing instructions, but you&#8217;re not told how to achieve it. What do you technically need to do in order to do that?</p>\n\n\n\n<p class=\"wp-block-paragraph\">I noticed this while I was reworking. I found out about the requirements also just a month ago because the requirements got updated. I have a theme in the wordpress.org repository and I tried to apply these new rules and have another fresh look at it. I got the accessibility ready tag for this already when I first got the theme into the repository. But like it was a good refresher to like go over all the requirements because they have slightly changed a bit, they added new ones.</p>\n\n\n\n<p class=\"wp-block-paragraph\">When I was there, I was like, okay, like I understand this now because I have learned about accessibility over the past couple years. For someone who is fresh to this topic and doesn&#8217;t know too much about it, it&#8217;s hard to understand. Because there are some descriptions of things like, basically what it means is that you need to use, for example, the right HTML tags, header, footer, the main tag. We have section and aside, which are available in HTML 5. But the requirements does not say this explicitly.</p>\n\n\n\n<p class=\"wp-block-paragraph\">And I think this is where probably most people have gotten stuck in the past, because they did not understand like, what is actually required from me technically? Because the texts are not so much focused on that. And this is something I would like to contribute as well, to give back and to enhance. So it&#8217;s not there yet, but hopefully sooner than later we can add all this information so it gets even easier for people.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Because if you&#8217;ve done a website and you know about the HTML, you know about maybe a little bit of CSS, you know how to achieve this. You just need to connect the dots to what is relevant for accessibility and how do you do this in your HTML essentially.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:19:20] <strong>Nathan Wrigley:</strong> Yeah, I guess that&#8217;s a bit of a shame really, isn&#8217;t it? Is that the documentation is difficult to follow because I feel that accessibility is one of those things where if something is difficult it can get dropped basically.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:19:33] <strong>Jessica Lyschik:</strong> Yeah, people won&#8217;t do it.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:19:34] <strong>Nathan Wrigley:</strong> Yeah, because the majority of people browsing the internet can browse the internet despite your accessibility efforts, that will be the standard that they&#8217;re aiming for in most cases. So if it&#8217;s difficult to achieve these things and the documentation&#8217;s not really straightforward, every time somebody comes across a question and thinks, I don&#8217;t really know the answer to that, probably the quickest thing to do is just to, ah, push it to one side and not press through. But you obviously have and made it a bit of a goal.</p>\n\n\n\n<p class=\"wp-block-paragraph\">So is there a particular accessibility requirement that developers in your estimation kind of overestimate the difficulty of? What I&#8217;m asking here really is about some low hanging fruit that you know about. In the scenario that we&#8217;ve just described where it&#8217;s easy to get put off and to sort of say to yourself, okay, I can&#8217;t do this. I&#8217;m wondering there are some sort of quick wins that you could describe that people could maybe achieve within the next half an hour, once they sat down at their machines?</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:20:27] <strong>Jessica Lyschik:</strong> Yeah, I think there are definitely some. There is like underlining text in your main content, just underline the text. It&#8217;s one line of CSS, text declaration underline. For links, obviously, not for the entire text.</p>\n\n\n\n<p class=\"wp-block-paragraph\">And there is like, as I said, the HTML tags. With block themes, it&#8217;s super easy. For example, you just need to configure that correctly in the editor, or use the correct template part and it&#8217;s basically done for you. Core does that. This is one advantage of block themes, but we can dive into this deeper later. Or the skip to content links also in block themes.</p>\n\n\n\n<p class=\"wp-block-paragraph\">As an example, in block themes it is just like putting the content block in a group and assigning the main HTML tag to that group. And WordPress does the rest for you. It&#8217;s just like assigning this one little setting correctly and then you get automatically a skip a content link for block themes.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:21:18] <strong>Nathan Wrigley:</strong> Yeah, but curiously, if you didn&#8217;t know that small fact, that WordPress would handle that for you, if you don&#8217;t know, you don&#8217;t know. And you&#8217;d presumably go around the houses trying to figure that out for yourself and implement some custom version of that thing. Whereas in fact, what, three clicks, four seconds and you&#8217;re done.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:21:33] <strong>Jessica Lyschik:</strong> It&#8217;s super easy, yep.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:21:33] <strong>Nathan Wrigley:</strong> Yeah. Any more before we move on?</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:21:35] <strong>Jessica Lyschik:</strong> I think these are like the most, absolutely the low hanging fruit is also if you use any images to add an alternative text. I think this is probably the most common one people already know. It is so easy. And even WordPress, even if you use classic themes, it&#8217;s already in the media library, the alternative text field. For block themes you have it directly at the image so it&#8217;s already in front of you. You just need to use it.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:21:57] <strong>Nathan Wrigley:</strong> Yeah, you just not ignore it basically. Yeah, that&#8217;s true.</p>\n\n\n\n<p class=\"wp-block-paragraph\">So has this become kind of a habit for you then, over the last period of time since you&#8217;ve taken more and more interest in this? Have you got to the point now where this is just how it works? You know, in the same way that I drive a car and I use the gears and that&#8217;s all just second nature. Is it like that for you when you are building your themes? Because it&#8217;s now locked away in your head. Every time you do a thing that previously you would&#8217;ve omitted. You are now just in the habit. Has that been a difficult journey or fairly straightforward?</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:22:28] <strong>Jessica Lyschik:</strong> I think it&#8217;s, like starting out with this, it would feel like a bumpy road. But for me it was, it&#8217;s a gradual process. But right now it&#8217;s really like, yeah, I just know that when I use a button in a context that is not like sending off a form to add an aria label to it, it&#8217;s like, it is baked into my brain essentially already because I know.</p>\n\n\n\n<p class=\"wp-block-paragraph\">And I just had a very interesting example this week at work where there was a client reaching out saying, hey, we did an accessibility test on our website and it marked like two buttons that did not say what they&#8217;re doing. These were essentially missing the aria label because they had only icons on the buttons, not real text.</p>\n\n\n\n<p class=\"wp-block-paragraph\">So if there&#8217;s just an icon, the screen reader cannot read, what is this button for, essentially, with just an icon? The win here was just to add the aria labels, because the fields were already there. This was also part of the Greyd.Suite, so from our product so I knew how to put it in there. And then it was like, oh no, like I have to do this 12 times, my colleague said. And I was like, yeah, okay, then you have to do it twice, 12 times. So 24 times. But be happy it&#8217;s not 200 times you have to do it.</p>\n\n\n\n<p class=\"wp-block-paragraph\">So, and I said, do not take this personally. This is a great example of why putting accessibility at the very beginning of when you&#8217;re creating this makes life so much easier than rather when you just build a website and then you figure out you have to change 300 buttons. This is probably a crazy number, but just to give you an example, to change all the buttons manually again, going through every single page or whatever you have when you just could have taken the extra step, added the aria label, and then just be done with it.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:24:09] <strong>Nathan Wrigley:</strong> Right. That&#8217;s an interesting thought. And also the exasperation of your colleague there kind of perfectly sums up the problem. In that you see it as a problem. Does that mean I&#8217;ve got to do something 24 times? And there&#8217;s this sense of, ugh, I&#8217;ve got to do this work. And it feels like a chore. But then I suppose if you step back and look at what you&#8217;ll actually enable by doing those 24 things.</p>\n\n\n\n<p class=\"wp-block-paragraph\">And I know that in the workday that&#8217;s hard to do. It&#8217;s hard to sort of step back and say, okay, if I do this thing 24 times, this will be the result, and lots more people will be able to, in this case, view the image.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:24:42] <strong>Jessica Lyschik:</strong> I mean this was like they started already working on. If you fix it now, you do not have to do it for the coming pages. So if you multiply that with how many pages more you need to do, once you get this one fixed, and ideally you need to change the aria label of the text changes obviously, but this was, I think for a header, in a header, where there was like, I think one sort of popover or popup. Fully accessible by the way, so don&#8217;t worry about that. And also a button to, I think for the phone numbers, like just a phone icon. And they could click on it and it would be something like that, along the lines. I don&#8217;t exactly remember what it was. But it was just like two icons in the header. And if you take that header, use it on, I don&#8217;t know, another 250 sites, you don&#8217;t need to do the work anymore.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:25:29] <strong>Nathan Wrigley:</strong> Okay. So you are painting a picture in which, get it right at the beginning, follow the guidelines, do the hard work once, then almost the career from then, from this moment forward, your life will be immeasurably easier if you build it into the theme or.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:25:45] <strong>Jessica Lyschik:</strong> And accessibility will not be taken as, ugh, and I now have to do this all. Because when you do it from the start, you have to make sure at the end of course that it still works. You may have to run into issues and redo stuff. That can happen. But I think you just have saved yourself so much work in the end if that requirement for some reason pops up later or so.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:26:10] <strong>Nathan Wrigley:</strong> I&#8217;m wondering, depending on the kind of nature of where you work, and how you do this. You know, if you&#8217;re a freelance, then this is on you. If you&#8217;re in an agency, then it may be that there&#8217;s somebody, you know, maybe there&#8217;s an SEO person, there&#8217;s a design person, maybe there&#8217;s an accessibility person. But it does feel like the moral argument states everybody should have some insight. Maybe you&#8217;re not right in the weeds of it, but you should have some knowledge of what the low hanging fruit is, at least.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:26:38] <strong>Jessica Lyschik:</strong> Yeah it&#8217;s, what&#8217;s the right word for it? Interdisciplinary. It is like not just the developer who needs to think of accessibility. It&#8217;s like, okay, we need to because like we provide a technical structure for it. But it also needs to be for the content people who write the blog posts, the pages, whatever, for SEO people to understand that.</p>\n\n\n\n<p class=\"wp-block-paragraph\">And I think accessibility, if you want the entire website to be accessibility, everyone who works on a website needs to know about it. That an SEO person needs to know how to create a skip link, probably not. Or how to use, maybe to use the right text. But for them, the text would be just the, using the right heading structure, for example. This is also a requirement, that you do not use an H3 and then an H6 heading in your content, but you structure it correctly that you have the H1 on the top, and then every next level is H H2, and then every level under that is H3. So this way. They should know about this. But they do not need to know too much about the technical side. Because in the end, it all comes together and creates an accessible website.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:27:42] <strong>Nathan Wrigley:</strong> In your commentary a few minutes ago, you mentioned that there were some guidelines in order to put a theme on wordpress.org. Is that the nature of it? Is it a guideline, or are there some hard and fast rules, which will prevent a theme getting into the repo based upon a lack of accessibility? What I&#8217;m asking is, are there some things that you must do as of now, or is it very much, okay, if you do this, great, but if you don&#8217;t, we&#8217;ll let your theme pass anyway?</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:28:09] <strong>Jessica Lyschik:</strong> Yeah. Let me explain this. So there&#8217;s this accessibility ready tag. So you have different tags for the themes in the repository. And in order to get the accessibility ready tag, you need to follow the requirements, the accessibility ready requirements, I think it&#8217;s completely called.</p>\n\n\n\n<p class=\"wp-block-paragraph\">And these are as of now 18 requirements. I went through them all in my talk. We&#8217;ve already touched on some of these. Some are really low hanging fruit, some are, one of the newer ones are, a theme should not recommend or require a plugin that is not accessible. This is something else that the team came up with, which is an interesting one. There&#8217;s, I guess a lot of room for discussion.</p>\n\n\n\n<p class=\"wp-block-paragraph\">But also another one is to have an accessibility.txt file in your theme. Which basically, it&#8217;s not a standard yet, but like close to a standard sort of, has information about what has been done in terms of accessibility. Are there any classes that you can, CSS classes that you can use to make use of texts for screen readers? So basically hide them visually, or hide these texts or items visually, but still have them read out by screen readers. So they&#8217;re not like discipline none where you just remove that basically from the accessibility tree, but make it still readable for screen readers. And just some more information about that.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Yeah, you need to meet all these requirements with your theme if you want this tag. But you can still like do not care about accessibility and still get your theme in the repo if you want.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:29:40] <strong>Nathan Wrigley:</strong> Would you like that to be flipped? Would you like that to be, because I mean we&#8217;re a very open ecosystem, aren&#8217;t we? And would you like to see though a day where you don&#8217;t meet these 18 guidelines, you don&#8217;t get the tag, you don&#8217;t get to play, you&#8217;re not allowed in the repo? Or is that a touch too far?</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:29:56] <strong>Jessica Lyschik:</strong> Let me share some numbers, I think. So there are like 14,700 plus themes in the repository right now. All themes. At least that&#8217;s the number I can access. I don&#8217;t know if there&#8217;s maybe a bit more, I don&#8217;t know. But this is the public number you can access. And out of these themes, I think if I saw the correct number, it&#8217;s like just 270 have the accessibility ready tag. So then that is like 1.5% of all themes who have that tag.</p>\n\n\n\n<p class=\"wp-block-paragraph\">So I think it will be extremely hard to force sort of, if you want to flip that, force that onto people. And I think we need to do a more gradual way. And that&#8217;s what I&#8217;m sharing my knowledge because I think it is not that hard. If you can improve the documentation for it, it will be even easier for people. And I think this is the way to go instead of forcing like, because we do not like to be forced to things we do not understand.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:30:50] <strong>Nathan Wrigley:</strong> That&#8217;s right. Yeah, that&#8217;s interesting. I wonder if there&#8217;s a future in which that slowly gets ramped up.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:30:56] <strong>Jessica Lyschik:</strong> I think with the AI agents, we will have an acceleration on this, I guess. So maybe not in WordPress themes, in the repository directly, but I think the attention will be put there and then like, oh, maybe we should make it more accessible. Let&#8217;s read into this. And I think these guidelines are also very interesting, maybe not just for WordPress themes. I mean, of course they&#8217;re for the repository, but you of course can apply them to your own custom theme, definitely. You do not have an absolute check like the team will do for you. But nothing stops you from using them even on a non WordPress site.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:31:30] <strong>Nathan Wrigley:</strong> Do the guidelines, do they feel like they&#8217;re kind of firmly fixed or is it always a movable feast?</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:31:35] <strong>Jessica Lyschik:</strong> They&#8217;re relatively fixed.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:31:37] <strong>Nathan Wrigley:</strong> Okay, so if you were to swat up, for want of a better word, on what there is right now, there&#8217;s a good chance that the rug will not be pulled out from under you in six months, a year, two years time.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:31:46] <strong>Jessica Lyschik:</strong> No, I think the last time the requirements got updated was in 2012, 14. I would need to ask, Joe Dolson did the initial, or was working on the initial thing. And so it has been a while since this got updated and they just got updated last month. So I don&#8217;t think that they will be changing anything.</p>\n\n\n\n<p class=\"wp-block-paragraph\">The one I talked about, not requiring or recommending plugins is the one, this is something, it kind of creates a grey area sort of. And I think this will be put to discussion. It&#8217;s like, I don&#8217;t mind, but I can see many people like really, not raging against it, but like raising questions about it. If this is something that should be a requirement.</p>\n\n\n\n<p class=\"wp-block-paragraph\">But I think for like the actual technical stuff, I don&#8217;t think that there&#8217;s much that should change, because like they&#8217;re based on the WCAG requirements. These are like the standard requirements that also have, I&#8217;m not sure if they&#8217;re used on governmental things, like on the European Accessibility Act, but I think they&#8217;re a sort of base for that. And it&#8217;s not like completely this. So the theme requirements are not like the WCAG requirements 100%, but like a subset of it, sort of.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:32:57] <strong>Nathan Wrigley:</strong> Yeah, it&#8217;s a fairly slow moving ship in other words. If you acquire the knowledge today, you&#8217;ve got a good chance that in a year, two years, maybe even five years, the knowledge that you&#8217;ve got will need amending. But most of it will broadly work several years from now.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:33:11] <strong>Jessica Lyschik:</strong> It&#8217;s with like development in general. So like you always need to be constantly learning. And I think if you learn about accessibility today, I think you&#8217;re in a very good spot. Because like of course we have European Accessibility Act and governmental requirements, at least in Europe we do have them. But I think there&#8217;s already so much information out there, that it should be relatively easy to onboard you. And I think this is just beneficial if you learn, it&#8217;s basically about learning about how to use things correctly. And if you&#8217;ve got that, then you&#8217;re absolutely good to go.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:33:45] <strong>Nathan Wrigley:</strong> So not that long ago I suppose, we had block themes coming around, which is an entirely different way of creating themes in WordPress. So you&#8217;ve got classic themes, which is the way it always used to be. And now we&#8217;ve got block themes. Is there a striking fundamental difference in the way that you might approach accessibility if you were used to doing block themes? Is there a whole lot more to learn? Maybe it&#8217;s more straightforward if you&#8217;re using block themes. Just tell us about how those two things differ.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:34:08] <strong>Jessica Lyschik:</strong> Yeah. It is more straightforward actually. Core is handling stuff for you. So accessibility just got a tad bit easier if you use block themes actually. In classic themes, you have to do a lot of things manually. You have to make sure that the elements are right, that the skip link is there, for example, things that we touched on already. And in block themes, if you use the correct blocks on the correct structure, Core handles stuff for you.</p>\n\n\n\n<p class=\"wp-block-paragraph\">For example, there&#8217;s a requirement labelled form fields. So when you use a form or the form fields should have a label to it. In themes you don&#8217;t really have that because usually you should not put like, something like a form in there. There are two forms that by default come with a theme that are the comments form, but that&#8217;s completely handled by Core. And there&#8217;s the search form on the search results page.</p>\n\n\n\n<p class=\"wp-block-paragraph\">But in block themes, both of them are handled by Core. Both of them are accessible because Core handles it all for you. You just need to place them and actually not do anything to them. It is that straightforward.</p>\n\n\n\n<p class=\"wp-block-paragraph\">And same for like template parts. If you want to use header and footer, just use the template parts and use them. You can assign them a header template part as header of course, and one as footer. And then the HTML text will be automatically added correctly for you. So there&#8217;s not too much that you need to do manually anymore, just get that right.</p>\n\n\n\n<p class=\"wp-block-paragraph\">And as I say, I really love block themes for the much easier accessibility, or the way you can make a block theme accessible. This is so much easier than with a classic theme.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:35:38] <strong>Nathan Wrigley:</strong> So presumably though, it sounds like there&#8217;s meta knowledge, if you know what I mean. You&#8217;ve got to know which block to put in which spot, and which block wraps this other block, and the parents and the children. But if you learn that, and if you make that, we were talking about habits earlier, if you make that your habit, and then save that habit and save the theme and what have you, you are painting a picture where it&#8217;s significantly more straightforward because you don&#8217;t have to think about it in many cases. Well, that&#8217;s the wrong way of phrasing it. You don&#8217;t have to do that hard work.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:36:07] <strong>Jessica Lyschik:</strong> Exactly. If you have like a, sorry to interrupt you here, but if you have a theme that already gives you the correct examples, you can build off from that theme. For example, if you&#8217;re creating a new template, you can use an existing template and then just adjust it to what you need. If you need to change like colours or something but you have the structure already correct. You do not need to think about doing the structure again and maybe just have a check that it&#8217;s actually the right one. But if you just copy what&#8217;s already there, that is part of the theme, that&#8217;s actually super easy.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:36:38] <strong>Nathan Wrigley:</strong> I&#8217;m going to link to your presentation, which I know by the time that this goes out will be probably on wordpress.tv, I would&#8217;ve thought by that point. But I&#8217;ll link to your presentation and all of the different bits and pieces.</p>\n\n\n\n<p class=\"wp-block-paragraph\">But I&#8217;m curious, who in the WordPress space, and maybe not the WordPress space, maybe outside of that, who do you follow or try to get guidance from? Maybe that&#8217;s a YouTube channel or a blog, or a, I don&#8217;t know, government based website. Maybe it&#8217;s just wordpress.org, I don&#8217;t know. Where do you go to swat up on all of this?</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:37:06] <strong>Jessica Lyschik:</strong> Ooh, there are some very good resources out there. So I do follow like people within the WordPress community. I mentioned a few names already, like Joe Dolson, Rian Rietveld, Amber Hinds from Equalize Digital. They do a lot of stuff in that area. And then I also follow Sara Soueidan, she&#8217;s a developer from, I think Lebanon, if I remember correctly. She does great stuff on accessibility. There is a few more names. There are some good resources out there. I can probably research that for you because I cannot remember the names right now.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:37:39] <strong>Nathan Wrigley:</strong> I&#8217;m putting you on the spot. I&#8217;m sorry.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:37:40] <strong>Jessica Lyschik:</strong> Put me on the spot. That&#8217;s okay. I&#8217;ll share some links with you that you can then put in with the podcast information. There are some great resources both within the WordPress community but also outside of it that can give you a very good overview. And I think it&#8217;s just interesting to follow people who like can build the bridge between, okay, this is a requirement, this is how you technically do it, and this is why you do it.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:38:05] <strong>Nathan Wrigley:</strong> I have a friend who&#8217;s recently been on the journey of trying to go from zero to really quite proficient in this space. He&#8217;s found a bunch of YouTube channels and several of the names that you mentioned there, particularly the Lebanese lady that you mentioned.</p>\n\n\n\n<p class=\"wp-block-paragraph\">And I think followed a course that they put together and found that structure profoundly helpful. The dry documentation, I think was the way it was described on the WCAG website can sometimes I think be a, you know, it&#8217;s hard to get into that in some way.</p>\n\n\n\n<p class=\"wp-block-paragraph\">You know, if this all sounds like a lot of work, there&#8217;s definitely resources out there, which, fun is perhaps the wrong word, but make it more engaging. There&#8217;s videos to watch, and channels to follow and blogs to read and all of this. And so it turns this, I&#8217;m doing air quotes, dry subject into something a little bit more manageable and easy to take in.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:38:52] <strong>Jessica Lyschik:</strong> Yes. Yes, because like the WCAG requirements, like they&#8217;re hard to read. It&#8217;s like reading, the HTML 5 spec. This is also super hard to read.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:39:01] <strong>Nathan Wrigley:</strong> Yeah, it&#8217;s the cure for insomnia.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:39:03] <strong>Jessica Lyschik:</strong> Yeah, sort of. And it&#8217;s, yeah, I think if we have, not more content, but the right content available to people in the right spot, I think this will be beneficial for everyone.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:39:14] <strong>Nathan Wrigley:</strong> Yeah. I think unless there&#8217;s something else you want to cover off, I think, Jessica, I&#8217;ve asked everything I wish to. Is there anything you think we&#8217;ve omitted or are you happy to call it a day there?</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:39:24] <strong>Jessica Lyschik:</strong> I think we&#8217;re, I mean we could go on probably for days. But I think for now it&#8217;s, we&#8217;ve covered every topic.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:39:32] <strong>Nathan Wrigley:</strong> Well in which case, what I&#8217;ll do, dear listener, if you go to the WP Tavern website and search for Jessica&#8217;s post, I&#8217;m not sure what number it will be as we&#8217;re recording it, go there and anything that we discussed, and any names that we discussed and those kind of things, I&#8217;ll put a link and obviously if Jessica supplies any other things she mentioned, we&#8217;ll add those in as well.</p>\n\n\n\n<p class=\"wp-block-paragraph\">So Jessica, thank you so much for chatting to me today. And now that your presentation is done, you can relax and enjoy the rest of the spectacle.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:39:55] <strong>Jessica Lyschik:</strong> Yes. Thank you so much, and thanks for having me.</p>\n\n\n\n<p class=\"wp-block-paragraph\">[00:39:57] <strong>Nathan Wrigley:</strong> You&#8217;re welcome.</p>\n</div></details>\n\n\n\n<p class=\"wp-block-paragraph\">On the podcast today we have <a href=\"https://jessicalyschik.de\">Jessica Lyschik</a>.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Jessica is a longtime member of the WordPress community who has been working in the ecosystem since 2015. She has spent years learning and advocating for web accessibility, both as a developer and as an active community participant, joining agencies, working on theme reviews, and helping to improve standards.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Many theme creators assume that making themes accessible is an intimidating task, but Jessica’s here to show you that achieving an accessibility-ready WordPress theme is more straightforward than you might imagine. Her WordCamp Europe 2026 presentation, “Accessibility in themes: easier than you think,” aimed to demystify the requirements for accessible themes, explaining what the WordPress guidelines mean in practice, where the low-hanging fruit is, and how both block and classic themes can reach accessibility-ready status with manageable effort.</p>\n\n\n\n<p class=\"wp-block-paragraph\">We talk about the personal and moral journey that brings developers to accessibility, the technical hurdles and documentation challenges, and the ways in which things like AI agents are putting accessibility in the spotlight for everyone. Jessica talks about practical steps that quickly improve accessibility, like using correct HTML tags, adding alternative text to images, and configuring skip-to-content links, and shares why building accessibility in from the start saves time and effort down the road.</p>\n\n\n\n<p class=\"wp-block-paragraph\">We also explore the differences, and possible advantages, of block themes when it comes to accessibility, why theme guidelines work the way they do, and the importance of interdisciplinary awareness across SEO, design, and content teams. Jessica mentions helpful resources, influential leaders in accessibility, and the ongoing need for documentation improvements to help everyone level up.</p>\n\n\n\n<p class=\"wp-block-paragraph\">If you’ve ever felt overwhelmed by accessibility requirements, or wonder why they matter, and how you can build better WordPress sites that work for everyone, this episode is for you.</p>\n\n\n\n<h2 class=\"wp-block-heading\">Useful links</h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https://europe.wordcamp.org/2026/session/accessibility-in-themes-easier-than-you-think/\">Accessibility in themes: easier than you think</a> &#8211; Jessica&#8217;s presentation at WordCamp Europe 2026</p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https://syde.com\">Syde</a></p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https://leipzig.wordcamp.org/2026/\">WordCamp Leipzig 2026</a></p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https://greydsuite.com\"> Greyd.Suite</a></p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https://developer.wordpress.org/themes/classic-themes/functionality/accessibility/\">Accessibility Handbook</a> &#8211; Theme section</p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https://www.w3.org/WAI/standards-guidelines/wcag/\">WCAG 2 Overview</a></p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https://commission.europa.eu/strategy-and-policy/policies/justice-and-fundamental-rights/disability/european-accessibility-act-eaa_en\">European Accessibility Act (EAA)</a></p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https://www.joedolson.com\"> Joe Dolson</a></p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https://rianrietveld.com\">Rian Rietveld</a></p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https://amberhinds.com\">Amber Hinds</a></p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https://www.sarasoueidan.com\"> Sara Soueidan</a></p>\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 22 Jul 2026 13:00:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:14:\"Nathan Wrigley\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:38;a:6:{s:4:\"data\";s:21:\"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:67:\"Open Channels FM: We are Welcoming Automattic as our Newest Sponsor\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:34:\"https://openchannels.fm/?p=2557268\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:74:\"https://openchannels.fm/we-are-welcoming-automattic-as-our-newest-sponsor/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:159:\"Automattic is now a sponsor of Open Channels FM Podcast Network, supporting creators with tools for WordPress, WooCommerce, and more, promoting freedom online.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 22 Jul 2026 08:25:26 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:8:\"Bob Dunn\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:39;a:6:{s:4:\"data\";s:21:\"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:69:\"Gutenberg Times: How WordPress decides a theme is a “block theme”\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://gutenbergtimes.com/?p=46118\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:74:\"https://gutenbergtimes.com/how-wordpress-decides-a-theme-is-a-block-theme/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:20333:\"<p class=\"wp-block-paragraph\">The term &#8220;block theme&#8221; is used a lot in WordPress but it was never really clear to me what that meant exactly from a code point of view.</p>\n\n\n\n<p class=\"wp-block-paragraph\">While researching <a href=\"https://gutenbergtimes.com/the-post-editor-is-going-full-iframe-what-block-developers-need-to-know-before-wordpress-7-1/\">The post editor is going full iframe: what block developers need to know before WordPress 7.1</a>, I learned that the outcome of testing WordPress 7.1 Beta 1 <em>may</em> soften the plan: instead of forcing the iframe for everyone, core might force it only for block themes, while classic themes using blocks with apiVersion 2 or lower keep the current 7.0 behavior. (The linked article covers the 7.0 state of things in full.)<br /><br />If that&#8217;s the split, then the exact definition of &#8220;block theme&#8221; suddenly matters a great deal. So what does core actually check?</p>\n\n\n\n<p class=\"wp-block-paragraph\">The public API is <code>wp_is_block_theme()</code>, which just asks the active theme:</p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\"><span style=\"display: flex; padding: 10px 0px 0 16px; font-size: 0.8em; width: 100%; text-align: left; background-color: #1E1E1E; font-style: italic; color: #D4D4D4;\"><span>PHP</span></span><span class=\"code-block-pro-copy-button\" style=\"color: #D4D4D4; display: none;\" tabindex=\"0\"><pre class=\"code-block-pro-copy-button-pre\"><textarea class=\"code-block-pro-copy-button-textarea\" readonly=\"readonly\" tabindex=\"-1\">// wp-includes/theme.php (guard clause trimmed)\nfunction wp_is_block_theme() {\n	return wp_get_theme()->is_block_theme();\n}</textarea></pre><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"with-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path class=\"without-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6A9955;\">// wp-includes/theme.php (guard clause trimmed)</span></span>\n<span class=\"line\"><span style=\"color: #569CD6;\">function</span><span style=\"color: #D4D4D4;\"> </span><span style=\"color: #DCDCAA;\">wp_is_block_theme</span><span style=\"color: #D4D4D4;\">() {</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">	</span><span style=\"color: #C586C0;\">return</span><span style=\"color: #D4D4D4;\"> </span><span style=\"color: #DCDCAA;\">wp_get_theme</span><span style=\"color: #D4D4D4;\">()-&gt;</span><span style=\"color: #DCDCAA;\">is_block_theme</span><span style=\"color: #D4D4D4;\">();</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">}</span></span></code></pre></div>\n\n\n\n<p class=\"wp-block-paragraph\">And <code>WP_Theme::is_block_theme()</code> is, in its entirety, a file-existence check:</p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\"><span style=\"display: flex; padding: 10px 0px 0 16px; font-size: 0.8em; width: 100%; text-align: left; background-color: #1E1E1E; font-style: italic; color: #D4D4D4;\"><span>PHP</span></span><span class=\"code-block-pro-copy-button\" style=\"color: #D4D4D4; display: none;\" tabindex=\"0\"><pre class=\"code-block-pro-copy-button-pre\"><textarea class=\"code-block-pro-copy-button-textarea\" readonly=\"readonly\" tabindex=\"-1\">// wp-includes/class-wp-theme.php (caching trimmed)\npublic function is_block_theme() {\n	$paths_to_index_block_template = array(\n		$this->get_file_path( \'/templates/index.html\' ),\n		$this->get_file_path( \'/block-templates/index.html\' ),\n	);\n\n	foreach ( $paths_to_index_block_template as $path ) {\n		if ( is_file( $path ) &amp;&amp; is_readable( $path ) ) {\n			return true;\n		}\n	}\n\n	return false;\n}</textarea></pre><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"with-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path class=\"without-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6A9955;\">// wp-includes/class-wp-theme.php (caching trimmed)</span></span>\n<span class=\"line\"><span style=\"color: #569CD6;\">public</span><span style=\"color: #D4D4D4;\"> </span><span style=\"color: #569CD6;\">function</span><span style=\"color: #D4D4D4;\"> </span><span style=\"color: #DCDCAA;\">is_block_theme</span><span style=\"color: #D4D4D4;\">() {</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">	</span><span style=\"color: #9CDCFE;\">$paths_to_index_block_template</span><span style=\"color: #D4D4D4;\"> = </span><span style=\"color: #DCDCAA;\">array</span><span style=\"color: #D4D4D4;\">(</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">		</span><span style=\"color: #569CD6;\">$this</span><span style=\"color: #D4D4D4;\">-&gt;</span><span style=\"color: #DCDCAA;\">get_file_path</span><span style=\"color: #D4D4D4;\">( </span><span style=\"color: #CE9178;\">\'/templates/index.html\'</span><span style=\"color: #D4D4D4;\"> ),</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">		</span><span style=\"color: #569CD6;\">$this</span><span style=\"color: #D4D4D4;\">-&gt;</span><span style=\"color: #DCDCAA;\">get_file_path</span><span style=\"color: #D4D4D4;\">( </span><span style=\"color: #CE9178;\">\'/block-templates/index.html\'</span><span style=\"color: #D4D4D4;\"> ),</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">	);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">	</span><span style=\"color: #C586C0;\">foreach</span><span style=\"color: #D4D4D4;\"> ( </span><span style=\"color: #9CDCFE;\">$paths_to_index_block_template</span><span style=\"color: #D4D4D4;\"> as </span><span style=\"color: #9CDCFE;\">$path</span><span style=\"color: #D4D4D4;\"> ) {</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">		</span><span style=\"color: #C586C0;\">if</span><span style=\"color: #D4D4D4;\"> ( </span><span style=\"color: #DCDCAA;\">is_file</span><span style=\"color: #D4D4D4;\">( </span><span style=\"color: #9CDCFE;\">$path</span><span style=\"color: #D4D4D4;\"> ) &amp;&amp; </span><span style=\"color: #DCDCAA;\">is_readable</span><span style=\"color: #D4D4D4;\">( </span><span style=\"color: #9CDCFE;\">$path</span><span style=\"color: #D4D4D4;\"> ) ) {</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">			</span><span style=\"color: #C586C0;\">return</span><span style=\"color: #D4D4D4;\"> </span><span style=\"color: #569CD6;\">true</span><span style=\"color: #D4D4D4;\">;</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">		}</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">	}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">	</span><span style=\"color: #C586C0;\">return</span><span style=\"color: #D4D4D4;\"> </span><span style=\"color: #569CD6;\">false</span><span style=\"color: #D4D4D4;\">;</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">}</span></span></code></pre></div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>A theme is a &#8220;block theme&#8221; if it ships an <code>index.html</code> block template</strong>, either in <code>templates/</code>, or in <code>block-templates/</code>, the pre-5.9 legacy location. Nothing else is consulted. That has a few consequences that may surprise people:</p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><code>theme.json</code> doesn&#8217;t make you a block theme.</strong> Neither do patterns, block template <em>parts</em>, or <code>add_theme_support( \'block-templates\' )</code>. A theme can adopt every one of those &#8220;hybrid&#8221; features and still land on the classic side of this check, because the test only looks for a top-level <code>index.html</code> template.</p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Child themes inherit the answer.</strong> <code>get_file_path()</code> looks in the child theme first and falls back to the parent, so a child theme of a block theme is a block theme even if the child ships no templates of its own.</p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>It&#8217;s a filesystem check, not a declaration.</strong> There&#8217;s no header in <code>style.css</code> that opts you in or out. Drop a <code>templates/index.html</code> into a theme and, as far as WordPress is concerned, it <em>is</em> a block theme.</p>\n\n\n\n<h3 class=\"wp-block-heading\">The minimum files required for block and classic themes</h3>\n\n\n\n<p class=\"wp-block-paragraph\">This is the entire minimum viable <strong>block theme</strong> — two files:</p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\"><span style=\"display: flex; padding: 10px 0px 0 16px; font-size: 0.8em; width: 100%; text-align: left; background-color: #1E1E1E; font-style: italic; color: #D4D4D4;\"><span>Markdown</span></span><span class=\"code-block-pro-copy-button\" style=\"color: #D4D4D4; display: none;\" tabindex=\"0\"><pre class=\"code-block-pro-copy-button-pre\"><textarea class=\"code-block-pro-copy-button-textarea\" readonly=\"readonly\" tabindex=\"-1\">my-block-theme/\n├── style.css          ← standard theme header\n└── templates/\n    └── index.html     ← this file IS the decider</textarea></pre><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"with-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path class=\"without-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4;\">my-block-theme/</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">├── style.css          ← standard theme header</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">└── templates/</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">    └── index.html     ← this file IS the decider</span></span></code></pre></div>\n\n\n\n<p class=\"wp-block-paragraph\">(WordPress considers a theme valid if it has <code>style.css</code> plus <em>either</em> <code>index.php</code> or <code>templates/index.html</code>, which means for a block theme, <code>index.php</code>, <code>functions.php</code>, and even <code>theme.json</code> are all optional.)</p>\n\n\n\n<p class=\"wp-block-paragraph\">And this is a theme that is <strong>guaranteed to stay classic</strong>:</p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\"><span style=\"display: flex; padding: 10px 0px 0 16px; font-size: 0.8em; width: 100%; text-align: left; background-color: #1E1E1E; font-style: italic; color: #D4D4D4;\"><span>Markdown</span></span><span class=\"code-block-pro-copy-button\" style=\"color: #D4D4D4; display: none;\" tabindex=\"0\"><pre class=\"code-block-pro-copy-button-pre\"><textarea class=\"code-block-pro-copy-button-textarea\" readonly=\"readonly\" tabindex=\"-1\">my-classic-theme/\n├── style.css\n└── index.php          ← the classic fallback template</textarea></pre><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"with-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path class=\"without-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4;\">my-classic-theme/</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">├── style.css</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">└── index.php          ← the classic fallback template</span></span></code></pre></div>\n\n\n\n<p class=\"wp-block-paragraph\">Staying on the classic side of the check comes down to two conditions:</p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>No</strong> <strong><code>templates/index.html</code></strong> <strong>and no legacy</strong> <strong><code>block-templates/index.html</code>.</strong> Other block templates don&#8217;t matter: a theme with `templates/single.html` but no `templates/index.html` still tests as classic. (In practice, though, if you&#8217;re shipping block templates, ship the index and be a block theme on purpose.)</li>\n\n\n\n<li><strong>No block-theme parent.</strong> The check falls back to the parent theme, so a child of Twenty Twenty-Five is a block theme no matter what the child contains. To be classic, the whole chain has to be.</li>\n</ol>\n\n\n\n<p class=\"wp-block-paragraph\">Everything else is fair game. <code>theme.json</code>, patterns, <code>add_theme_support( \'block-template-parts\' )</code>` custom templates registered from plugins — none of them flip the switch., patterns, <code>add_theme_support( \'block-template-parts\' )</code>, custom templates registered from plugins: none of them flip the switch.</p>\n\n\n\n<h3 class=\"wp-block-heading\">Where real themes land</h3>\n\n\n\n<p class=\"wp-block-paragraph\">Running that check against some current releases from the theme directory</p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Tests <strong>classic</strong></th><th>Tests <strong>block</strong></th></tr></thead><tbody><tr><td>Twenty Twenty-One and every earlier default</td><td>Twenty Twenty-Two and every later default</td></tr><tr><td>Astra, Kadence, Blocksy, Botiga, Sydney, Hello Elementor — <em>all ship <code>theme.json</code></em></td><td></td></tr><tr><td>GeneratePress, Neve, OceanWP, Storefront</td><td></td></tr></tbody></table></figure>\n\n\n\n<p class=\"wp-block-paragraph\">Six of the themes in the first column ship <code>theme.json</code>, the marquee &#8220;block&#8221; feature, and still test classic, because the check never looks at <code>theme.json</code><br /><br />Twenty Twenty and OceanWP are another good gotcha: both ship a <code>templates/</code> directory and are still classic, because it&#8217;s full of PHP page templates (<code>template-cover.php</code>, <code>landing.php</code>). The check wants <code>templates/index.html</code> specifically, so &#8220;does it have a templates folder&#8221; is not the indicator you might assume.</p>\n\n\n\n<h3 class=\"wp-block-heading\">How the editor reads it</h3>\n\n\n\n<p class=\"wp-block-paragraph\">On the JavaScript side, the block-theme flag surfaces in two different places, which is worth knowing if you go source-diving.</p>\n\n\n\n<p class=\"wp-block-paragraph\">As an editor setting:</p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\"><span style=\"display: flex; padding: 10px 0px 0 16px; font-size: 0.8em; width: 100%; text-align: left; background-color: #1E1E1E; font-style: italic; color: #D4D4D4;\"><span>PHP</span></span><span class=\"code-block-pro-copy-button\" style=\"color: #D4D4D4; display: none;\" tabindex=\"0\"><pre class=\"code-block-pro-copy-button-pre\"><textarea class=\"code-block-pro-copy-button-textarea\" readonly=\"readonly\" tabindex=\"-1\">// wp-includes/block-editor.php, get_block_editor_settings()\n$editor_settings&#91;\'__unstableIsBlockBasedTheme\'&#93; = wp_is_block_theme();</textarea></pre><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"with-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path class=\"without-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6A9955;\">// wp-includes/block-editor.php, get_block_editor_settings()</span></span>\n<span class=\"line\"><span style=\"color: #9CDCFE;\">$editor_settings</span><span style=\"color: #D4D4D4;\">&#91;</span><span style=\"color: #CE9178;\">\'__unstableIsBlockBasedTheme\'</span><span style=\"color: #D4D4D4;\">&#93; = </span><span style=\"color: #DCDCAA;\">wp_is_block_theme</span><span style=\"color: #D4D4D4;\">();</span></span></code></pre></div>\n\n\n\n<p class=\"wp-block-paragraph\">and on the REST themes endpoint, which is where <code>@wordpress/core-data</code> picks it up:</p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\"><span style=\"display: flex; padding: 10px 0px 0 16px; font-size: 0.8em; width: 100%; text-align: left; background-color: #1E1E1E; font-style: italic; color: #D4D4D4;\"><span>PHP</span></span><span class=\"code-block-pro-copy-button\" style=\"color: #D4D4D4; display: none;\" tabindex=\"0\"><pre class=\"code-block-pro-copy-button-pre\"><textarea class=\"code-block-pro-copy-button-textarea\" readonly=\"readonly\" tabindex=\"-1\">// wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php\n$data&#91;\'is_block_theme\'&#93; = $theme->is_block_theme();</textarea></pre><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"with-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path class=\"without-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6A9955;\">// wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php</span></span>\n<span class=\"line\"><span style=\"color: #9CDCFE;\">$data</span><span style=\"color: #D4D4D4;\">&#91;</span><span style=\"color: #CE9178;\">\'is_block_theme\'</span><span style=\"color: #D4D4D4;\">&#93; = </span><span style=\"color: #9CDCFE;\">$theme</span><span style=\"color: #D4D4D4;\">-&gt;</span><span style=\"color: #DCDCAA;\">is_block_theme</span><span style=\"color: #D4D4D4;\">();</span></span></code></pre></div>\n\n\n\n<h2 class=\"wp-block-heading\">The one-file switch</h2>\n\n\n\n<p class=\"wp-block-paragraph\"><br />For all the weight the term carries, &#8220;block theme&#8221; boils down to a single file: <code>templates/index.html</code> exists, or it doesn&#8217;t. Not <code>theme.json</code>, not patterns, not any amount of hybrid adoption. Just one index template, checked up the parent chain.</p>\n\n\n\n<p class=\"wp-block-paragraph\">That&#8217;s worth keeping in mind if 7.1 does end up drawing the iframe line at <code>wp_is_block_theme()</code>. A hybrid theme that has adopted everything <em>except</em> block templates would keep the classic editor behavior, while adding a single <code>templates/index.html</code> (even accidentally, even in a parent theme you don&#8217;t control) would flip a site to the forced iframe. If your theme or your users&#8217; sites sit anywhere near that line, now is a good time to check which side of it you&#8217;re actually on: it&#8217;s one <code>is_file()</code> call away.</p>\n\n\n\n<p class=\"wp-block-paragraph\"></p>\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 21 Jul 2026 18:57:12 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:12:\"Ryan Welcher\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:40;a:6:{s:4:\"data\";s:21:\"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:86:\"Open Channels FM: The Growth of Domain Names and the Future of AI in Internet Identity\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:34:\"https://openchannels.fm/?p=2557208\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:93:\"https://openchannels.fm/the-growth-of-domain-names-and-the-future-of-ai-in-internet-identity/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:223:\"This episode looks at the evolving online landscape, focusing on domain names, digital identity, and AI\'s influence. Key insights include rising domain registrations, AI in managing abuse, and the importance of open source.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 21 Jul 2026 13:41:56 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:8:\"Bob Dunn\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:41;a:6:{s:4:\"data\";s:21:\"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:60:\"Open Channels FM: Open Source and the Open Source Initiative\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:34:\"https://openchannels.fm/?p=2556849\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:67:\"https://openchannels.fm/open-source-and-the-open-source-initiative/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:346:\"People think Open Source is just about having access to the source code. Actually, there&#8217;s a much longer history behind it. Open Source existed before the term Open Source was even coined, back in the late 60s. Universities started giving away software like Unix for free under small licenses like BSD or MIT, coincidentally named [&#8230;]\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 21 Jul 2026 12:15:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:8:\"Bob Dunn\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:42;a:6:{s:4:\"data\";s:21:\"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:90:\"WordCamp Central: WordCamp Rajshahi 2026: Celebrating Community, Learning, and Open Source\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:40:\"https://central.wordcamp.org/?p=15457333\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:112:\"https://central.wordcamp.org/news/2026/07/wordcamp-rajshahi-2026-celebrating-community-learning-and-open-source/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:8004:\"<p class=\"wp-block-paragraph\">WordCamp Rajshahi 2026, held on July 2nd-3rd, 2026, at the Rajshahi University of Engineering &amp; Technology (RUET) Auditorium, brought together WordPress enthusiasts, developers, designers, business owners, students, and open-source contributors from across Bangladesh and beyond. As a non-profit, community-driven conference, the event demonstrated the strength of collaboration, knowledge sharing, and the spirit of open source.</p>\n\n\n\n<p class=\"wp-block-paragraph\">More than just a technology conference, WordCamp Rajshahi became a place where people connected, exchanged ideas, and inspired one another to contribute to the future of WordPress.</p>\n\n\n\n<h2 class=\"wp-block-heading\">Sharing Knowledge That Matters</h2>\n\n\n\n<p class=\"wp-block-paragraph\">The conference featured a diverse lineup of local and international speakers who shared practical experiences, real-world case studies, and emerging trends shaping the web today.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Artificial intelligence was one of the most discussed topics throughout the event. Sessions explored how AI is transforming the way developers and businesses work—from integrating AI into WordPress without writing code to building customer support agents, using modern Large Language Models (LLMs) for development, debugging applications, and improving everyday workflows.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Performance, architecture, and security also received significant attention. Speakers demonstrated advanced WordPress optimization techniques, object caching strategies, no-code animations using GSAP, methods for identifying system vulnerabilities, and practical approaches to cleaning malware-infected WordPress websites with AI.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Beyond technical sessions, the conference emphasized personal and professional growth. Attendees learned about building successful careers, transitioning from startups to multinational companies, product marketing, the realities of remote work, and maintaining mental well-being while working in the technology industry.</p>\n\n\n\n<h2 class=\"wp-block-heading\">Contributor Day: Giving Back to WordPress</h2>\n\n\n\n<p class=\"wp-block-paragraph\">Contributor Day, held on July 2, served as one of the most meaningful parts of the event.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Participants worked alongside experienced WordPress contributors and Table Leads to improve the WordPress project itself. Whether they contributed to Core, Accessibility, Themes, Plugins, Polyglots (translations), Education, or Photos, attendees experienced firsthand how community collaboration built the global WordPress ecosystem.</p>\n\n\n\n<p class=\"wp-block-paragraph\">For many first-time contributors, it was their first opportunity to make a direct contribution to one of the world&#8217;s largest open-source projects.</p>\n\n\n\n<h2 class=\"wp-block-heading\">Campus Connect: Inspiring the Next Generation</h2>\n\n\n\n<p class=\"wp-block-paragraph\">One of the highlights of WordCamp Rajshahi 2026 was the <strong>Campus Connect</strong> initiative.</p>\n\n\n\n<p class=\"wp-block-paragraph\">To encourage student participation in open source, <strong>40 university students</strong> received <strong>complimentary tickets</strong> to attend the event. This initiative introduced young learners to the WordPress community, allowing them to interact with experienced professionals, attend technical sessions, and discover opportunities to contribute to open source.</p>\n\n\n\n<p class=\"wp-block-paragraph\">By investing in students today, the community hopes to cultivate the next generation of developers, designers, and contributors who will help shape the future of WordPress.</p>\n\n\n\n<h2 class=\"wp-block-heading\">Sponsors Who Made It Possible</h2>\n\n\n\n<p class=\"wp-block-paragraph\">WordCamp events are made possible through the generous support of organizations that believe in strengthening the open-source ecosystem. Rather than simply sponsoring an event, these companies invest in community growth and knowledge sharing.</p>\n\n\n\n<p class=\"wp-block-paragraph\">This year, the sponsorship tiers celebrated Rajshahi&#8217;s famous mango heritage.</p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Fazli Majesty (Platinum Sponsors)</strong></p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https://webappick.com/\" rel=\"noopener\" target=\"_blank\">WebAppick</a>,</li>\n\n\n\n<li><a href=\"https://fluentcart.com/\" rel=\"noopener\" target=\"_blank\">FluentCart</a>,</li>\n\n\n\n<li><a href=\"https://xcloud.host/\" rel=\"noopener\" target=\"_blank\">xCloud</a>.</li>\n</ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Himsagar Legacy (Gold Sponsor)</strong></p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https://hosting.com/\" rel=\"noopener\" target=\"_blank\">Hosting.com</a></li>\n</ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Amrapali Delight (Silver Sponsors)</strong></p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https://paymentform.io/\" rel=\"noopener\" target=\"_blank\">PaymentForm.io</a></li>\n\n\n\n<li><a href=\"https://kirki.com/\" rel=\"noopener\" target=\"_blank\">Kirki</a></li>\n</ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Community Sponsors</strong></p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https://www.google.com/url?sa=E&amp;q=https%3A%2F%2Fcrowdzonebd.com%2F\" rel=\"noopener\" target=\"_blank\">Crowd Zone</a>,</li>\n\n\n\n<li><a href=\"https://exprovia.com/\" rel=\"noopener\" target=\"_blank\">Exprovia</a>,</li>\n\n\n\n<li>NT Tech Innovation,</li>\n\n\n\n<li><a href=\"https://padmazon.com.bd/\" rel=\"noopener\" target=\"_blank\">Padmazon Limited</a>,</li>\n\n\n\n<li><a href=\"https://shapedplugin.com/\" rel=\"noopener\" target=\"_blank\">ShapedPlugin</a>,</li>\n\n\n\n<li><a href=\"https://sigmative.com/\" rel=\"noopener\" target=\"_blank\">Sigmative</a>,</li>\n\n\n\n<li><a href=\"https://timetics.ai/\" rel=\"noopener\" target=\"_blank\">Timetics AI</a>,</li>\n\n\n\n<li><a href=\"https://wpbakery.com/\" rel=\"noopener\" target=\"_blank\">WPBakery</a>.</li>\n</ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Official Partners</strong></p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>FM Networks (Internet Partner)</li>\n\n\n\n<li>TNR Soft (Payment Gateway Partner)</li>\n</ul>\n\n\n\n<p class=\"wp-block-paragraph\">Their support enabled the community to deliver a world-class experience while keeping the event affordable and accessible.</p>\n\n\n\n<h2 class=\"wp-block-heading\">Thank You to Everyone Behind the Scenes</h2>\n\n\n\n<p class=\"wp-block-paragraph\">An event of this scale is never the work of a single person.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Our sincere appreciation goes to every speaker and Contributor Day table lead who generously shared their knowledge and experience with the community.</p>\n\n\n\n<p class=\"wp-block-paragraph\">We are equally grateful to our organizers and volunteers. From sponsorship coordination, website management, registration, design, photography, audiovisual production, venue operations, food management, and attendee support, every team member played a vital role in ensuring the event ran smoothly.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Their dedication transformed months of planning into an unforgettable experience for every attendee.</p>\n\n\n\n<h2 class=\"wp-block-heading\">Looking Ahead</h2>\n\n\n\n<p class=\"wp-block-paragraph\">WordCamp Rajshahi 2026 demonstrated what is possible when passionate volunteers, contributors, sponsors, and community members work toward a common goal.</p>\n\n\n\n<p class=\"wp-block-paragraph\">The event was more than a conference—it was a celebration of learning, collaboration, and the open-source values that make WordPress one of the world&#8217;s most successful communities.</p>\n\n\n\n<p class=\"wp-block-paragraph\">As the community continues to grow, the relationships built, ideas shared, and contributions made during WordCamp Rajshahi 2026 will inspire future events and encourage even more people to participate in the global WordPress ecosystem.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Here&#8217;s to many more WordCamps, more contributors, and a stronger open-source community in Bangladesh and beyond.</p>\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Mon, 20 Jul 2026 19:05:31 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:12:\"Nazmul Hosen\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:43;a:6:{s:4:\"data\";s:21:\"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:111:\"Gutenberg Times: #WCUS Schedule, iframed Post Editor, WooCommerce 11.0 and so much more — Weekend Edition 369\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://gutenbergtimes.com/?p=46063\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:115:\"https://gutenbergtimes.com/wcus-schedule-iframed-post-editor-woocommerce-11-0-and-so-much-more-weekend-edition-369/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:23662:\"<p class=\"wp-block-paragraph\">Hi there!</p>\n\n\n\n<p class=\"wp-block-paragraph\">What a week! WordPress 7.1 Beta 1 (and Beta 2) arrived with a huge array of updates. We&#8217;ll unpack them together over the next four weeks, right up to the final release on August 19, 2026.</p>\n\n\n\n<p class=\"wp-block-paragraph\">One thing shouldn&#8217;t wait, though: the security release WordPress 7.0.2. Go update your production sites now — this newsletter will still be here when you&#8217;re back. <img alt=\"😉\" class=\"wp-smiley\" src=\"https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png\" style=\"height: 1em;\" /></p>\n\n\n\n<p class=\"wp-block-paragraph\">In this edition, you&#8217;ll also find the first speaker lineup for WordCamp US, a fourth page-builder migration story, WooCommerce 11.0 on the horizon, and plenty of block development goodness:  from iframed editors to on-brand maintenance pages.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Grab your favorite Saturday beverage and dig in.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Yours, <img alt=\"💕\" class=\"wp-smiley\" src=\"https://s.w.org/images/core/emoji/17.0.2/72x72/1f495.png\" style=\"height: 1em;\" /><br /><em>Birgit</em></p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n\n<h2 class=\"wp-block-heading\"><strong>WordCamp US 2026: Four Tracks, Three Workshops, 33 Speakers</strong></h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https://us.wordcamp.org/2026/announcing-our-first-round-of-speakers-2/\"><img alt=\"First speaker spotlight WordCamp US&gt; \" class=\"wp-image-46081\" height=\"343\" src=\"https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2026/07/Speakers-WordCamp-Us.png?resize=652%2C343&#038;ssl=1\" width=\"652\" /></a></figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The first wave of WCUS 2026 speakers is live — and it reads like a who&#8217;s-who of WordPress in practice.</strong></p>\n\n\n\n<p class=\"wp-block-paragraph\">WordCamp US just <a href=\"https://us.wordcamp.org/2026/speakers/\">published its opening lineup</a> for August 16–19 in Phoenix: 34 confirmed speakers so far, including <strong>K Adam White, Brian Coords, Jamie Marsland, Kathy Zant, Miriam Schwab, and Robert Abela</strong>, all experienced developers, educators, security specialists, community builders.</p>\n\n\n\n<p class=\"wp-block-paragraph\">The program runs four tracks. </p>\n\n\n\n<ul class=\"wp-block-list has-small-font-size\">\n<li><strong>AI in Action</strong> leads with sessions on agentic workflows, AI search, and guardrails for AI-assisted development. </li>\n\n\n\n<li><strong>Honing Your Skills</strong> covers the practical side: maintenance, privacy compliance, creator commerce, security. </li>\n\n\n\n<li><strong>Technical WordPress</strong> digs into block migrations at scale, WP-CLI automation, and plugin pipelines. </li>\n\n\n\n<li><strong>Beginning WP101</strong> is the on-ramp for newcomers — or for clients you&#8217;re bringing along.</li>\n\n\n\n<li>Three <strong>hands-on workshop</strong>s round out the program, where you build something real in the room and leave with it.<br /></li>\n</ul>\n\n\n\n<p class=\"wp-block-paragraph\">The full session schedule isn&#8217;t out yet, but the speaker list alone is a useful signal. If someone on that page is a voice you follow, a tool you depend on, or a corner of WordPress you&#8217;re actively navigating, you now have a specific reason to be in the room.<br /><br /><img alt=\"🎟\" class=\"wp-smiley\" src=\"https://s.w.org/images/core/emoji/17.0.2/72x72/1f39f.png\" style=\"height: 1em;\" /> <a href=\"https://us.wordcamp.org/2026/tickets\" rel=\"noopener\" target=\"_blank\">us.wordcamp.org/2026/tickets</a> — $100 General Admission · $750 Micro-Sponsor (includes listing on the sponsors page) <img alt=\"👥\" class=\"wp-smiley\" src=\"https://s.w.org/images/core/emoji/17.0.2/72x72/1f465.png\" style=\"height: 1em;\" /> <a href=\"https://us.wordcamp.org/2026/speakers/\" rel=\"noopener\" target=\"_blank\">Full speaker list →</a></p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"0-word-press-release-information\">Developing Gutenberg and WordPress</h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https://wordpress.org/news/2026/07/wordpress-7-1-beta-1/\"><strong>WordPress 7.1 Beta </strong>1</a> was release on July 15, 2026.  is now available for testing. The release post offers instructions how to sent up a test side and shows an extensive list of new features. </p>\n\n\n\n<p class=\"wp-block-paragraph\">The security team released <a href=\"https://wordpress.org/news/2026/07/wordpress-7-0-2-release/\"><strong>WordPress 7.0.2</strong></a> with the urgent appeal to update right away. The security fixes were also backported in 6.9.5 and 6.8.6. </p>\n\n\n\n<p class=\"wp-block-paragraph\">The security fix was also included in <strong>WordPress 7.1 Beta 2</strong>, so testing sites are also protected during this release cycle. </p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Huzaifa Al Mesbah,</strong> from the Core Test team, published the accompanying <a href=\"https://make.wordpress.org/test/2026/07/15/help-test-wordpress-7-1/\"><strong>Help Test WordPress 7.1</strong></a> post. </p>\n\n\n\n<p class=\"wp-block-paragraph\">A few <strong>WordPress 7.1 Dev Notes</strong> are already available: </p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https://make.wordpress.org/core/2026/07/13/consistent-navigation-in-wordpress-7-1-with-persistent-toolbar/\">Consistent navigation in WordPress 7.1 with persistent toolbar</a> </li>\n\n\n\n<li><a href=\"https://make.wordpress.org/core/2026/07/07/the-classic-block-stays-in-the-inserter-for-wordpress-7-1/\">The Classic block stays in the inserter for WordPress 7.1</a></li>\n</ul>\n\n\n\n<div class=\"wp-block-group has-light-background-background-color has-background\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<p class=\"wp-block-paragraph\"><img alt=\"🎙\" class=\"wp-smiley\" src=\"https://s.w.org/images/core/emoji/17.0.2/72x72/1f399.png\" style=\"height: 1em;\" /> The latest episode is <a href=\"https://gutenbergtimes.com/podcast/gutenberg-changelog-133-gutenberg-23-6-release-and-wordpress-7-1/\">Gutenberg Changelog #133 – Gutenberg 23.6 Release and WordPress 7.1</a></p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img alt=\"\" class=\"wp-image-46424\" height=\"186\" src=\"https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2026/08/Screenshot-2026-07-31-at-13.13.07.png?resize=652%2C186&#038;ssl=1\" width=\"652\" /></figure>\n\n\n<div class=\"wp-block-newsletterglue-showhide ng-block\" width=\"100%\">\n<figure class=\"wp-block-embed is-type-rich is-provider-pocket-casts wp-block-embed-pocket-casts\"><div class=\"wp-block-embed__wrapper\">\n\n</div></figure>\n</div></div></div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"0-p\">Plugins, Themes, and Tools for #nocode site builders and owners</h2>\n\n\n\n<p class=\"wp-block-paragraph\">In about 10 days, WooCommerce 11.0 release is schedule. Brain Coords has the skinny for you in <a href=\"https://developer.woocommerce.com/2026/07/13/woocommerce-11-0-pre-release/\"><strong>what&#8217;s coming for developers in WooCommerce</strong></a>. Performance leads the release with 28 PRs — product object caching becomes the default for new stores, speeding up variable products by 9–12%. You&#8217;ll also find email verification connecting guest orders to accounts, new phone validation hooks, video embeds in the block email editor, and the final removal of the Product Editor beta. The beta is ready for your testing now.</p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Jamie Marsland</strong> followed his instincts and build <a href=\"https://wordpress.org/plugins/jamies-front-end-editor-for-content-teams/\"><strong>Jamie&#8217;s Front-End Editor for Content Teams</strong></a>, a plugin that lets your editors click any paragraph or heading on the live page and start typing — no block editor required. With the latest updates, you can now edit text, links, buttons and images right on the live page. No wp-admin, no block editor, just click and change it in place.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Built on the Interactivity API with no build step, it preserves block markup on save, records edits as native block notes for an audit trail, and lets you restrict chosen roles to front-end-only editing. Let Marsland what you think. </p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https://gutenbergtimes.com/roadmap-7-1-gutenberg-23-5-responsive-styling-migration-to-block-themes-weekend-edition-368/\">Last week</a>, I shared three migration stories from page builders to the Core block editor and block themes. Here&#8217;s a fourth perspective: The team at WP Expert, an Ottawa agency founded by <strong>Frederic Sune</strong>, put together a comprehensive post on <a href=\"https://wpexpert.ca/migrate-agency-gutenberg-success/\"><strong>migrating agency sites from page builders to Gutenberg</strong></a>, should you go on that journey, too. You&#8217;ll find the strategic arguments (better Core Web Vitals, smaller attack surface, less technical debt) alongside a practical playbook covering backups, staging, block theme selection, pattern development, and SEO safeguards. The post also explores what block-based architectures mean for an agency&#8217;s business model, from premium modernization packages to fewer layout-related support tickets. An FAQ rounds it out.</p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"2-word-press-6-0-1-and-6-1-scheduled\">Theme Development for Full Site Editing and Blocks</h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Brian Coords</strong> tackles a common WooCommerce pain point: <a href=\"https://www.briancoords.com/custom-product-templates-for-block-themes/\"><strong>custom product templates for block themes</strong></a>. He combines two core WordPress features — the plugin template registration API from 6.7 and the venerable <code>single_template_hierarchy</code> filter — to serve custom templates for product collections, like all products in a category. His example plugin falls back to your Single Product template unless you override it. Clone the repo and give it a try; custom Product fields are next on his list.</p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n\n<p class=\"wp-block-paragraph\">On the WordPress Developer Blog, <strong>Troy Chaplin </strong>shows you how to build <strong><a href=\"https://developer.wordpress.org/news/2026/07/on-brand-maintenance-mode-for-wordpress-block-themes/\">an on-brand maintenance mode for block themes</a>.</strong> You add one small hook to your theme&#8217;s <code>functions.php</code> once, then design and manage the maintenance page entirely in the Site Editor with full access to your Global Styles. Renaming or deleting the template toggles maintenance mode on and off, no code needed. An SEO-friendly variant adds 503 headers so crawlers know the downtime is temporary.</p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https://developer.wordpress.org/news/2026/07/on-brand-maintenance-mode-for-wordpress-block-themes/\"><img alt=\"\" class=\"wp-image-46150\" height=\"345\" src=\"https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2026/07/maintenance-mode.png?resize=652%2C345&#038;ssl=1\" width=\"652\" /></a></figure>\n\n\n<div class=\"ng-block-f0173b44e71cc7cb wp-block-newsletterglue-container ng-block\" style=\"color: #666666;\" width=\"100%\"><div><div><div class=\"ng-block-vs ng-block-vs-1\" colspan=\"3\" height=\"0\" style=\"height: 0px;\"></div></div><div><div class=\"ng-block-hs ng-block-hs-1\" height=\"0\" style=\"width: 0px;\"></div><div align=\"none\" class=\"ng-block-td\" style=\"font-size: 16px; font-family: Helvetica; line-height: 1.6; font-weight: normal; padding-top: 20px; padding-bottom: 20px; padding-left: 0px; padding-right: 0px; text-align: none; color: #666666; background-color: #fdfcea; border-radius: 12px;\"><div class=\"ng-block-4e3658eaff886abb wp-block-newsletterglue-text ng-block\" style=\"color: #666666;\" width=\"100%\"><div><div><div align=\"none\" class=\"ng-block-td\" style=\"font-size: 16px; font-family: Helvetica; line-height: 1.6; font-weight: normal; padding-top: 8px; padding-bottom: 10px; padding-left: 20px; padding-right: 20px; text-align: none; color: #666666;\"><p><strong> <a href=\"https://make.wordpress.org/core/handbook/references/keeping-up-with-gutenberg-index/\" rel=\"noreferrer noopener\" target=\"_blank\">&#8220;Keeping up with Gutenberg &#8211; Index 2026&#8221;</a> </strong><br />A chronological list of the WordPress Make Blog posts from various teams involved in Gutenberg development: Design, Theme Review Team, Core Editor, Core JS, Core CSS, Test, and Meta team from Jan. 2024 on. Updated by yours truly. </p></div></div></div></div>\n\n<div class=\"ng-block-010ad8916a62fd65 wp-block-newsletterglue-text ng-block\" style=\"color: #666666;\" width=\"100%\"><div><div><div align=\"none\" class=\"ng-block-td\" style=\"font-size: 16px; font-family: Helvetica; line-height: 1.6; font-weight: normal; padding-top: 8px; padding-bottom: 10px; padding-left: 20px; padding-right: 20px; text-align: none; color: #666666;\"><p>The previous years are also available: <br /><strong><strong><a href=\"https://make.wordpress.org/core/handbook/references/keeping-up-with-gutenberg-index/keeping-up-with-gutenberg-index-2020/\">2020</a> | <a href=\"https://make.wordpress.org/core/handbook/references/keeping-up-with-gutenberg-index/keeping-up-with-gutenberg-index-2021/\">2021</a></strong> | <strong><a href=\"https://make.wordpress.org/core/handbook/references/keeping-up-with-gutenberg-index/keeping-up-with-gutenberg-index-2022/\">2022</a></strong></strong> | <strong><a href=\"https://make.wordpress.org/core/handbook/references/keeping-up-with-gutenberg-index/gutenberg-index-2023\">2023</a></strong> | <a href=\"https://make.wordpress.org/core/handbook/references/keeping-up-with-gutenberg-index/gutenberg-index-2024/\"><strong>2024</strong></a> | <strong><a href=\"https://make.wordpress.org/core/handbook/references/keeping-up-with-gutenberg-index/gutenberg-index-2025/\">2025</a></strong></p></div></div></div></div></div><div class=\"ng-block-hs ng-block-hs-2\" height=\"0\" style=\"width: 0px;\"></div></div><div><div class=\"ng-block-vs ng-block-vs-2\" colspan=\"3\" height=\"0\" style=\"height: 0px;\"></div></div></div></div>\n\n\n<h2 class=\"wp-block-heading\" id=\"3-building-themes-for-fse-and-word-press\">Building Blocks and Tools </h2>\n\n\n\n<p class=\"wp-block-paragraph\">On WP Mayor, <strong>Jean Galea </strong>untangles <strong><a href=\"https://wpmayor.com/wp-cli-vs-rest-api-vs-abilities-api/\">when to reach for WP-CLI, the REST API, or the Abilities API</a>.</strong> His mental model: they&#8217;re layers, not rivals. WP-CLI lives on the server for bulk work, REST serves off-server callers like headless front ends, and the Abilities API tells AI agents what they&#8217;re allowed to do, complete with schemas and permission checks. Galea also shares how his own sites lean on all three at once.</p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n\n<p class=\"wp-block-paragraph\">Get up to speed how to make your custom blocks plugin work in the iframed post editor, if you haven&#8217;t yet. After five years of ruminating and communicating the switch is coming to WordPress 7.1. In his post, <strong>Ryan Welcher</strong> explains <a href=\"https://gutenbergtimes.com/the-post-editor-is-going-full-iframe-what-block-developers-need-to-know-before-wordpress-7-1/\"><strong>why the post editor is going full iframe in WordPress 7.1</strong></a> and what that means for your custom blocks. You&#8217;ll find the fixes for the most common breakage — global <code>window</code> and <code>document</code> references, editor styles enqueued into the wrong document, stale admin-scoped CSS, and third-party libraries — plus a companion demo plugin with broken/fixed block pairs, Playground blueprints for testing both states, and a handy pre-flight checklist.</p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n\n<p class=\"wp-block-paragraph\">The video volunteers at WordCamp Portugal uploaded all recordings to WordPressTV and two of the talks caught my eye: </p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Imran Sayed</strong> walks you through <a href=\"https://wordpress.tv/2026/05/19/the-fastest-way-to-build-gutenberg-blocks-modern-tools-scripts-and-ai-2/\"><strong>the fastest way to build Gutenberg blocks with modern tools, scripts, and AI</strong></a>. If custom block development has felt complex or time-consuming, you&#8217;ll appreciate his focus on practical, real-world workflows you can adopt immediately — moving fast without over-engineering. The recording is available on WordPress.tv, and the presentation slides are linked below the video for easy reference.</p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Jorge Costa</strong> shows you how to use <a href=\"https://wordpress.tv/2026/05/19/ai-is-in-wordpress-core-heres-how-to-use-it/\">t<strong>he AI building blocks already shipped in WordPress core</strong></a> (the WP AI Client, the Abilities API, and the MCP adapter)  to bring AI-powered features into your own plugins, themes, and sites. He also tackles the bigger question: when agents can spin up entire projects on any stack, why is WordPress still the right bet? <a href=\"https://portugal.wordcamp.org/2026/files/2026/05/T1-12H30-jorge-slides_260516_095705.pdf\">Slides are linked</a> alongside the recording.</p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n\n<p class=\"wp-block-paragraph\">Check out the not so new any more <strong>Talk Devy to Me</strong> series on Ryan Welchers YouTube Channel! In the latest epsiode, <strong>Antonio Sejas</strong> <a href=\"https://www.youtube.com/watch?v=YZWwP1QHXKM\"><strong>demos Studio Code, the agentic AI assistant</strong></a> built into WordPress Studio&#8217;s desktop app and CLI. You can spin up sites, run performance audits, add content, and install plugins and themes through natural language conversation — all locally, so nothing you break goes public. Sejas explains how it works under the hood before building something live with the host. Studio Code is free while in beta, so now&#8217;s a good time to experiment. </p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n\n<p class=\"wp-block-paragraph\">If you rather want to read about the updates in WordPress Studio, <strong>Fredrik Rombach Ekelund</strong> shares <a href=\"https://wordpress.com/blog/2026/07/13/faster-wordpress-studio/\"><strong>three big updates to WordPress Studio</strong></a>: a new default Native PHP runtime makes your local sites load 30–50% faster while using a third of the memory, the Studio CLI now installs with one dependency-free command — no Node.js or npm required — and Claude Sonnet 5 is the new default model in Studio Code, improving multi-step work like tracing bugs across files. A Sandbox runtime remains available for testing untrusted code.</p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n<div class=\"ng-block-e4ec2d69e5db72cf wp-block-newsletterglue-container ng-block\" style=\"color: #666666;\" width=\"100%\"><div><div><div class=\"ng-block-vs ng-block-vs-1\" colspan=\"3\" height=\"0\" style=\"height: 0px;\"></div></div><div><div class=\"ng-block-hs ng-block-hs-1\" height=\"0\" style=\"width: 0px;\"></div><div align=\"none\" class=\"ng-block-td\" style=\"font-size: 16px; font-family: Helvetica; line-height: 1.6; font-weight: normal; padding-top: 20px; padding-bottom: 20px; padding-left: 0px; padding-right: 0px; text-align: none; color: #666666; background-color: #f8f8f8; border-radius: 8px;\"><div class=\"ng-block-a0910894527c6b08 wp-block-newsletterglue-text ng-block\" style=\"color: #666666;\" width=\"100%\"><div><div><div align=\"none\" class=\"ng-block-td\" style=\"font-size: 16px; font-family: Helvetica; line-height: 1.6; font-weight: normal; padding-top: 8px; padding-bottom: 10px; padding-left: 20px; padding-right: 20px; text-align: none; color: #666666;\"><p><strong><a href=\"https://gutenbergtimes.com/need-a-zip-from-master/\">Need a plugin .zip from Gutenberg&#8217;s master branch?</a></strong><br />Gutenberg Times provides daily build for testing and review.</p></div></div></div></div>\n\n<div class=\"ng-block-d95c4e6204351766 wp-block-newsletterglue-image ng-block size-full is-resized\" width=\"100%\"><div><div><div align=\"center\" class=\"ng-block-td\" style=\"padding-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px;\"><a href=\"https://playground.wordpress.net/?blueprint-url=https://gutenbergtimes.com/wp-content/uploads/2020/11/playnightly.json\"><img alt=\"\" class=\"wp-image-42874 ng-image\" height=\"45\" src=\"https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2024/02/Screenshot-2025-11-15-at-12.06.44.png?resize=196%2C45&#038;ssl=1\" style=\"border-style: none; border-color: transparent;\" width=\"196\" /></a></div></div></div></div>\n\n<div class=\"ng-block-98831f05991fed79 wp-block-newsletterglue-text ng-block\" style=\"color: #666666;\" width=\"100%\"><div><div><div align=\"none\" class=\"ng-block-td\" style=\"font-size: 16px; font-family: Helvetica; line-height: 1.6; font-weight: normal; padding-top: 8px; padding-bottom: 10px; padding-left: 20px; padding-right: 20px; text-align: none; color: #666666;\"><p>Now also available via <a href=\"https://playground.wordpress.net/?blueprint-url=https://gutenbergtimes.com/wp-content/uploads/2020/11/playnightly.json\">WordPress Playground</a>. There is no need for a test site locally or on a server. Have you been using it? <a href=\"mailto:pauli@gutenbergtimes.com\">Email me </a>with your experience.</p></div></div></div></div></div><div class=\"ng-block-hs ng-block-hs-2\" height=\"0\" style=\"width: 0px;\"></div></div><div><div class=\"ng-block-vs ng-block-vs-2\" colspan=\"3\" height=\"0\" style=\"height: 0px;\"></div></div></div></div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n\n<p class=\"has-text-align-center has-small-font-size wp-block-paragraph\"><em>Questions? Suggestions? Ideas? </em><br /><em>Don&#8217;t hesitate to send <a href=\"mailto:pauli@gutenbergtimes.com\">them via email</a> or</em><br /><em> send me a message on WordPress Slack or Twitter @bph</em>.</p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" />\n\n\n\n<p class=\"has-text-align-center has-small-font-size wp-block-paragraph\">For questions to be answered on the <a href=\"http://gutenbergtimes.com/podcast\">Gutenberg Changelog</a>, <br />send them to <a href=\"mailto:changelog@gutenbergtimes.com\">changelog@gutenbergtimes.com</a></p>\n\n\n<div class=\"ng-block-2375986b41bb80fb wp-block-newsletterglue-separator ng-block\" style=\"color: #666666;\" width=\"100%\"><div><div><div align=\"center\" class=\"ng-block-td\" style=\"padding-top: 20px; padding-bottom: 20px; padding-left: 20px; padding-right: 20px; color: #666666;\"><hr style=\"background-color: transparent; color: transparent; margin: 0; border: 0; border-top: 1px solid #666666; width: 560px; height: 0;\" /></div></div></div></div>\n\n<div class=\"wp-block-newsletterglue-showhide ng-block\" width=\"100%\"><div class=\"ng-block-2a92790d24e815ec wp-block-newsletterglue-text ng-block\" style=\"color: #666666;\" width=\"100%\"><div><div><div align=\"none\" class=\"ng-block-td\" style=\"font-size: 14px; font-family: Helvetica; line-height: 0.2; font-weight: normal; padding-top: 8px; padding-bottom: 10px; padding-left: 20px; padding-right: 20px; text-align: none; color: #666666;\"><p><strong>Featured Image: </strong></p></div></div></div></div></div>\n\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Sat, 18 Jul 2026 13:15:22 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:18:\"Birgit Pauli-Haack\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:44;a:6:{s:4:\"data\";s:21:\"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Matt: Important Security Update\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:23:\"https://ma.tt/?p=153595\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:34:\"https://ma.tt/2026/07/wp-security/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:2168:\"<p class=\"wp-block-paragraph\"><a href=\"https://wordpress.org/news/2026/07/wordpress-7-0-2-release/\">WordPress 7.0.2</a> went out today with two important security updates. One is a type of pre-authorization RCE we (fortunately!) have only seen a few times in WordPress&#8217; 23-year history; the last, I believe, <a href=\"https://wordpress.org/documentation/wordpress-version/version-4-6-21/\">in the PHPMailer class five years ago</a>. </p>\n\n\n\n<p class=\"wp-block-paragraph\">Major kudos to <a href=\"https://x.com/hash_kitten\">Adam Kues</a> of <a href=\"https://slcyber.io/\">Searchlight Cyber</a> for finding the batch REST API RCE, to TF1T, dtro, and haongo on the facilitated SQL injection! </p>\n\n\n\n<p class=\"wp-block-paragraph\">Thanks to <a href=\"https://en.wikipedia.org/wiki/Coordinated_vulnerability_disclosure\">responsible disclosure</a>, the WordPress.org Security team was able to coordinate with hosts and CDNs to mitigate the attack at the network layer. <em>Please upgrade anyway!</em> But it&#8217;s a huge relief to know the vast majority of WordPress sites were protected by <a href=\"https://en.wikipedia.org/wiki/Defense_in_depth_(computing)\">defense-in-depth</a> even before the updates went out. </p>\n\n\n\n<p class=\"wp-block-paragraph\">I really appreciate how people and organizations that otherwise might not be on the best of terms come together in times like this. (<a href=\"https://wordpress.org/news/2026/07/wordpress-7-0-2-release/\">Full credits in the release post</a>.) Everyone buries the hatchet to protect as many people as possible as quickly as possible.</p>\n\n\n\n<p class=\"wp-block-paragraph\">I&#8217;ve said it before, I&#8217;ll say it again: security is going to be a big topic this year as the technology industry digests the incredible advances in AI models. It&#8217;s a good time to review your plans and processes, sweat the details, <a href=\"https://www.amazon.com/dp/1953953492\">invest in maintenance</a>, and <a href=\"https://en.wikipedia.org/wiki/System_Administrator_Appreciation_Day\">hug a sysadmin</a>. <img alt=\"🙂\" class=\"wp-smiley\" src=\"https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png\" style=\"height: 1em;\" /></p>\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Sat, 18 Jul 2026 02:36:16 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:4:\"Matt\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:45;a:6:{s:4:\"data\";s:21:\"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:43:\"WordPress.org blog: WordPress 7.0.2 Release\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://wordpress.org/news/?p=21167\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:59:\"https://wordpress.org/news/2026/07/wordpress-7-0-2-release/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:4462:\"<h2 class=\"wp-block-heading\">WordPress 7.0.2 is now available.</h2>\n\n\n\n<p class=\"wp-block-paragraph\">The 7.0.2 security release addresses one critical and one high severity security issue.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Because this is a security release, <strong>it is recommended that you update your sites immediately.</strong> Due to the severity, the WordPress.org team have enabled forced updates via the auto-update system for sites running affected versions.</p>\n\n\n\n<p class=\"wp-block-paragraph\">To manually update you can visit your WordPress Dashboard, click “Updates”, and then click “Update Now”, or you can <a href=\"https://wordpress.org/wordpress-7.0.2.zip\">download WordPress 7.0.2 from WordPress.org</a>. On sites that support automatic background updates, the update process will begin automatically.</p>\n\n\n\n<h2 class=\"wp-block-heading\">Security updates included in this release</h2>\n\n\n\n<p class=\"wp-block-paragraph\">The security team would like to thank the following people for responsibly <a href=\"https://hackerone.com/wordpress\">reporting</a> vulnerabilities and allowing them to be fixed in this release:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A facilitated SQL injection issue reported as a team by TF1T, dtro, and haongo </li>\n\n\n\n<li>A REST API batch-route confusion and SQL injection issue leading to Remote Code Execution reported by Adam Kues at <a href=\"https://slcyber.io\"><u>Assetnote / Searchlight Cyber</u></a></li>\n</ul>\n\n\n\n<p class=\"wp-block-paragraph\">For more information on this release, please visit the <a href=\"https://wordpress.org/documentation/wordpress-version/version-7-0-2/\">HelpHub site</a>.</p>\n\n\n\n<h2 class=\"wp-block-heading\">Backports</h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>WordPress 6.9 is affected by both vulnerabilities. Version 6.9.5 has been released containing fixes for both.</li>\n\n\n\n<li>WordPress 6.8 is only affected by the first vulnerability. Version 6.8.6 has been released containing a fix.</li>\n\n\n\n<li>The beta release of WordPress 7.1 is affected by both vulnerabilities. Version 7.1 beta2 has been released containing fixes for both.</li>\n\n\n\n<li>Versions of WordPress prior to 6.8 are not affected.</li>\n</ul>\n\n\n\n<h2 class=\"wp-block-heading\">CVE and GHSA references</h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https://github.com/WordPress/wordpress-develop/security/advisories/GHSA-fpp7-x2x2-2mjf\"><code>CVE-2026-60137</code> / <code>GHSA-fpp7-x2x2-2mjf</code></a></li>\n\n\n\n<li><a href=\"https://github.com/WordPress/wordpress-develop/security/advisories/GHSA-ff9f-jf42-662q\"><code>CVE-2026-63030</code> / <code>GHSA-ff9f-jf42-662q</code></a></li>\n</ul>\n\n\n\n<h2 class=\"wp-block-heading\">Thank you to these WordPress contributors</h2>\n\n\n\n<p class=\"wp-block-paragraph\">This release was led by <a href=\"https://profiles.wordpress.org/johnbillion/\">John Blackbourn</a> and <a href=\"https://profiles.wordpress.org/barry/\">Barry Abrahamson</a>. In addition to the security researchers mentioned above, WordPress 7.0.2 would not have been possible without the significant contributions of the following people: <a href=\"https://profiles.wordpress.org/jorbin\">Aaron Jorbin</a>, <a href=\"https://profiles.wordpress.org/xknown\">Alex Concha</a>, <a href=\"https://profiles.wordpress.org/annezazu\">annezazu</a>, <a href=\"https://profiles.wordpress.org/Barry\">Barry</a>, <a href=\"https://profiles.wordpress.org/davidbaumwald\">David Baumwald</a>, <a href=\"https://profiles.wordpress.org/ocean90\">Dominik Schilling</a>, <a href=\"https://profiles.wordpress.org/ehtis\">Ehtisham Siddiqui</a>, <a href=\"https://profiles.wordpress.org/joedolson\">Joe Dolson</a>, <a href=\"https://profiles.wordpress.org/joehoyle\">Joe Hoyle</a>, <a href=\"https://profiles.wordpress.org/johnbillion\">John Blackbourn</a>, <a href=\"https://profiles.wordpress.org/desrosj\">Jonathan Desrosiers</a>, <a href=\"https://profiles.wordpress.org/clorith\">Marius L. J.</a>, <a href=\"https://profiles.wordpress.org/Matt\">Matt Mullenweg</a>, <a href=\"https://profiles.wordpress.org/batmoo\">Mohammad Jangda</a>, <a href=\"https://profiles.wordpress.org/peterwilsoncc\">Peter Wilson</a>, <a href=\"https://profiles.wordpress.org/sergeybiryukov\">Sergey Biryukov</a>, <a href=\"https://profiles.wordpress.org/vortfu\">vortfu</a>, <a href=\"https://profiles.wordpress.org/westonruter\">Weston Ruter</a>, plus representatives from Altis, Automattic, Bluehost, Cloudflare, GoDaddy, Hostinger, and WP Engine.</p>\n\n\n\n<p class=\"wp-block-paragraph\"></p>\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Fri, 17 Jul 2026 18:45:54 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:15:\"John Blackbourn\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:46;a:6:{s:4:\"data\";s:21:\"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:110:\"Gutenberg Times: The post editor is going full iframe: what block developers need to know before WordPress 7.1\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://gutenbergtimes.com/?p=46095\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:120:\"https://gutenbergtimes.com/the-post-editor-is-going-full-iframe-what-block-developers-need-to-know-before-wordpress-7-1/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:55253:\"<p class=\"wp-block-paragraph\">For years, the post editor has lived a double life. The Site Editor renders your blocks inside an iframe. The post editor — where most people actually spend their time — renders them directly in the admin page. That split ends with WordPress 7.1: <strong>the post editor canvas will always be an iframe, on every theme, no matter what <code>apiVersion</code> your blocks declare</strong>. The Gutenberg plugin has been enforcing exactly this for months. If you ship blocks, assume the iframe.</p>\n\n\n\n<p class=\"wp-block-paragraph\">If your block never touches the global <code>document</code> or <code>window</code>, you can probably stop reading after you&#8217;ve changed <code>\"apiVersion\": 2</code> to <code>\"apiVersion\": 3</code> in <code>block.json</code>. For everyone else — and especially anyone shipping blocks that wrap third-party libraries — the iframe changes <em>where your code runs</em> versus <em>where your markup lives</em>. That gap is where things break.</p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Quick reference guide</strong>: <strong>Are your blocks ready?</strong></p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img alt=\"An infographic showing the checks and fixes for readying custom blocks for the WordPress 7.1 iframed editor\" class=\"wp-image-46098\" height=\"652\" src=\"https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2026/07/7.1-iframe-block-check.png?resize=652%2C652&#038;ssl=1\" width=\"652\" /></figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"timeline\">The timeline, in one table</h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Release</th><th>What happens</th></tr></thead><tbody><tr><td><strong>June 21, 2021</strong></td><td>The iframed editor was <a href=\"https://make.wordpress.org/core/2021/06/29/blocks-in-an-iframed-template-editor/\">announced on make.wordpress.org</a></td></tr><tr><td><strong>WordPress 6.9</strong> (Dec 2025)</td><td>Console warning (with <code>SCRIPT_DEBUG</code>) when a block registers with <code>apiVersion</code> 2 or lower. The <code>block.json</code> schema now only validates <code>apiVersion: 3</code>.</td></tr><tr><td><strong>WordPress 7.0</strong> (Apr 2026)</td><td>The iframe decision now looks at blocks <strong>actually inserted in the post</strong>, not every registered block. All inserted blocks on v3+ → canvas is iframed. Insert a single v1/v2 block → the iframe is removed on the fly. Nothing is enforced yet.<br /></td></tr><tr><td><strong>Gutenberg 22.6+</strong></td><td>The iframe is <strong>enforced regardless of theme</strong> — this is the feedback-gathering phase.</td></tr><tr><td><strong>WordPress 7.1</strong> (Aug 19, 2026)</td><td>The iframe is <strong>enforced on every theme</strong>, regardless of <code>apiVersion</code>. The conditions are gone, not tightened.</td></tr></tbody></table></figure>\n\n\n\n<p class=\"wp-block-paragraph\">The WordPress 7.0 change is subtle but important: before 7.0, one <code>apiVersion: 2</code> block <em>registered by any active plugin</em> — even one never used in the post — kept the entire editor out of the iframe for everyone. Now only inserted blocks count. Your v3 block gets the iframe until the user inserts a legacy one, at which point the editor quietly reloads the canvas without the iframe. The companion plugin ships a <code>legacy-api-v2</code> block so you can watch this happen — insert it into an otherwise-v3 post and the iframe disappears. In 7.1, that escape hatch closes.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Worth knowing, as an aside: the &#8220;every theme&#8221; decision landed in <a href=\"https://wordpress.org/news/2026/07/wordpress-7-1-beta-1/\" rel=\"noopener\" target=\"_blank\">WordPress 7.1 Beta 1</a>, and it&#8217;s deliberately being tested in public. Gutenberg merged <a href=\"https://github.com/WordPress/gutenberg/pull/74042\" rel=\"noopener\" target=\"_blank\">&#8220;Post editor: always iframe&#8221; (#74042)</a> on July 10, 2026, deleting the theme and <code>apiVersion</code> conditions outright. The 7.1 release lead signed off on that merge <a href=\"https://github.com/WordPress/gutenberg/pull/74042#issuecomment-4878384706\" rel=\"noopener\" target=\"_blank\">on the condition</a> that the team could &#8220;move to the softer approach&#8221; if Beta 1 feedback surfaced real problems — the softer approach being enforcement on block themes only, with everything else staying on the 7.0 rules. No specific mechanism is committed to; the plan is to respond to what the beta actually turns up.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Which is a reason to test harder, not to wait and see. If that rollback happens, the iframed and non-iframed editors both stay in the wild <em>longer</em> — and your block has to work in both regardless of which way it goes.</p>\n\n\n\n<p class=\"wp-block-paragraph\">It&#8217;s also worth noting that blocks that will break with the 7.1 changes are most likely <strong>already breaking in the Site Editor</strong>.</p>\n\n\n\n<h2 class=\"wp-block-heading\">Why the iframe is a good thing</h2>\n\n\n\n<p class=\"wp-block-paragraph\">This isn&#8217;t change for change sake. Rendering the canvas in an iframe gives the editor a real document boundary:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Admin CSS stops leaking into your content.</strong> No more <code>#wpadminbar</code>-adjacent style resets, no more admin styles subtly changing how blocks render in the editor versus the front end.</li>\n\n\n\n<li><strong>Viewport units and media queries finally work.</strong> <code>vw</code>, <code>vh</code>, and <code>@media</code> rules resolve against the canvas, not the admin page — so tablet/mobile previews and zoomed-out views actually behave like the front end.</li>\n\n\n\n<li><strong>What you see is much closer to what you get.</strong> The canvas document is built from your theme&#8217;s styles, not the admin&#8217;s.</li>\n</ul>\n\n\n\n<p class=\"wp-block-paragraph\">The issue this raises for block developers? Your editor JavaScript runs in the admin page, but your block&#8217;s DOM lives in a different document. Every assumption baked into <code>document.querySelector(...)</code> and <code>window.addEventListener(...)</code> just became wrong.</p>\n\n\n\n<h2 class=\"wp-block-heading\">What actually breaks (and how to fix it)</h2>\n\n\n\n<p class=\"wp-block-paragraph\">Everything below is demonstrable with the companion plugin — each pattern ships as a broken/fixed pair of blocks: <strong><a href=\"https://github.com/ryanwelcher/iframe-editor-examples\" rel=\"noopener\" target=\"_blank\">iframe-editor-examples on GitHub</a></strong>.</p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Global <code>window</code> and <code>document</code> references</h3>\n\n\n\n<p class=\"wp-block-paragraph\">The classic: a block that reads the viewport or listens for resize.</p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\"><span style=\"display: flex; padding: 10px 0px 0 16px; font-size: 0.8em; width: 100%; text-align: left; background-color: #1E1E1E; font-style: italic; color: #D4D4D4;\"><span>JavaScript</span></span><span class=\"code-block-pro-copy-button\" style=\"color: #D4D4D4; display: none;\" tabindex=\"0\"><pre class=\"code-block-pro-copy-button-pre\"><textarea class=\"code-block-pro-copy-button-textarea\" readonly=\"readonly\" tabindex=\"-1\">// <img alt=\"❌\" class=\"wp-smiley\" src=\"https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png\" style=\"height: 1em;\" /> Broken in the iframed editor\nuseEffect( () => {\n	const update = () => setWidth( window.innerWidth );\n	update();\n	window.addEventListener( \'resize\', update );\n	return () => window.removeEventListener( \'resize\', update );\n}, [] );</textarea></pre><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"with-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path class=\"without-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6A9955;\">// &#x274c; Broken in the iframed editor</span></span>\n<span class=\"line\"><span style=\"color: #DCDCAA;\">useEffect</span><span style=\"color: #D4D4D4;\">( () </span><span style=\"color: #569CD6;\">=&gt;</span><span style=\"color: #D4D4D4;\"> {</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">	</span><span style=\"color: #569CD6;\">const</span><span style=\"color: #D4D4D4;\"> </span><span style=\"color: #DCDCAA;\">update</span><span style=\"color: #D4D4D4;\"> = () </span><span style=\"color: #569CD6;\">=&gt;</span><span style=\"color: #D4D4D4;\"> </span><span style=\"color: #DCDCAA;\">setWidth</span><span style=\"color: #D4D4D4;\">( </span><span style=\"color: #9CDCFE;\">window</span><span style=\"color: #D4D4D4;\">.</span><span style=\"color: #9CDCFE;\">innerWidth</span><span style=\"color: #D4D4D4;\"> );</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">	</span><span style=\"color: #DCDCAA;\">update</span><span style=\"color: #D4D4D4;\">();</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">	</span><span style=\"color: #9CDCFE;\">window</span><span style=\"color: #D4D4D4;\">.</span><span style=\"color: #DCDCAA;\">addEventListener</span><span style=\"color: #D4D4D4;\">( </span><span style=\"color: #CE9178;\">\'resize\'</span><span style=\"color: #D4D4D4;\">, </span><span style=\"color: #9CDCFE;\">update</span><span style=\"color: #D4D4D4;\"> );</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">	</span><span style=\"color: #C586C0;\">return</span><span style=\"color: #D4D4D4;\"> () </span><span style=\"color: #569CD6;\">=&gt;</span><span style=\"color: #D4D4D4;\"> </span><span style=\"color: #9CDCFE;\">window</span><span style=\"color: #D4D4D4;\">.</span><span style=\"color: #DCDCAA;\">removeEventListener</span><span style=\"color: #D4D4D4;\">( </span><span style=\"color: #CE9178;\">\'resize\'</span><span style=\"color: #D4D4D4;\">, </span><span style=\"color: #9CDCFE;\">update</span><span style=\"color: #D4D4D4;\"> );</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">}, [] );</span></span></code></pre></div>\n\n\n\n<p class=\"wp-block-paragraph\">Editor scripts load in the admin page, so <code>window</code> is the <strong>admin</strong> window. In the iframed editor this reports the wrong width and never reacts to the canvas resizing — switch to the Tablet preview and the number doesn&#8217;t move.</p>\n\n\n\n<p class=\"wp-block-paragraph\">The fix is to derive the document and window from your block&#8217;s own DOM element:</p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\"><span style=\"display: flex; padding: 10px 0px 0 16px; font-size: 0.8em; width: 100%; text-align: left; background-color: #1E1E1E; font-style: italic; color: #D4D4D4;\"><span>JavaScript</span></span><span class=\"code-block-pro-copy-button\" style=\"color: #D4D4D4; display: none;\" tabindex=\"0\"><pre class=\"code-block-pro-copy-button-pre\"><textarea class=\"code-block-pro-copy-button-textarea\" readonly=\"readonly\" tabindex=\"-1\">// <img alt=\"✅\" class=\"wp-smiley\" src=\"https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png\" style=\"height: 1em;\" /> Fixed — works iframed or not\nimport { useRefEffect } from \'@wordpress/compose\';\n\nconst ref = useRefEffect( ( element ) => {\n	const { defaultView } = element.ownerDocument;\n	const update = () => setWidth( defaultView.innerWidth );\n	update();\n	defaultView.addEventListener( \'resize\', update );\n	return () => defaultView.removeEventListener( \'resize\', update );\n}, [] );\n\nconst blockProps = useBlockProps( { ref } );</textarea></pre><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"with-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path class=\"without-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6A9955;\">// &#x2705; Fixed — works iframed or not</span></span>\n<span class=\"line\"><span style=\"color: #C586C0;\">import</span><span style=\"color: #D4D4D4;\"> { </span><span style=\"color: #9CDCFE;\">useRefEffect</span><span style=\"color: #D4D4D4;\"> } </span><span style=\"color: #C586C0;\">from</span><span style=\"color: #D4D4D4;\"> </span><span style=\"color: #CE9178;\">\'@wordpress/compose\'</span><span style=\"color: #D4D4D4;\">;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"color: #569CD6;\">const</span><span style=\"color: #D4D4D4;\"> </span><span style=\"color: #4FC1FF;\">ref</span><span style=\"color: #D4D4D4;\"> = </span><span style=\"color: #DCDCAA;\">useRefEffect</span><span style=\"color: #D4D4D4;\">( ( </span><span style=\"color: #9CDCFE;\">element</span><span style=\"color: #D4D4D4;\"> ) </span><span style=\"color: #569CD6;\">=&gt;</span><span style=\"color: #D4D4D4;\"> {</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">	</span><span style=\"color: #569CD6;\">const</span><span style=\"color: #D4D4D4;\"> { </span><span style=\"color: #4FC1FF;\">defaultView</span><span style=\"color: #D4D4D4;\"> } = </span><span style=\"color: #9CDCFE;\">element</span><span style=\"color: #D4D4D4;\">.</span><span style=\"color: #9CDCFE;\">ownerDocument</span><span style=\"color: #D4D4D4;\">;</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">	</span><span style=\"color: #569CD6;\">const</span><span style=\"color: #D4D4D4;\"> </span><span style=\"color: #DCDCAA;\">update</span><span style=\"color: #D4D4D4;\"> = () </span><span style=\"color: #569CD6;\">=&gt;</span><span style=\"color: #D4D4D4;\"> </span><span style=\"color: #DCDCAA;\">setWidth</span><span style=\"color: #D4D4D4;\">( </span><span style=\"color: #9CDCFE;\">defaultView</span><span style=\"color: #D4D4D4;\">.</span><span style=\"color: #9CDCFE;\">innerWidth</span><span style=\"color: #D4D4D4;\"> );</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">	</span><span style=\"color: #DCDCAA;\">update</span><span style=\"color: #D4D4D4;\">();</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">	</span><span style=\"color: #9CDCFE;\">defaultView</span><span style=\"color: #D4D4D4;\">.</span><span style=\"color: #DCDCAA;\">addEventListener</span><span style=\"color: #D4D4D4;\">( </span><span style=\"color: #CE9178;\">\'resize\'</span><span style=\"color: #D4D4D4;\">, </span><span style=\"color: #9CDCFE;\">update</span><span style=\"color: #D4D4D4;\"> );</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">	</span><span style=\"color: #C586C0;\">return</span><span style=\"color: #D4D4D4;\"> () </span><span style=\"color: #569CD6;\">=&gt;</span><span style=\"color: #D4D4D4;\"> </span><span style=\"color: #9CDCFE;\">defaultView</span><span style=\"color: #D4D4D4;\">.</span><span style=\"color: #DCDCAA;\">removeEventListener</span><span style=\"color: #D4D4D4;\">( </span><span style=\"color: #CE9178;\">\'resize\'</span><span style=\"color: #D4D4D4;\">, </span><span style=\"color: #9CDCFE;\">update</span><span style=\"color: #D4D4D4;\"> );</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">}, [] );</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"color: #569CD6;\">const</span><span style=\"color: #D4D4D4;\"> </span><span style=\"color: #4FC1FF;\">blockProps</span><span style=\"color: #D4D4D4;\"> = </span><span style=\"color: #DCDCAA;\">useBlockProps</span><span style=\"color: #D4D4D4;\">( { </span><span style=\"color: #9CDCFE;\">ref</span><span style=\"color: #D4D4D4;\"> } );</span></span></code></pre></div>\n\n\n\n<p class=\"wp-block-paragraph\">Two things to notice:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>element.ownerDocument</code> is whatever document the block is rendered into — the iframe&#8217;s document when iframed, the admin document when not. <code>ownerDocument.defaultView</code> is that document&#8217;s window. Code written this way is <em>context-agnostic</em>: it doesn&#8217;t care whether the iframe exists.</li>\n\n\n\n<li><code>useRefEffect</code> (from <code>@wordpress/compose</code>) instead of <code>useRef</code> + <code>useEffect</code>: it re-runs the callback when the ref changes, so if the block ever moves between documents, your listeners re-attach to the right window.</li>\n</ul>\n\n\n\n<h3 class=\"wp-block-heading\">2. &#8220;Close on outside click&#8221; and other document-level events</h3>\n\n\n\n<p class=\"wp-block-paragraph\">This one is my favorite because it fails <em>weirdly</em>. A dropdown that closes when you click outside, implemented the way every React tutorial teaches it:</p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\"><span style=\"display: flex; padding: 10px 0px 0 16px; font-size: 0.8em; width: 100%; text-align: left; background-color: #1E1E1E; font-style: italic; color: #D4D4D4;\"><span>JavaScript</span></span><span class=\"code-block-pro-copy-button\" style=\"color: #D4D4D4; display: none;\" tabindex=\"0\"><pre class=\"code-block-pro-copy-button-pre\"><textarea class=\"code-block-pro-copy-button-textarea\" readonly=\"readonly\" tabindex=\"-1\">// <img alt=\"❌\" class=\"wp-smiley\" src=\"https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png\" style=\"height: 1em;\" /> Broken in the iframed editor\nuseEffect( () => {\n	const closeOnOutsideClick = ( event ) => {\n		if ( ! containerRef.current.contains( event.target ) ) {\n			setIsOpen( false );\n		}\n	};\n	document.addEventListener( \'click\', closeOnOutsideClick );\n	return () => document.removeEventListener( \'click\', closeOnOutsideClick );\n}, [] );</textarea></pre><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"with-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path class=\"without-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6A9955;\">// &#x274c; Broken in the iframed editor</span></span>\n<span class=\"line\"><span style=\"color: #DCDCAA;\">useEffect</span><span style=\"color: #D4D4D4;\">( () </span><span style=\"color: #569CD6;\">=&gt;</span><span style=\"color: #D4D4D4;\"> {</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">	</span><span style=\"color: #569CD6;\">const</span><span style=\"color: #D4D4D4;\"> </span><span style=\"color: #DCDCAA;\">closeOnOutsideClick</span><span style=\"color: #D4D4D4;\"> = ( </span><span style=\"color: #9CDCFE;\">event</span><span style=\"color: #D4D4D4;\"> ) </span><span style=\"color: #569CD6;\">=&gt;</span><span style=\"color: #D4D4D4;\"> {</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">		</span><span style=\"color: #C586C0;\">if</span><span style=\"color: #D4D4D4;\"> ( ! </span><span style=\"color: #9CDCFE;\">containerRef</span><span style=\"color: #D4D4D4;\">.</span><span style=\"color: #9CDCFE;\">current</span><span style=\"color: #D4D4D4;\">.</span><span style=\"color: #DCDCAA;\">contains</span><span style=\"color: #D4D4D4;\">( </span><span style=\"color: #9CDCFE;\">event</span><span style=\"color: #D4D4D4;\">.</span><span style=\"color: #9CDCFE;\">target</span><span style=\"color: #D4D4D4;\"> ) ) {</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">			</span><span style=\"color: #DCDCAA;\">setIsOpen</span><span style=\"color: #D4D4D4;\">( </span><span style=\"color: #569CD6;\">false</span><span style=\"color: #D4D4D4;\"> );</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">		}</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">	};</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">	</span><span style=\"color: #9CDCFE;\">document</span><span style=\"color: #D4D4D4;\">.</span><span style=\"color: #DCDCAA;\">addEventListener</span><span style=\"color: #D4D4D4;\">( </span><span style=\"color: #CE9178;\">\'click\'</span><span style=\"color: #D4D4D4;\">, </span><span style=\"color: #9CDCFE;\">closeOnOutsideClick</span><span style=\"color: #D4D4D4;\"> );</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">	</span><span style=\"color: #C586C0;\">return</span><span style=\"color: #D4D4D4;\"> () </span><span style=\"color: #569CD6;\">=&gt;</span><span style=\"color: #D4D4D4;\"> </span><span style=\"color: #9CDCFE;\">document</span><span style=\"color: #D4D4D4;\">.</span><span style=\"color: #DCDCAA;\">removeEventListener</span><span style=\"color: #D4D4D4;\">( </span><span style=\"color: #CE9178;\">\'click\'</span><span style=\"color: #D4D4D4;\">, </span><span style=\"color: #9CDCFE;\">closeOnOutsideClick</span><span style=\"color: #D4D4D4;\"> );</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">}, [] );</span></span></code></pre></div>\n\n\n\n<p class=\"wp-block-paragraph\">In the iframed editor, clicks inside the canvas happen in the <strong>iframe&#8217;s</strong> document. They never bubble to the admin document, so the listener never fires. The result: click another block in the canvas and the dropdown stays open — but click the admin sidebar and it closes. Same code, same block, works perfectly in the non-iframed editor. This is the kind of bug report you&#8217;ll get from users that &#8220;can&#8217;t be reproduced&#8221; — because whoever tested it happened to have a v2 block sitting in their post, which quietly dropped the iframe and made everything work.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Fix: same principle, attach to <code>element.ownerDocument</code> instead of <code>document</code> (<a href=\"https://github.com/ryanwelcher/iframe-editor-examples/blob/trunk/src/click-outside-fixed/edit.js#L32\">see the plugin for the full <code>useRefEffect</code> version</a>).</p>\n\n\n\n<h3 class=\"wp-block-heading\">3. Editor styles enqueued into the wrong document</h3>\n\n\n\n<p class=\"wp-block-paragraph\">If you&#8217;re styling your block&#8217;s editor experience with <code>enqueue_block_editor_assets</code>, those styles load in the <strong>admin page</strong> — outside the iframe. They silently stop applying the moment the canvas is iframed:</p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\"><span style=\"display: flex; padding: 10px 0px 0 16px; font-size: 0.8em; width: 100%; text-align: left; background-color: #1E1E1E; font-style: italic; color: #D4D4D4;\"><span>PHP</span></span><span class=\"code-block-pro-copy-button\" style=\"color: #D4D4D4; display: none;\" tabindex=\"0\"><pre class=\"code-block-pro-copy-button-pre\"><textarea class=\"code-block-pro-copy-button-textarea\" readonly=\"readonly\" tabindex=\"-1\">// <img alt=\"❌\" class=\"wp-smiley\" src=\"https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png\" style=\"height: 1em;\" /> Loads in the admin page — never reaches the iframed canvas.\nfunction myplugin_enqueue_editor_styles() {\n	wp_enqueue_style( \'myplugin-editor\', plugins_url( \'editor.css\', __FILE__ ) );\n}\nadd_action( \'enqueue_block_editor_assets\', \'myplugin_enqueue_editor_styles\' );</textarea></pre><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"with-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path class=\"without-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6A9955;\">// &#x274c; Loads in the admin page — never reaches the iframed canvas.</span></span>\n<span class=\"line\"><span style=\"color: #569CD6;\">function</span><span style=\"color: #D4D4D4;\"> </span><span style=\"color: #DCDCAA;\">myplugin_enqueue_editor_styles</span><span style=\"color: #D4D4D4;\">() {</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">	</span><span style=\"color: #DCDCAA;\">wp_enqueue_style</span><span style=\"color: #D4D4D4;\">( </span><span style=\"color: #CE9178;\">\'myplugin-editor\'</span><span style=\"color: #D4D4D4;\">, </span><span style=\"color: #DCDCAA;\">plugins_url</span><span style=\"color: #D4D4D4;\">( </span><span style=\"color: #CE9178;\">\'editor.css\'</span><span style=\"color: #D4D4D4;\">, </span><span style=\"color: #569CD6;\">__FILE__</span><span style=\"color: #D4D4D4;\"> ) );</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">}</span></span>\n<span class=\"line\"><span style=\"color: #DCDCAA;\">add_action</span><span style=\"color: #D4D4D4;\">( </span><span style=\"color: #CE9178;\">\'enqueue_block_editor_assets\'</span><span style=\"color: #D4D4D4;\">, </span><span style=\"color: #CE9178;\">\'myplugin_enqueue_editor_styles\'</span><span style=\"color: #D4D4D4;\"> );</span></span></code></pre></div>\n\n\n\n<p class=\"wp-block-paragraph\">The fix is to register editor styles through <code>block.json</code>, which WordPress injects <strong>into</strong> the canvas document, iframed or not:</p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\"><span style=\"display: flex; padding: 10px 0px 0 16px; font-size: 0.8em; width: 100%; text-align: left; background-color: #1E1E1E; font-style: italic; color: #D4D4D4;\"><span>JSON</span></span><span class=\"code-block-pro-copy-button\" style=\"color: #D4D4D4; display: none;\" tabindex=\"0\"><pre class=\"code-block-pro-copy-button-pre\"><textarea class=\"code-block-pro-copy-button-textarea\" readonly=\"readonly\" tabindex=\"-1\">{\n	\"editorStyle\": \"file:./index.css\"\n}</textarea></pre><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"with-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path class=\"without-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4;\">{</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">	</span><span style=\"color: #9CDCFE;\">&quot;editorStyle&quot;</span><span style=\"color: #D4D4D4;\">: </span><span style=\"color: #CE9178;\">&quot;file:./index.css&quot;</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">}</span></span></code></pre></div>\n\n\n\n<p class=\"wp-block-paragraph\">(<code>add_editor_style()</code> also gets copied into the iframe, if you need theme-level editor styles.)</p>\n\n\n\n<p class=\"wp-block-paragraph\">The demo plugin makes this visual: the same block carries a green banner from <code>editorStyle</code> and a red banner from <code>enqueue_block_editor_assets</code>. Count the banners — two means no iframe, one means you&#8217;re iframed.</p>\n\n\n\n<h3 class=\"wp-block-heading\">4. Stale CSS written for the leaky editor</h3>\n\n\n\n<p class=\"wp-block-paragraph\">The section above is about CSS loading into the wrong document. This one is the sneakier inverse: the stylesheet loads into the <em>right</em> document — injected straight into the canvas, exactly as intended — and still gets it wrong, because of what it was written to describe. These are the rules that quietly stop matching, or start over-matching, once the canvas becomes its own document. It&#8217;s the code that&#8217;s been sitting in themes and plugins for years, &#8220;working,&#8221; right up until the iframe is enforced.</p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Selectors keyed on admin body classes</strong></h4>\n\n\n\n<p class=\"wp-block-paragraph\">The most common one, and it fails exactly like the &#8220;close on outside click&#8221; bug — silently.</p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\"><span style=\"display: flex; padding: 10px 0px 0 16px; font-size: 0.8em; width: 100%; text-align: left; background-color: #1E1E1E; font-style: italic; color: #D4D4D4;\"><span>CSS</span></span><span class=\"code-block-pro-copy-button\" style=\"color: #D4D4D4; display: none;\" tabindex=\"0\"><pre class=\"code-block-pro-copy-button-pre\"><textarea class=\"code-block-pro-copy-button-textarea\" readonly=\"readonly\" tabindex=\"-1\">/* <img alt=\"❌\" class=\"wp-smiley\" src=\"https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png\" style=\"height: 1em;\" /> The canvas body no longer carries these classes */\n.wp-admin .my-block { padding: 2rem; }\nbody.block-editor-page .my-block__title { font-size: 2rem; }</textarea></pre><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"with-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path class=\"without-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6A9955;\">/* &#x274c; The canvas body no longer carries these classes */</span></span>\n<span class=\"line\"><span style=\"color: #D7BA7D;\">.wp-admin</span><span style=\"color: #D4D4D4;\"> </span><span style=\"color: #D7BA7D;\">.my-block</span><span style=\"color: #D4D4D4;\"> { </span><span style=\"color: #9CDCFE;\">padding</span><span style=\"color: #D4D4D4;\">: </span><span style=\"color: #B5CEA8;\">2rem</span><span style=\"color: #D4D4D4;\">; }</span></span>\n<span class=\"line\"><span style=\"color: #D7BA7D;\">body.block-editor-page</span><span style=\"color: #D4D4D4;\"> </span><span style=\"color: #D7BA7D;\">.my-block__title</span><span style=\"color: #D4D4D4;\"> { </span><span style=\"color: #9CDCFE;\">font-size</span><span style=\"color: #D4D4D4;\">: </span><span style=\"color: #B5CEA8;\">2rem</span><span style=\"color: #D4D4D4;\">; }</span></span></code></pre></div>\n\n\n\n<p class=\"wp-block-paragraph\">Inside the iframe, the canvas <code>&lt;body&gt;</code> is a clean document — no <code>wp-admin</code>, no <code>block-editor-page</code>. The selector matches nothing and your editor styling just evaporates. Same block, same stylesheet, works perfectly in the non-iframed editor.</p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\"><span style=\"display: flex; padding: 10px 0px 0 16px; font-size: 0.8em; width: 100%; text-align: left; background-color: #1E1E1E; font-style: italic; color: #D4D4D4;\"><span>CSS</span></span><span class=\"code-block-pro-copy-button\" style=\"color: #D4D4D4; display: none;\" tabindex=\"0\"><pre class=\"code-block-pro-copy-button-pre\"><textarea class=\"code-block-pro-copy-button-textarea\" readonly=\"readonly\" tabindex=\"-1\">/* <img alt=\"✅\" class=\"wp-smiley\" src=\"https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png\" style=\"height: 1em;\" /> Scope to the block, not the admin chrome */\n.my-block { padding: 2rem; }\n.my-block__title { font-size: 2rem; }</textarea></pre><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"with-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path class=\"without-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6A9955;\">/* &#x2705; Scope to the block, not the admin chrome */</span></span>\n<span class=\"line\"><span style=\"color: #D7BA7D;\">.my-block</span><span style=\"color: #D4D4D4;\"> { </span><span style=\"color: #9CDCFE;\">padding</span><span style=\"color: #D4D4D4;\">: </span><span style=\"color: #B5CEA8;\">2rem</span><span style=\"color: #D4D4D4;\">; }</span></span>\n<span class=\"line\"><span style=\"color: #D7BA7D;\">.my-block__title</span><span style=\"color: #D4D4D4;\"> { </span><span style=\"color: #9CDCFE;\">font-size</span><span style=\"color: #D4D4D4;\">: </span><span style=\"color: #B5CEA8;\">2rem</span><span style=\"color: #D4D4D4;\">; }</span></span></code></pre></div>\n\n\n\n<p class=\"wp-block-paragraph\"><code>.editor-styles-wrapper</code> <em>does</em> still wrap the canvas content inside the iframe, so <code>.editor-styles-wrapper .my-block</code> keeps working if you need genuinely editor-only styling — but the admin ancestor was almost never necessary in the first place.</p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Offsets that compensate for admin chrome</strong></h4>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\"><span style=\"display: flex; padding: 10px 0px 0 16px; font-size: 0.8em; width: 100%; text-align: left; background-color: #1E1E1E; font-style: italic; color: #D4D4D4;\"><span>CSS</span></span><span class=\"code-block-pro-copy-button\" style=\"color: #D4D4D4; display: none;\" tabindex=\"0\"><pre class=\"code-block-pro-copy-button-pre\"><textarea class=\"code-block-pro-copy-button-textarea\" readonly=\"readonly\" tabindex=\"-1\">/* <img alt=\"❌\" class=\"wp-smiley\" src=\"https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png\" style=\"height: 1em;\" /> Subtracting the admin sidebar and adminbar from the viewport */\n.my-fullwidth { width: calc( 100vw - 160px ); } /* 160px = admin menu */\n.my-toolbar   { position: fixed; top: 32px; }   /* 32px = #wpadminbar */</textarea></pre><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"with-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path class=\"without-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6A9955;\">/* &#x274c; Subtracting the admin sidebar and adminbar from the viewport */</span></span>\n<span class=\"line\"><span style=\"color: #D7BA7D;\">.my-fullwidth</span><span style=\"color: #D4D4D4;\"> { </span><span style=\"color: #9CDCFE;\">width</span><span style=\"color: #D4D4D4;\">: </span><span style=\"color: #DCDCAA;\">calc</span><span style=\"color: #D4D4D4;\">( </span><span style=\"color: #B5CEA8;\">100vw</span><span style=\"color: #D4D4D4;\"> - </span><span style=\"color: #B5CEA8;\">160px</span><span style=\"color: #D4D4D4;\"> ); } </span><span style=\"color: #6A9955;\">/* 160px = admin menu */</span></span>\n<span class=\"line\"><span style=\"color: #D7BA7D;\">.my-toolbar</span><span style=\"color: #D4D4D4;\">   { </span><span style=\"color: #9CDCFE;\">position</span><span style=\"color: #D4D4D4;\">: </span><span style=\"color: #CE9178;\">fixed</span><span style=\"color: #D4D4D4;\">; </span><span style=\"color: #9CDCFE;\">top</span><span style=\"color: #D4D4D4;\">: </span><span style=\"color: #B5CEA8;\">32px</span><span style=\"color: #D4D4D4;\">; }   </span><span style=\"color: #6A9955;\">/* 32px = #wpadminbar */</span></span></code></pre></div>\n\n\n\n<p class=\"wp-block-paragraph\">This is the flip side of the win from earlier: now that <code>100vw</code> resolves against the <em>canvas</em> instead of the admin page, there&#8217;s no sidebar to subtract — so the <code>calc()</code> overshoots, and <code>top: 32px</code> pushes your toolbar below an admin bar that doesn&#8217;t exist in this document.</p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\"><span style=\"display: flex; padding: 10px 0px 0 16px; font-size: 0.8em; width: 100%; text-align: left; background-color: #1E1E1E; font-style: italic; color: #D4D4D4;\"><span>CSS</span></span><span class=\"code-block-pro-copy-button\" style=\"color: #D4D4D4; display: none;\" tabindex=\"0\"><pre class=\"code-block-pro-copy-button-pre\"><textarea class=\"code-block-pro-copy-button-textarea\" readonly=\"readonly\" tabindex=\"-1\">/* <img alt=\"✅\" class=\"wp-smiley\" src=\"https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png\" style=\"height: 1em;\" /> The canvas is the viewport now — no compensation needed */\n.my-fullwidth { width: 100vw; }\n.my-toolbar   { position: fixed; top: 0; }</textarea></pre><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"with-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path class=\"without-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6A9955;\">/* &#x2705; The canvas is the viewport now — no compensation needed */</span></span>\n<span class=\"line\"><span style=\"color: #D7BA7D;\">.my-fullwidth</span><span style=\"color: #D4D4D4;\"> { </span><span style=\"color: #9CDCFE;\">width</span><span style=\"color: #D4D4D4;\">: </span><span style=\"color: #B5CEA8;\">100vw</span><span style=\"color: #D4D4D4;\">; }</span></span>\n<span class=\"line\"><span style=\"color: #D7BA7D;\">.my-toolbar</span><span style=\"color: #D4D4D4;\">   { </span><span style=\"color: #9CDCFE;\">position</span><span style=\"color: #D4D4D4;\">: </span><span style=\"color: #CE9178;\">fixed</span><span style=\"color: #D4D4D4;\">; </span><span style=\"color: #9CDCFE;\">top</span><span style=\"color: #D4D4D4;\">: </span><span style=\"color: #B5CEA8;\">0</span><span style=\"color: #D4D4D4;\">; }</span></span></code></pre></div>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Specificity walls built to fight leakage</strong></h4>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\"><span style=\"display: flex; padding: 10px 0px 0 16px; font-size: 0.8em; width: 100%; text-align: left; background-color: #1E1E1E; font-style: italic; color: #D4D4D4;\"><span>CSS</span></span><span class=\"code-block-pro-copy-button\" style=\"color: #D4D4D4; display: none;\" tabindex=\"0\"><pre class=\"code-block-pro-copy-button-pre\"><textarea class=\"code-block-pro-copy-button-textarea\" readonly=\"readonly\" tabindex=\"-1\">/* <img alt=\"❌\" class=\"wp-smiley\" src=\"https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png\" style=\"height: 1em;\" /> Cranked up to beat leaking admin styles */\n.editor-styles-wrapper .my-block p {\n	font-family: Georgia, serif !important;\n	line-height: 1.6 !important;\n	box-sizing: border-box !important;\n}</textarea></pre><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"with-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path class=\"without-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6A9955;\">/* &#x274c; Cranked up to beat leaking admin styles */</span></span>\n<span class=\"line\"><span style=\"color: #D7BA7D;\">.editor-styles-wrapper</span><span style=\"color: #D4D4D4;\"> </span><span style=\"color: #D7BA7D;\">.my-block</span><span style=\"color: #D4D4D4;\"> </span><span style=\"color: #D7BA7D;\">p</span><span style=\"color: #D4D4D4;\"> {</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">	</span><span style=\"color: #9CDCFE;\">font-family</span><span style=\"color: #D4D4D4;\">: </span><span style=\"color: #CE9178;\">Georgia</span><span style=\"color: #D4D4D4;\">, </span><span style=\"color: #CE9178;\">serif</span><span style=\"color: #D4D4D4;\"> </span><span style=\"color: #569CD6;\">!important</span><span style=\"color: #D4D4D4;\">;</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">	</span><span style=\"color: #9CDCFE;\">line-height</span><span style=\"color: #D4D4D4;\">: </span><span style=\"color: #B5CEA8;\">1.6</span><span style=\"color: #D4D4D4;\"> </span><span style=\"color: #569CD6;\">!important</span><span style=\"color: #D4D4D4;\">;</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">	</span><span style=\"color: #9CDCFE;\">box-sizing</span><span style=\"color: #D4D4D4;\">: </span><span style=\"color: #CE9178;\">border-box</span><span style=\"color: #D4D4D4;\"> </span><span style=\"color: #569CD6;\">!important</span><span style=\"color: #D4D4D4;\">;</span></span>\n<span class=\"line\"><span style=\"color: #D4D4D4;\">}</span></span></code></pre></div>\n\n\n\n<p class=\"wp-block-paragraph\">The iframe already stops admin CSS from leaking in — that&#8217;s one of the reasons it&#8217;s a good thing. These <code>!important</code>s and resets have no admin styles left to override, but they <em>do</em> now override the theme styles the iframe loads into the canvas. The result: your editor preview drifts <em>away</em> from the front end — the exact opposite of what the iframe is for.</p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\"><span style=\"display: flex; padding: 10px 0px 0 16px; font-size: 0.8em; width: 100%; text-align: left; background-color: #1E1E1E; font-style: italic; color: #D4D4D4;\"><span>CSS</span></span><span class=\"code-block-pro-copy-button\" style=\"color: #D4D4D4; display: none;\" tabindex=\"0\"><pre class=\"code-block-pro-copy-button-pre\"><textarea class=\"code-block-pro-copy-button-textarea\" readonly=\"readonly\" tabindex=\"-1\">/* <img alt=\"✅\" class=\"wp-smiley\" src=\"https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png\" style=\"height: 1em;\" /> Let theme styles through; set only what your block truly owns */\n.my-block p { font-family: Georgia, serif; }</textarea></pre><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"with-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path class=\"without-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6A9955;\">/* &#x2705; Let theme styles through; set only what your block truly owns */</span></span>\n<span class=\"line\"><span style=\"color: #D7BA7D;\">.my-block</span><span style=\"color: #D4D4D4;\"> </span><span style=\"color: #D7BA7D;\">p</span><span style=\"color: #D4D4D4;\"> { </span><span style=\"color: #9CDCFE;\">font-family</span><span style=\"color: #D4D4D4;\">: </span><span style=\"color: #CE9178;\">Georgia</span><span style=\"color: #D4D4D4;\">, </span><span style=\"color: #CE9178;\">serif</span><span style=\"color: #D4D4D4;\">; }</span></span></code></pre></div>\n\n\n\n<p class=\"wp-block-paragraph\">Two things to notice:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The pattern is the same as the JavaScript fixes: <strong>stop describing the admin, start describing your block.</strong> A selector that names <code>.wp-admin</code>, <code>#wpadminbar</code>, or <code>.block-editor-page</code> is reaching for chrome that isn&#8217;t in the canvas document anymore.</li>\n\n\n\n<li>Most of these were <em>workarounds for problems the iframe solves.</em> Deleting them is usually the fix.</li>\n</ul>\n\n\n\n<h3 class=\"wp-block-heading\">5. Third-party libraries that assume one global context</h3>\n\n\n\n<p class=\"wp-block-paragraph\">The biggest real-world hazard. Masonry layouts, sliders, lightboxes, maps — a generation of libraries was written assuming there is exactly one <code>document</code>:</p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\"><span style=\"display: flex; padding: 10px 0px 0 16px; font-size: 0.8em; width: 100%; text-align: left; background-color: #1E1E1E; font-style: italic; color: #D4D4D4;\"><span>JavaScript</span></span><span class=\"code-block-pro-copy-button\" style=\"color: #D4D4D4; display: none;\" tabindex=\"0\"><pre class=\"code-block-pro-copy-button-pre\"><textarea class=\"code-block-pro-copy-button-textarea\" readonly=\"readonly\" tabindex=\"-1\">// Inside some-legacy-lib.js\nconst targets = document.querySelectorAll( selector ); // finds nothing in the iframe</textarea></pre><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"with-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path class=\"without-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6A9955;\">// Inside some-legacy-lib.js</span></span>\n<span class=\"line\"><span style=\"color: #569CD6;\">const</span><span style=\"color: #D4D4D4;\"> </span><span style=\"color: #4FC1FF;\">targets</span><span style=\"color: #D4D4D4;\"> = </span><span style=\"color: #9CDCFE;\">document</span><span style=\"color: #D4D4D4;\">.</span><span style=\"color: #DCDCAA;\">querySelectorAll</span><span style=\"color: #D4D4D4;\">( </span><span style=\"color: #9CDCFE;\">selector</span><span style=\"color: #D4D4D4;\"> ); </span><span style=\"color: #6A9955;\">// finds nothing in the iframe</span></span></code></pre></div>\n\n\n\n<p class=\"wp-block-paragraph\">Your block calls the library, the library queries the admin document, finds zero matches, and silently does nothing. No error, no warning — the block just stops being enhanced.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Your options, in order of preference:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Pass elements, not selectors.</strong> If the library accepts an element (<code>lib.init( element )</code>), hand it the block&#8217;s element from <code>useRefEffect</code> and you&#8217;re usually fine.</li>\n\n\n\n<li><strong>Patch the library.</strong> For unmaintained dependencies, <a href=\"https://www.npmjs.com/package/patch-package\" rel=\"noopener\" target=\"_blank\"><code>patch-package</code></a> is the pragmatic answer: edit the module in <code>node_modules</code> to resolve <code>document</code>/<code>window</code> from the element (<code>node.ownerDocument</code>), run <code>npx patch-package &lt;pkg&gt;</code>, commit the patch, add a <code>postinstall</code> script. The <a href=\"https://developer.wordpress.org/block-editor/reference-guides/block-api/block-api-versions/block-migration-for-iframe-editor-compatibility/\" rel=\"noopener\" target=\"_blank\">official migration guide</a> walks through a real patch for <code>@panzoom/panzoom</code>.</li>\n\n\n\n<li><strong>Guard and bail.</strong> If the library is loaded inside the iframe (front-end scripts are), check for it on <code>defaultView</code> before using it: <code>if ( ! defaultView.jQuery ) return;</code></li>\n</ul>\n\n\n\n<h2 class=\"wp-block-heading\">So what does <code>apiVersion: 3</code> actually do?</h2>\n\n\n\n<p class=\"wp-block-paragraph\">Less than you might think — and that&#8217;s the point. Declaring <code>\"apiVersion\": 3</code> in <code>block.json</code> doesn&#8217;t change how your block renders; it&#8217;s a <strong>signal that your block is iframe-ready</strong>. All core blocks have been on v3 since WordPress 6.3. For most blocks the migration is literally a one-line change… followed by the actual work: testing that nothing in your <code>edit</code> component (or the libraries it pulls in) touches the global <code>document</code>/<code>window</code>.</p>\n\n\n\n<p class=\"wp-block-paragraph\">And to be clear about 7.1: the iframe will be enforced there <strong>regardless</strong> of <code>apiVersion</code>. Staying on v2 doesn&#8217;t opt you out anymore — it just means you get the console warning <em>and</em> the breakage.</p>\n\n\n\n<h2 class=\"wp-block-heading\">How to test today</h2>\n\n\n\n<p class=\"wp-block-paragraph\">You don&#8217;t need to wait for 7.1. What you&#8217;re testing is that your block works in <strong>both states</strong> — iframed and not — because both will exist in the wild for a while yet.</p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Iframed:</strong> install the <strong>Gutenberg plugin 22.6+</strong>. It enforces the iframe regardless of theme, so this is the fastest way to live in the future. <a href=\"https://wordpress.org/news/2026/07/wordpress-7-1-beta-1/\"><strong>7.1 Beta 1</strong> </a>does the same — I&#8217;ve confirmed it forces the iframe on a classic theme, which is the merged behavior shipping in August.</p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Not iframed:</strong> run <strong>WordPress 7.0 without the plugin</strong> and insert a v1/v2 block alongside yours — the canvas drops the iframe on the fly. <a href=\"https://github.com/ryanwelcher/iframe-editor-examples\">The companion plugin&#8217;s <code>legacy-api-v2</code> block exists for exactly this.</a> Any theme will do: core 7.0 has no theme check in the iframe decision at all, so you don&#8217;t need to hunt down a classic theme to reproduce this.</p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Confirm which state you&#8217;re in:</strong> <code>element.ownerDocument !== document</code>, or look for <code>iframe[name=\"editor-canvas\"]</code> in devtools.</p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The Site Editor</strong> has been iframed for years — if your block already behaves there, you&#8217;re most of the way home.</p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The companion plugin</strong> ships a <code>wp-env</code> setup, an example override file that adds Gutenberg for enforced mode (copy it to <code>.wp-env.override.json</code>), and <strong>two Playground blueprints</strong> — one per state, so you can flip between iframed and not in two tabs without installing anything.</p>\n\n\n\n<h2 class=\"wp-block-heading\">The block author&#8217;s checklist</h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Set <code>\"apiVersion\": 3</code> in every <code>block.json</code>.</li>\n\n\n\n<li>Check your editor code for <code>window.</code> and <code>document.</code> — every hit is a suspect. Replace with <code>element.ownerDocument</code> / <code>.defaultView</code> via <code>useRefEffect</code>.</li>\n\n\n\n<li>Check for <code>enqueue_block_editor_assets</code> — move canvas-affecting styles to <code>editorStyle</code> in <code>block.json</code>.</li>\n\n\n\n<li>Check your editor CSS for <code>.wp-admin</code>, <code>#wpadminbar</code>, and <code>.block-editor-page</code> , admin chrome offsets and <code>!important</code></li>\n\n\n\n<li>Audit third-party libraries: pass elements not selectors, patch what you must.</li>\n\n\n\n<li>Test both <strong>states</strong>, not both themes: iframed (Gutenberg 22.6+ active) and not iframed (no plugin, v1/v2 block inserted). </li>\n\n\n\n<li>Watch the console with <code>SCRIPT_DEBUG</code> on — the deprecation warnings tell you which registered blocks are still on v1/v2.</li>\n</ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Note What&#8217;s <em>not</em> on that list:</strong> checking whether the active theme is a block theme. Core exposes that answer twice — as <code>__unstableIsBlockBasedTheme</code> in the editor settings and as <code>is_block_theme</code> on the REST themes endpoint — and there&#8217;s a shelved PR and a live debate behind it. Your block never needs to ask. <code>element.ownerDocument !== document</code> answers the only version of the question that affects you. If you&#8217;re curious what that theme check does under the hood, that&#8217;s its own story: <a href=\"https://gutenbergtimes.com/how-wordpress-decides-a-theme-is-a-block-theme/\"><strong>How WordPress decides a Theme is a &#8220;Block theme&#8221;.</strong></a></p>\n\n\n\n<p class=\"wp-block-paragraph\">Resources</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https://make.wordpress.org/core/2026/02/24/iframed-editor-changes-in-wordpress-7-0/\" rel=\"noopener\" target=\"_blank\">Iframed Editor Changes in WordPress 7.0</a> — the dev note this all builds on</li>\n\n\n\n<li><a href=\"https://github.com/WordPress/gutenberg/pull/74042\" rel=\"noopener\" target=\"_blank\">Post editor: always iframe (#74042)</a> — the merged PR that makes 7.1 always-iframed, and the discussion behind the beta-feedback plan</li>\n\n\n\n<li><a href=\"https://make.wordpress.org/core/2026/06/19/roadmap-to-7-1/\" rel=\"noopener\" target=\"_blank\">Roadmap to 7.1</a> — the original block-themes-first plan, superseded by #74042</li>\n\n\n\n<li><a href=\"https://make.wordpress.org/core/2025/11/12/preparing-the-post-editor-for-full-iframe-integration/\" rel=\"noopener\" target=\"_blank\">Preparing the Post Editor for Full iframe Integration</a> — the 6.9 groundwork</li>\n\n\n\n<li><a href=\"https://developer.wordpress.org/block-editor/reference-guides/block-api/block-api-versions/block-migration-for-iframe-editor-compatibility/\" rel=\"noopener\" target=\"_blank\">Migrating Blocks for iframe Editor Compatibility</a> — the official migration guide</li>\n\n\n\n<li><a href=\"https://developer.wordpress.org/block-editor/reference-guides/block-api/block-api-versions/\" rel=\"noopener\" target=\"_blank\">Block API Versions</a> — what each version means</li>\n\n\n\n<li><a href=\"https://developer.wordpress.org/block-editor/how-to-guides/enqueueing-assets-in-the-editor/\">Enqueueing editor assets</a></li>\n\n\n\n<li><a href=\"https://developer.wordpress.org/themes/core-concepts/including-assets/#editor-stylesheets\">Editor styles for themes</a></li>\n\n\n\n<li>Companion demo plugin: <a href=\"https://github.com/ryanwelcher/iframe-editor-examples\" rel=\"noopener\" target=\"_blank\">iframe-editor-examples</a></li>\n</ul>\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Fri, 17 Jul 2026 16:21:43 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:12:\"Ryan Welcher\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:47;a:6:{s:4:\"data\";s:21:\"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:53:\"Open Channels FM: Who Is Actually Using the Internet?\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:34:\"https://openchannels.fm/?p=2557053\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:59:\"https://openchannels.fm/who-is-actually-using-the-internet/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:168:\"A look at the impact of AI and bots on the web, emphasizing the decline of human engagement, the challenges for content creators, and the future of digital interaction.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Fri, 17 Jul 2026 13:41:01 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:8:\"Bob Dunn\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:48;a:6:{s:4:\"data\";s:21:\"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:99:\"Open Channels FM: Open Channels FM Launches Streamed News Show Focused on the Open Source Ecosystem\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:34:\"https://openchannels.fm/?p=2556978\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:106:\"https://openchannels.fm/open-channels-fm-launches-streamed-news-show-focused-on-the-open-source-ecosystem/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:207:\"Open Channels FM is launching a new video news show called Open Channels News, starting July 27th. It\'s a quick, five to ten-minute program covering various open source topics, available live and on YouTube.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Thu, 16 Jul 2026 12:55:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:8:\"Bob Dunn\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:49;a:6:{s:4:\"data\";s:21:\"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:53:\"Akismet: A small integration detail with a big impact\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"http://akismet.com/?p=284827\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:70:\"https://akismet.com/blog/a-small-integration-detail-with-a-big-impact/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:1814:\"<p class=\"wp-block-paragraph\"><a href=\"https://givewp.com\">GiveWP</a> is the most popular fundraising and donation tool on WordPress, powering over $500 million in donations. It integrates with Akismet to ensure that spammy or potentially fraudulent submissions get filtered out. Recently, some Give users saw an unusually high level of false positives on their donation forms: legitimate donation submissions that were being marked as spam.</p>\n\n\n\n<p class=\"wp-block-paragraph\">We investigated and found that the donation forms were being sent to Akismet for checking after each step in the donation process: once after choosing an amount, again after the user entered their name, again after they entered an optional message, etc. To Akismet, this looks like sudden repeated submissions from the same user, all with similar content (better known as spam).</p>\n\n\n\n<p class=\"wp-block-paragraph\">Akismet supports rechecking content, but only if the integration includes <a href=\"https://akismet.com/developers/detailed-docs/comment-check/\">the <code>recheck_reason</code> parameter</a>. If that parameter is present, Akismet knows not to classify the repeated duplicate (or nearly duplicate) checks as part of a spam attack; however, if <code>recheck_reason</code> is omitted, this kind of consecutive similar content looks very similar to spam, and Akismet blocks it.</p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https://github.com/impress-org/givewp/issues/8238\">We reported the root issue</a> to Liquid Web, and they quickly addressed it and released a fix in version 4.16.0. This kind of collaboration is what makes Open Source great!</p>\n\n\n\n<p class=\"wp-block-paragraph\">We&#8217;re planning on bringing automatic integration review to more clients and platforms, so stay tuned for more tips and insights.</p>\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 15 Jul 2026 16:00:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:17:\"Christopher Finke\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}}}}}}}}}}}}s:4:\"type\";i:128;s:7:\"headers\";a:9:{s:6:\"server\";s:5:\"nginx\";s:4:\"date\";s:29:\"Sun, 09 Aug 2026 18:35:23 GMT\";s:12:\"content-type\";s:8:\"text/xml\";s:13:\"last-modified\";s:29:\"Sun, 09 Aug 2026 18:15:38 GMT\";s:4:\"vary\";s:15:\"Accept-Encoding\";s:15:\"x-frame-options\";s:10:\"SAMEORIGIN\";s:16:\"content-encoding\";s:2:\"br\";s:7:\"alt-svc\";s:5:\"clear\";s:4:\"x-nc\";s:9:\"HIT dca 2\";}s:5:\"build\";i:1777185278;s:21:\"cache_expiration_time\";i:1786343724;s:23:\"__cache_expiration_time\";i:1786343724;}', 'off');
INSERT INTO `wpoptions` (`option_id`, `option_name`, `option_value`, `autoload`) VALUES
(61909, 'chld_thm_cfg_options_configvars', 'a:40:{s:8:\"addl_css\";N;s:8:\"forcedep\";N;s:8:\"swappath\";N;s:8:\"cssunreg\";N;s:9:\"csswphead\";N;s:10:\"cssnotheme\";i:1;s:7:\"reorder\";N;s:10:\"parnt_deps\";N;s:10:\"child_deps\";N;s:9:\"hasstyles\";i:1;s:11:\"parntloaded\";N;s:11:\"childloaded\";N;s:11:\"ignoreparnt\";N;s:9:\"qpriority\";i:10;s:9:\"mpriority\";i:10;s:7:\"enqueue\";s:7:\"enqueue\";s:8:\"handling\";s:7:\"primary\";s:9:\"templates\";a:234:{i:0;s:16:\"sidebar-shop.php\";i:1;s:9:\"index.php\";i:2;s:15:\"sliding_bar.php\";i:3;s:12:\"comments.php\";i:4;s:28:\"taxonomy-wpfc_bible_book.php\";i:5;s:11:\"bbpress.php\";i:6;s:11:\"contact.php\";i:7;s:10:\"author.php\";i:8;s:19:\"side-navigation.php\";i:9;s:14:\"buddypress.php\";i:10;s:11:\"sidebar.php\";i:11;s:17:\"new-slideshow.php\";i:12;s:14:\"searchform.php\";i:13;s:10:\"single.php\";i:14;s:23:\"archive-wpfc_sermon.php\";i:15;s:13:\"100-width.php\";i:16;s:15:\"maintenance.php\";i:17;s:9:\"blank.php\";i:18;s:10:\"header.php\";i:19;s:11:\"archive.php\";i:20;s:22:\"single-wpfc_sermon.php\";i:21;s:8:\"page.php\";i:22;s:31:\"taxonomy-wpfc_sermon_series.php\";i:23;s:26:\"taxonomy-wpfc_preacher.php\";i:24;s:7:\"404.php\";i:25;s:10:\"footer.php\";i:26;s:31:\"taxonomy-wpfc_sermon_topics.php\";i:27;s:33:\"tribe-events/default-template.php\";i:28;s:26:\"tribe-events/list/meta.php\";i:29;s:37:\"tribe-events/list/single-featured.php\";i:30;s:34:\"tribe-events/list/single-event.php\";i:31;s:36:\"tribe-events/widgets/list-widget.php\";i:32;s:35:\"tribe-events/pro/related-events.php\";i:33;s:40:\"tribe-events/pro/widgets/list-widget.php\";i:34;s:45:\"tribe-events/pro/widgets/countdown-widget.php\";i:35;s:41:\"tribe-events/pro/widgets/venue-widget.php\";i:36;s:31:\"tribe-events/pro/photo/loop.php\";i:37;s:39:\"tribe-events/pro/photo/single-event.php\";i:38;s:40:\"tribe-events/pro/map/single-featured.php\";i:39;s:37:\"tribe-events/pro/map/single-event.php\";i:40;s:36:\"tribe-events/day/single-featured.php\";i:41;s:33:\"tribe-events/day/single-event.php\";i:42;s:25:\"woocommerce/cart/cart.php\";i:43;s:37:\"woocommerce/checkout/review-order.php\";i:44;s:33:\"woocommerce/checkout/form-pay.php\";i:45;s:48:\"woocommerce/single-product/short-description.php\";i:46;s:58:\"woocommerce/single-product/tabs/additional-information.php\";i:47;s:47:\"woocommerce/single-product/tabs/description.php\";i:48;s:36:\"tribe/events/v2/default-template.php\";i:49;s:29:\"bbpress/loop-single-reply.php\";i:50;s:29:\"bbpress/loop-search-topic.php\";i:51;s:23:\"bbpress/form-search.php\";i:52;s:26:\"bbpress/content-search.php\";i:53;s:29:\"bbpress/loop-search-reply.php\";i:54;s:43:\"templates/wc-close-product-main-wrapper.php\";i:55;s:25:\"templates/blog-layout.php\";i:56;s:23:\"templates/header-v7.php\";i:57;s:37:\"templates/wc-quick-view-container.php\";i:58;s:43:\"templates/wc-add-product-wrappers-close.php\";i:59;s:29:\"templates/post-format-box.php\";i:60;s:43:\"templates/wc-rollover-buttons-linebreak.php\";i:61;s:22:\"templates/wc-stock.php\";i:62;s:28:\"templates/blog-post-date.php\";i:63;s:32:\"templates/wc-after-container.php\";i:64;s:22:\"templates/header-2.php\";i:65;s:37:\"templates/footer-copyright-notice.php\";i:66;s:23:\"templates/header-v4.php\";i:67;s:20:\"templates/to-top.php\";i:68;s:25:\"templates/side-header.php\";i:69;s:35:\"templates/wc-quick-view-product.php\";i:70;s:23:\"templates/revslider.php\";i:71;s:33:\"templates/featured-image-page.php\";i:72;s:28:\"templates/social-sharing.php\";i:73;s:40:\"templates/header-secondary-main-menu.php\";i:74;s:22:\"templates/header-3.php\";i:75;s:33:\"templates/footer-social-icons.php\";i:76;s:41:\"templates/wc-before-shop-item-buttons.php\";i:77;s:30:\"templates/header-content-3.php\";i:78;s:25:\"templates/author-info.php\";i:79;s:42:\"templates/wc-open-product-main-wrapper.php\";i:80;s:28:\"templates/footer-content.php\";i:81;s:49:\"templates/wc-before-shop-loop-item-title-open.php\";i:82;s:33:\"templates/wc-cart-collaterals.php\";i:83;s:35:\"templates/wc-add-product-border.php\";i:84;s:32:\"templates/menu-mobile-flyout.php\";i:85;s:33:\"templates/pages-rich-snippets.php\";i:86;s:18:\"templates/logo.php\";i:87;s:23:\"templates/title-bar.php\";i:88;s:27:\"templates/wc-view-order.php\";i:89;s:33:\"templates/wc-catalog-ordering.php\";i:90;s:30:\"templates/wc-product-title.php\";i:91;s:25:\"templates/privacy-bar.php\";i:92;s:37:\"templates/wc-checkout-coupon-form.php\";i:93;s:35:\"templates/wc-top-user-container.php\";i:94;s:32:\"templates/menu-mobile-search.php\";i:95;s:36:\"templates/wc-proceed-to-checkout.php\";i:96;s:42:\"templates/wc-add-product-wrappers-open.php\";i:97;s:36:\"templates/wc-show-details-button.php\";i:98;s:23:\"templates/header-v5.php\";i:99;s:32:\"templates/wc-thumbnail-clean.php\";i:100;s:35:\"templates/wc-cart-shipping-calc.php\";i:101;s:36:\"templates/wc-product-search-form.php\";i:102;s:27:\"templates/related-posts.php\";i:103;s:29:\"templates/wc-single-title.php\";i:104;s:27:\"templates/elasticslider.php\";i:105;s:37:\"templates/wc-before-checkout-form.php\";i:106;s:25:\"templates/layerslider.php\";i:107;s:22:\"templates/header-4.php\";i:108;s:23:\"templates/header-v3.php\";i:109;s:23:\"templates/header-v2.php\";i:110;s:33:\"templates/featured-image-post.php\";i:111;s:23:\"templates/header-v1.php\";i:112;s:40:\"templates/wc-after-shop-item-buttons.php\";i:113;s:40:\"templates/featured-image-wpfc_sermon.php\";i:114;s:50:\"templates/wc-before-shop-loop-item-title-close.php\";i:115;s:32:\"templates/menu-mobile-modern.php\";i:116;s:34:\"templates/wc-thumbnail-classic.php\";i:117;s:23:\"templates/header-v6.php\";i:118;s:46:\"templates/wc-product-loop-outofstock-flash.php\";i:119;s:30:\"templates/header-secondary.php\";i:120;s:22:\"templates/header-1.php\";i:121;s:30:\"templates/menu-mobile-main.php\";i:122;s:45:\"templates/wc-after-single-product-summary.php\";i:123;s:50:\"includes/metaboxes/tabs/tab_avada_page_options.php\";i:124;s:44:\"includes/metaboxes/options/options_slide.php\";i:125;s:41:\"includes/metaboxes/options/options_es.php\";i:126;s:30:\"includes/importer/importer.php\";i:127;s:31:\"includes/lib/fusion-library.php\";i:128;s:38:\"includes/lib/inc/googlefonts-array.php\";i:129;s:41:\"includes/lib/inc/class-fusion-json-ld.php\";i:130;s:75:\"includes/lib/inc/redux/extensions/vendorsupport/extension_vendorsupport.php\";i:131;s:46:\"includes/lib/inc/redux/framework/uninstall.php\";i:132;s:58:\"includes/lib/inc/redux/framework/fusionredux-framework.php\";i:133;s:79:\"includes/lib/inc/redux/framework/FusionReduxCore/inc/class.thirdparty.fixes.php\";i:134;s:81:\"includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/extensions.php\";i:135;s:78:\"includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/support.php\";i:136;s:80:\"includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/changelog.php\";i:137;s:78:\"includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/credits.php\";i:138;s:76:\"includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/about.php\";i:139;s:79:\"includes/lib/inc/redux/framework/FusionReduxCore/templates/panel/footer.tpl.php\";i:140;s:89:\"includes/lib/inc/redux/framework/FusionReduxCore/templates/panel/header_stickybar.tpl.php\";i:141;s:80:\"includes/lib/inc/redux/framework/FusionReduxCore/templates/panel/content.tpl.php\";i:142;s:82:\"includes/lib/inc/redux/framework/FusionReduxCore/templates/panel/container.tpl.php\";i:143;s:87:\"includes/lib/inc/redux/framework/FusionReduxCore/templates/panel/menu_container.tpl.php\";i:144;s:79:\"includes/lib/inc/redux/framework/FusionReduxCore/templates/panel/header.tpl.php\";i:145;s:63:\"includes/lib/inc/redux/panel_templates/header_stickybar.tpl.php\";i:146;s:56:\"includes/lib/inc/redux/panel_templates/container.tpl.php\";i:147;s:61:\"includes/lib/inc/redux/panel_templates/menu_container.tpl.php\";i:148;s:53:\"includes/lib/inc/redux/panel_templates/header.tpl.php\";i:149;s:43:\"includes/lib/inc/recaptcha/src/autoload.php\";i:150;s:38:\"includes/lib/inc/fusion-app/compat.php\";i:151;s:57:\"includes/lib/inc/fusion-app/templates/front-customize.php\";i:152;s:50:\"includes/lib/inc/fusion-app/templates/bulk-add.php\";i:153;s:59:\"includes/lib/inc/fusion-app/templates/modal-dialog-more.php\";i:154;s:56:\"includes/lib/inc/fusion-app/templates/typography-set.php\";i:155;s:59:\"includes/lib/inc/fusion-app/templates/front-end-toolbar.php\";i:156;s:57:\"includes/lib/inc/fusion-app/templates/repeater-fields.php\";i:157;s:58:\"includes/lib/inc/fusion-app/templates/options/repeater.php\";i:158;s:58:\"includes/lib/inc/fusion-app/templates/options/sortable.php\";i:159;s:65:\"includes/lib/inc/fusion-app/templates/options/radio-image-set.php\";i:160;s:62:\"includes/lib/inc/fusion-app/templates/options/form-options.php\";i:161;s:58:\"includes/lib/inc/fusion-app/templates/options/subgroup.php\";i:162;s:68:\"includes/lib/inc/fusion-app/templates/options/connected-sortable.php\";i:163;s:66:\"includes/lib/inc/fusion-app/templates/options/date-time-picker.php\";i:164;s:63:\"includes/lib/inc/fusion-app/templates/options/color-palette.php\";i:165;s:54:\"includes/lib/inc/fusion-app/templates/options/code.php\";i:166;s:56:\"includes/lib/inc/fusion-app/templates/options/import.php\";i:167;s:60:\"includes/lib/inc/fusion-app/templates/options/iconpicker.php\";i:168;s:59:\"includes/lib/inc/fusion-app/templates/options/upload-id.php\";i:169;s:63:\"includes/lib/inc/fusion-app/templates/options/upload-images.php\";i:170;s:56:\"includes/lib/inc/fusion-app/templates/options/upload.php\";i:171;s:67:\"includes/lib/inc/fusion-app/templates/options/image-focus-point.php\";i:172;s:55:\"includes/lib/inc/fusion-app/templates/options/range.php\";i:173;s:61:\"includes/lib/inc/fusion-app/templates/options/colorpicker.php\";i:174;s:58:\"includes/lib/inc/fusion-app/templates/options/raw-text.php\";i:175;s:59:\"includes/lib/inc/fusion-app/templates/options/dimension.php\";i:176;s:60:\"includes/lib/inc/fusion-app/templates/options/typography.php\";i:177;s:69:\"includes/lib/inc/fusion-app/templates/options/hubspot-consent-map.php\";i:178;s:66:\"includes/lib/inc/fusion-app/templates/options/nominatim-search.php\";i:179;s:62:\"includes/lib/inc/fusion-app/templates/options/column-width.php\";i:180;s:61:\"includes/lib/inc/fusion-app/templates/options/hubspot-map.php\";i:181;s:56:\"includes/lib/inc/fusion-app/templates/options/select.php\";i:182;s:66:\"includes/lib/inc/fusion-app/templates/options/radio-button-set.php\";i:183;s:56:\"includes/lib/inc/fusion-app/templates/options/switch.php\";i:184;s:58:\"includes/lib/inc/fusion-app/templates/options/auth-map.php\";i:185;s:60:\"includes/lib/inc/fusion-app/templates/options/uploadfile.php\";i:186;s:65:\"includes/lib/inc/fusion-app/templates/options/multiple-select.php\";i:187;s:66:\"includes/lib/inc/fusion-app/templates/options/colorpickeralpha.php\";i:188;s:63:\"includes/lib/inc/fusion-app/templates/options/fusion-logics.php\";i:189;s:63:\"includes/lib/inc/fusion-app/templates/options/upload-object.php\";i:190;s:56:\"includes/lib/inc/fusion-app/templates/options/toggle.php\";i:191;s:63:\"includes/lib/inc/fusion-app/templates/options/mailchimp-map.php\";i:192;s:62:\"includes/lib/inc/fusion-app/templates/options/raw-textarea.php\";i:193;s:63:\"includes/lib/inc/fusion-app/templates/options/link-selector.php\";i:194;s:61:\"includes/lib/inc/fusion-app/templates/options/ajax-select.php\";i:195;s:63:\"includes/lib/inc/fusion-app/templates/options/sortable-text.php\";i:196;s:57:\"includes/lib/inc/fusion-app/templates/options/tinymce.php\";i:197;s:58:\"includes/lib/inc/fusion-app/templates/options/textarea.php\";i:198;s:70:\"includes/lib/inc/fusion-app/templates/options/link-selector-object.php\";i:199;s:67:\"includes/lib/inc/fusion-app/templates/options/layout-conditions.php\";i:200;s:69:\"includes/lib/inc/fusion-app/templates/options/checkbox-button-set.php\";i:201;s:65:\"includes/lib/inc/fusion-app/templates/options/typography-sets.php\";i:202;s:59:\"includes/lib/inc/fusion-app/templates/options/textfield.php\";i:203;s:56:\"includes/lib/inc/fusion-app/templates/options/export.php\";i:204;s:39:\"includes/lib/inc/templates/rollover.php\";i:205;s:40:\"includes/lib/inc/templates/sidebar-1.php\";i:206;s:40:\"includes/lib/inc/templates/sidebar-2.php\";i:207;s:69:\"includes/lib/inc/templates/wc-before-single-product-summary-close.php\";i:208;s:51:\"includes/lib/inc/templates/featured-image-first.php\";i:209;s:68:\"includes/lib/inc/templates/wc-before-single-product-summary-open.php\";i:210;s:46:\"includes/lib/inc/custom-icons/custom-icons.php\";i:211;s:51:\"includes/lib/assets/fonts/fontawesome/icons_pro.php\";i:212;s:52:\"includes/lib/assets/fonts/fontawesome/icons_free.php\";i:213;s:28:\"includes/cli/import-demo.php\";i:214;s:23:\"includes/cli/shared.php\";i:215;s:30:\"includes/cli/apply-patches.php\";i:216;s:25:\"includes/cli/register.php\";i:217;s:24:\"includes/cli/plugins.php\";i:218;s:32:\"includes/admin-screens/setup.php\";i:219;s:57:\"includes/admin-screens/prebuilt-websites-tag-selector.php\";i:220;s:38:\"includes/admin-screens/performance.php\";i:221;s:44:\"includes/admin-screens/content-step-svgs.php\";i:222;s:49:\"includes/admin-screens/prebuilt-websites-demo.php\";i:223;s:57:\"includes/admin-screens/prebuilt-websites-import-modal.php\";i:224;s:34:\"includes/admin-screens/support.php\";i:225;s:33:\"includes/admin-screens/status.php\";i:226;s:36:\"includes/admin-screens/dashboard.php\";i:227;s:34:\"includes/admin-screens/plugins.php\";i:228;s:44:\"includes/admin-screens/prebuilt-websites.php\";i:229;s:46:\"includes/avada-app/panel/templates/sidebar.php\";i:230;s:42:\"includes/avada-app/panel/templates/tab.php\";i:231;s:44:\"includes/avada-app/panel/templates/panel.php\";i:232;s:31:\"sensei/wrappers/wrapper-end.php\";i:233;s:33:\"sensei/wrappers/wrapper-start.php\";}s:7:\"max_sel\";N;s:7:\"imports\";a:2:{s:5:\"child\";a:0:{}s:5:\"parnt\";a:0:{}}s:13:\"child_version\";s:6:\"7.14.2\";s:12:\"child_author\";s:11:\"ThemeFusion\";s:10:\"child_name\";s:11:\"Avada Child\";s:14:\"child_themeuri\";s:18:\"https://avada.com/\";s:15:\"child_authoruri\";s:40:\"https://themeforest.net/user/ThemeFusion\";s:11:\"child_descr\";s:160:\"The Avada Website Builder is the ultimate design and creation suite. Design Anything, Build Everything, Fast. The #1 selling product of all time on ThemeForest.\";s:10:\"child_tags\";N;s:5:\"parnt\";s:5:\"Avada\";s:5:\"child\";s:11:\"Avada-child\";s:10:\"configtype\";s:5:\"theme\";s:6:\"valkey\";i:1;s:7:\"rulekey\";N;s:5:\"qskey\";i:1;s:6:\"selkey\";i:1;s:8:\"querykey\";i:1;s:8:\"tokenkey\";N;s:6:\"recent\";N;s:9:\"converted\";i:1;s:5:\"fsize\";i:381;s:7:\"version\";s:5:\"2.6.7\";}', 'off'),
(61613, '_transient_timeout_fusion_dynamic_css_eda056af408485533dbfc47932a57498', '1777190155', 'off'),
(191959, '_transient_timeout_wc_product_children_129', '1788202551', 'off'),
(191960, '_transient_wc_product_children_129', 'a:2:{s:3:\"all\";a:6:{i:0;i:2050;i:1;i:2051;i:2;i:2052;i:3;i:2053;i:4;i:2054;i:5;i:2055;}s:7:\"visible\";a:6:{i:0;i:2050;i:1;i:2051;i:2;i:2052;i:3;i:2053;i:4;i:2054;i:5;i:2055;}}', 'off'),
(191961, '_transient_timeout_wc_var_prices_129', '1788202551', 'off'),
(191962, '_transient_wc_var_prices_129', '{\"f9e544f77b7eac7add281ef28ca5559f\":{\"price\":{\"2050\":\"159.00\",\"2051\":\"159.00\",\"2052\":\"159.00\",\"2053\":\"159.00\",\"2054\":\"159.00\",\"2055\":\"159.00\"},\"regular_price\":{\"2050\":\"159.00\",\"2051\":\"159.00\",\"2052\":\"159.00\",\"2053\":\"159.00\",\"2054\":\"159.00\",\"2055\":\"159.00\"},\"sale_price\":{\"2050\":\"159.00\",\"2051\":\"159.00\",\"2052\":\"159.00\",\"2053\":\"159.00\",\"2054\":\"159.00\",\"2055\":\"159.00\"}}}', 'off'),
(184006, '_transient_timeout_wc_product_children_590', '1787770188', 'off'),
(184007, '_transient_wc_product_children_590', 'a:2:{s:3:\"all\";a:2:{i:0;i:1315;i:1;i:1316;}s:7:\"visible\";a:2:{i:0;i:1315;i:1;i:1316;}}', 'off'),
(184008, '_transient_timeout_wc_var_prices_590', '1787770188', 'off'),
(184009, '_transient_wc_var_prices_590', '{\"f9e544f77b7eac7add281ef28ca5559f\":{\"price\":{\"1315\":\"850.00\",\"1316\":\"1350.00\"},\"regular_price\":{\"1315\":\"850.00\",\"1316\":\"1350.00\"},\"sale_price\":{\"1315\":\"850.00\",\"1316\":\"1350.00\"}}}', 'off'),
(184011, '_transient_timeout_wc_product_children_600', '1787770191', 'off'),
(184012, '_transient_wc_product_children_600', 'a:2:{s:3:\"all\";a:2:{i:0;i:1311;i:1;i:1312;}s:7:\"visible\";a:2:{i:0;i:1311;i:1;i:1312;}}', 'off'),
(184013, '_transient_timeout_wc_var_prices_600', '1787770191', 'off'),
(184014, '_transient_wc_var_prices_600', '{\"f9e544f77b7eac7add281ef28ca5559f\":{\"price\":{\"1311\":\"899.00\",\"1312\":\"999.00\"},\"regular_price\":{\"1311\":\"899.00\",\"1312\":\"999.00\"},\"sale_price\":{\"1311\":\"899.00\",\"1312\":\"999.00\"}}}', 'off'),
(204143, '_site_transient_update_plugins', 'O:8:\"stdClass\":5:{s:12:\"last_checked\";i:1786300904;s:8:\"response\";a:0:{}s:12:\"translations\";a:0:{}s:9:\"no_update\";a:8:{s:43:\"advanced-woo-labels/advanced-woo-labels.php\";O:8:\"stdClass\":10:{s:2:\"id\";s:33:\"w.org/plugins/advanced-woo-labels\";s:4:\"slug\";s:19:\"advanced-woo-labels\";s:6:\"plugin\";s:43:\"advanced-woo-labels/advanced-woo-labels.php\";s:11:\"new_version\";s:4:\"2.49\";s:3:\"url\";s:50:\"https://wordpress.org/plugins/advanced-woo-labels/\";s:7:\"package\";s:67:\"https://downloads.wordpress.org/plugin/advanced-woo-labels.2.49.zip\";s:5:\"icons\";a:2:{s:2:\"2x\";s:72:\"https://ps.w.org/advanced-woo-labels/assets/icon-256x256.png?rev=3326325\";s:2:\"1x\";s:72:\"https://ps.w.org/advanced-woo-labels/assets/icon-128x128.png?rev=3326325\";}s:7:\"banners\";a:2:{s:2:\"2x\";s:75:\"https://ps.w.org/advanced-woo-labels/assets/banner-1544x500.png?rev=3326325\";s:2:\"1x\";s:74:\"https://ps.w.org/advanced-woo-labels/assets/banner-772x250.png?rev=3326325\";}s:11:\"banners_rtl\";a:0:{}s:8:\"requires\";s:3:\"4.0\";}s:53:\"child-theme-configurator/child-theme-configurator.php\";O:8:\"stdClass\":10:{s:2:\"id\";s:38:\"w.org/plugins/child-theme-configurator\";s:4:\"slug\";s:24:\"child-theme-configurator\";s:6:\"plugin\";s:53:\"child-theme-configurator/child-theme-configurator.php\";s:11:\"new_version\";s:5:\"2.6.7\";s:3:\"url\";s:55:\"https://wordpress.org/plugins/child-theme-configurator/\";s:7:\"package\";s:73:\"https://downloads.wordpress.org/plugin/child-theme-configurator.2.6.7.zip\";s:5:\"icons\";a:1:{s:2:\"1x\";s:77:\"https://ps.w.org/child-theme-configurator/assets/icon-128x128.png?rev=1557885\";}s:7:\"banners\";a:1:{s:2:\"1x\";s:79:\"https://ps.w.org/child-theme-configurator/assets/banner-772x250.jpg?rev=1557885\";}s:11:\"banners_rtl\";a:0:{}s:8:\"requires\";s:3:\"4.0\";}s:33:\"classic-editor/classic-editor.php\";O:8:\"stdClass\":10:{s:2:\"id\";s:28:\"w.org/plugins/classic-editor\";s:4:\"slug\";s:14:\"classic-editor\";s:6:\"plugin\";s:33:\"classic-editor/classic-editor.php\";s:11:\"new_version\";s:5:\"1.7.0\";s:3:\"url\";s:45:\"https://wordpress.org/plugins/classic-editor/\";s:7:\"package\";s:63:\"https://downloads.wordpress.org/plugin/classic-editor.1.7.0.zip\";s:5:\"icons\";a:2:{s:2:\"2x\";s:67:\"https://ps.w.org/classic-editor/assets/icon-256x256.png?rev=1998671\";s:2:\"1x\";s:67:\"https://ps.w.org/classic-editor/assets/icon-128x128.png?rev=1998671\";}s:7:\"banners\";a:2:{s:2:\"2x\";s:70:\"https://ps.w.org/classic-editor/assets/banner-1544x500.png?rev=1998671\";s:2:\"1x\";s:69:\"https://ps.w.org/classic-editor/assets/banner-772x250.png?rev=1998676\";}s:11:\"banners_rtl\";a:0:{}s:8:\"requires\";s:3:\"4.9\";}s:27:\"woocommerce/woocommerce.php\";O:8:\"stdClass\":10:{s:2:\"id\";s:25:\"w.org/plugins/woocommerce\";s:4:\"slug\";s:11:\"woocommerce\";s:6:\"plugin\";s:27:\"woocommerce/woocommerce.php\";s:11:\"new_version\";s:6:\"11.0.0\";s:3:\"url\";s:42:\"https://wordpress.org/plugins/woocommerce/\";s:7:\"package\";s:61:\"https://downloads.wordpress.org/plugin/woocommerce.11.0.0.zip\";s:5:\"icons\";a:2:{s:2:\"1x\";s:56:\"https://ps.w.org/woocommerce/assets/icon.svg?rev=3234504\";s:3:\"svg\";s:56:\"https://ps.w.org/woocommerce/assets/icon.svg?rev=3234504\";}s:7:\"banners\";a:2:{s:2:\"2x\";s:67:\"https://ps.w.org/woocommerce/assets/banner-1544x500.png?rev=3234504\";s:2:\"1x\";s:66:\"https://ps.w.org/woocommerce/assets/banner-772x250.png?rev=3234504\";}s:11:\"banners_rtl\";a:0:{}s:8:\"requires\";s:3:\"6.9\";}s:21:\"wp-reset/wp-reset.php\";O:8:\"stdClass\":10:{s:2:\"id\";s:22:\"w.org/plugins/wp-reset\";s:4:\"slug\";s:8:\"wp-reset\";s:6:\"plugin\";s:21:\"wp-reset/wp-reset.php\";s:11:\"new_version\";s:4:\"2.08\";s:3:\"url\";s:39:\"https://wordpress.org/plugins/wp-reset/\";s:7:\"package\";s:56:\"https://downloads.wordpress.org/plugin/wp-reset.2.08.zip\";s:5:\"icons\";a:2:{s:2:\"2x\";s:61:\"https://ps.w.org/wp-reset/assets/icon-256x256.png?rev=1906468\";s:2:\"1x\";s:61:\"https://ps.w.org/wp-reset/assets/icon-128x128.png?rev=1906468\";}s:7:\"banners\";a:2:{s:2:\"2x\";s:64:\"https://ps.w.org/wp-reset/assets/banner-1544x500.png?rev=2163880\";s:2:\"1x\";s:63:\"https://ps.w.org/wp-reset/assets/banner-772x250.png?rev=2163880\";}s:11:\"banners_rtl\";a:0:{}s:8:\"requires\";s:3:\"4.0\";}s:43:\"yith-woocommerce-badges-management/init.php\";O:8:\"stdClass\":10:{s:2:\"id\";s:48:\"w.org/plugins/yith-woocommerce-badges-management\";s:4:\"slug\";s:34:\"yith-woocommerce-badges-management\";s:6:\"plugin\";s:43:\"yith-woocommerce-badges-management/init.php\";s:11:\"new_version\";s:6:\"3.27.0\";s:3:\"url\";s:65:\"https://wordpress.org/plugins/yith-woocommerce-badges-management/\";s:7:\"package\";s:84:\"https://downloads.wordpress.org/plugin/yith-woocommerce-badges-management.3.27.0.zip\";s:5:\"icons\";a:2:{s:2:\"1x\";s:79:\"https://ps.w.org/yith-woocommerce-badges-management/assets/icon.svg?rev=3042027\";s:3:\"svg\";s:79:\"https://ps.w.org/yith-woocommerce-badges-management/assets/icon.svg?rev=3042027\";}s:7:\"banners\";a:2:{s:2:\"2x\";s:90:\"https://ps.w.org/yith-woocommerce-badges-management/assets/banner-1544x500.jpg?rev=2659446\";s:2:\"1x\";s:89:\"https://ps.w.org/yith-woocommerce-badges-management/assets/banner-772x250.jpg?rev=2659446\";}s:11:\"banners_rtl\";a:0:{}s:8:\"requires\";s:3:\"6.8\";}s:33:\"fusion-builder/fusion-builder.php\";O:8:\"stdClass\":9:{s:2:\"id\";s:33:\"fusion-builder/fusion-builder.php\";s:4:\"slug\";s:14:\"fusion-builder\";s:6:\"plugin\";s:33:\"fusion-builder/fusion-builder.php\";s:11:\"new_version\";s:4:\"3.16\";s:6:\"tested\";s:3:\"6.8\";s:3:\"url\";s:0:\"\";s:7:\"package\";s:0:\"\";s:5:\"icons\";a:2:{s:2:\"1x\";s:86:\"https://updates.theme-fusion.com/wp-content/uploads/2017/01/avada-icon-transparent.png\";s:2:\"2x\";s:86:\"https://updates.theme-fusion.com/wp-content/uploads/2017/01/avada-icon-transparent.png\";}s:7:\"banners\";a:2:{s:2:\"2x\";s:76:\"https://updates.theme-fusion.com/wp-content/uploads/2017/01/avada_banner.jpg\";s:7:\"default\";s:76:\"https://updates.theme-fusion.com/wp-content/uploads/2017/01/avada_banner.jpg\";}}s:27:\"fusion-core/fusion-core.php\";O:8:\"stdClass\":9:{s:2:\"id\";s:27:\"fusion-core/fusion-core.php\";s:4:\"slug\";s:11:\"fusion-core\";s:6:\"plugin\";s:27:\"fusion-core/fusion-core.php\";s:11:\"new_version\";s:4:\"5.16\";s:6:\"tested\";s:3:\"6.8\";s:3:\"url\";s:0:\"\";s:7:\"package\";s:0:\"\";s:5:\"icons\";a:2:{s:2:\"1x\";s:86:\"https://updates.theme-fusion.com/wp-content/uploads/2017/01/avada-icon-transparent.png\";s:2:\"2x\";s:86:\"https://updates.theme-fusion.com/wp-content/uploads/2017/01/avada-icon-transparent.png\";}s:7:\"banners\";a:2:{s:2:\"2x\";s:76:\"https://updates.theme-fusion.com/wp-content/uploads/2017/01/avada_banner.jpg\";s:7:\"default\";s:76:\"https://updates.theme-fusion.com/wp-content/uploads/2017/01/avada_banner.jpg\";}}}s:7:\"checked\";a:10:{s:34:\"advanced-custom-fields-pro/acf.php\";s:5:\"6.8.6\";s:43:\"advanced-woo-labels/advanced-woo-labels.php\";s:4:\"2.49\";s:33:\"fusion-builder/fusion-builder.php\";s:4:\"3.16\";s:27:\"fusion-core/fusion-core.php\";s:4:\"5.16\";s:53:\"child-theme-configurator/child-theme-configurator.php\";s:5:\"2.6.7\";s:33:\"classic-editor/classic-editor.php\";s:5:\"1.7.0\";s:33:\"duplicator-pro/duplicator-pro.php\";s:8:\"4.5.21.2\";s:27:\"woocommerce/woocommerce.php\";s:6:\"11.0.0\";s:21:\"wp-reset/wp-reset.php\";s:4:\"2.08\";s:43:\"yith-woocommerce-badges-management/init.php\";s:6:\"3.27.0\";}}', 'off'),
(95277, 'db_upgraded', '', 'on'),
(184157, '_transient_timeout_wc_product_children_606', '1787783286', 'off'),
(184158, '_transient_wc_product_children_606', 'a:2:{s:3:\"all\";a:3:{i:0;i:1310;i:1;i:1309;i:2;i:609;}s:7:\"visible\";a:3:{i:0;i:1310;i:1;i:1309;i:2;i:609;}}', 'off'),
(184159, '_transient_timeout_wc_var_prices_606', '1787783286', 'off'),
(184160, '_transient_wc_var_prices_606', '{\"f9e544f77b7eac7add281ef28ca5559f\":{\"price\":{\"1310\":\"50.00\",\"1309\":\"45.00\",\"609\":\"65.00\"},\"regular_price\":{\"1310\":\"50.00\",\"1309\":\"45.00\",\"609\":\"65.00\"},\"sale_price\":{\"1310\":\"50.00\",\"1309\":\"45.00\",\"609\":\"65.00\"}}}', 'off'),
(184222, '_transient_timeout_wc_product_children_577', '1787788223', 'off'),
(184223, '_transient_wc_product_children_577', 'a:2:{s:3:\"all\";a:2:{i:0;i:1320;i:1;i:1321;}s:7:\"visible\";a:2:{i:0;i:1320;i:1;i:1321;}}', 'off'),
(184224, '_transient_timeout_wc_var_prices_577', '1787788223', 'off'),
(184225, '_transient_wc_var_prices_577', '{\"f9e544f77b7eac7add281ef28ca5559f\":{\"price\":{\"1320\":\"549.00\",\"1321\":\"699.00\"},\"regular_price\":{\"1320\":\"549.00\",\"1321\":\"699.00\"},\"sale_price\":{\"1320\":\"549.00\",\"1321\":\"699.00\"}}}', 'off'),
(68701, '_transient_health-check-site-status-result', '{\"good\":22,\"recommended\":3,\"critical\":1}', 'on'),
(83669, '_transient_woocommerce_product_task_has_product_transient', 'yes', 'on'),
(66214, '_transient_orders-transient-version', '1785082145', 'on'),
(66217, '_transient_woocommerce_reports-transient-version', '1785082145', 'on'),
(187258, '_transient_timeout_wc_product_children_166', '1787951738', 'off'),
(187259, '_transient_wc_product_children_166', 'a:2:{s:3:\"all\";a:2:{i:0;i:431;i:1;i:430;}s:7:\"visible\";a:2:{i:0;i:431;i:1;i:430;}}', 'off'),
(187260, '_transient_timeout_wc_var_prices_166', '1787951738', 'off'),
(187261, '_transient_wc_var_prices_166', '{\"f9e544f77b7eac7add281ef28ca5559f\":{\"price\":{\"431\":\"450.00\",\"430\":\"550.00\"},\"regular_price\":{\"431\":\"450.00\",\"430\":\"550.00\"},\"sale_price\":{\"431\":\"450.00\",\"430\":\"550.00\"}}}', 'off'),
(74433, 'woocommerce_private_link', 'no', 'auto'),
(79423, '_transient_timeout_avada_studio', '1777914005', 'off'),
(181946, '_transient_timeout_wc_product_children_596', '1787615568', 'off'),
(181947, '_transient_wc_product_children_596', 'a:2:{s:3:\"all\";a:2:{i:0;i:1313;i:1;i:1314;}s:7:\"visible\";a:2:{i:0;i:1313;i:1;i:1314;}}', 'off'),
(181948, '_transient_timeout_wc_var_prices_596', '1787615568', 'off'),
(181949, '_transient_wc_var_prices_596', '{\"f9e544f77b7eac7add281ef28ca5559f\":{\"price\":{\"1313\":\"450.00\",\"1314\":\"700.00\"},\"regular_price\":{\"1313\":\"450.00\",\"1314\":\"700.00\"},\"sale_price\":{\"1313\":\"450.00\",\"1314\":\"700.00\"}}}', 'off'),
(203781, '_transient_timeout_woocommerce_admin_pes_incentive_woopayments_store_has_orders', '1786313917', 'off'),
(203782, '_transient_woocommerce_admin_pes_incentive_woopayments_store_has_orders', 'no', 'off'),
(203783, '_transient_timeout_woocommerce_admin_pes_incentive_woopayments_cache', '1786378717', 'off'),
(203784, '_transient_woocommerce_admin_pes_incentive_woopayments_cache', 'a:3:{s:10:\"incentives\";a:0:{}s:12:\"context_hash\";s:32:\"6d37bc19d822af681f896b21065134c7\";s:9:\"timestamp\";i:1786292317;}', 'off'),
(203928, '_transient_timeout_wc_tracks_blog_details', '1786386919', 'off'),
(203929, '_transient_wc_tracks_blog_details', 'a:6:{s:3:\"url\";s:21:\"https://yourattil.com\";s:9:\"blog_lang\";s:5:\"en_US\";s:7:\"blog_id\";b:0;s:8:\"store_id\";s:36:\"3dacbf0b-dded-4bda-87be-f76306a4130e\";s:14:\"products_count\";s:2:\"28\";s:10:\"wc_version\";s:6:\"10.7.0\";}', 'off'),
(204149, '_site_transient_timeout_fusion_patcher_check_num', '1786387304', 'off'),
(204150, '_site_transient_fusion_patcher_check_num', 'a:1:{s:5:\"avada\";i:0;}', 'off'),
(204151, '_site_transient_duplicator_translations_duplicator-pro_plugin', 'O:8:\"stdClass\":2:{s:14:\"duplicator-pro\";a:1:{s:12:\"translations\";a:10:{i:0;a:7:{s:8:\"language\";s:5:\"nl_NL\";s:7:\"version\";s:3:\"1.0\";s:7:\"updated\";s:25:\"2025-03-18T13:27:14+00:00\";s:12:\"english_name\";s:5:\"Dutch\";s:11:\"native_name\";s:10:\"Nederlands\";s:7:\"package\";s:84:\"https://translations.duplicator.com/packages/duplicator-pro/duplicator-pro-nl_NL.zip\";s:3:\"iso\";a:2:{i:0;s:2:\"nl\";i:1;s:3:\"nld\";}}i:1;a:7:{s:8:\"language\";s:5:\"fr_FR\";s:7:\"version\";s:3:\"1.0\";s:7:\"updated\";s:25:\"2025-03-18T13:27:14+00:00\";s:12:\"english_name\";s:15:\"French (France)\";s:11:\"native_name\";s:9:\"Français\";s:7:\"package\";s:84:\"https://translations.duplicator.com/packages/duplicator-pro/duplicator-pro-fr_FR.zip\";s:3:\"iso\";a:1:{i:0;s:2:\"fr\";}}i:2;a:7:{s:8:\"language\";s:5:\"de_DE\";s:7:\"version\";s:3:\"1.0\";s:7:\"updated\";s:25:\"2025-03-18T13:27:14+00:00\";s:12:\"english_name\";s:6:\"German\";s:11:\"native_name\";s:7:\"Deutsch\";s:7:\"package\";s:84:\"https://translations.duplicator.com/packages/duplicator-pro/duplicator-pro-de_DE.zip\";s:3:\"iso\";a:1:{i:0;s:2:\"de\";}}i:3;a:7:{s:8:\"language\";s:5:\"it_IT\";s:7:\"version\";s:3:\"1.0\";s:7:\"updated\";s:25:\"2025-03-18T13:27:14+00:00\";s:12:\"english_name\";s:7:\"Italian\";s:11:\"native_name\";s:8:\"Italiano\";s:7:\"package\";s:84:\"https://translations.duplicator.com/packages/duplicator-pro/duplicator-pro-it_IT.zip\";s:3:\"iso\";a:2:{i:0;s:2:\"it\";i:1;s:3:\"ita\";}}i:4;a:7:{s:8:\"language\";s:2:\"ja\";s:7:\"version\";s:3:\"1.0\";s:7:\"updated\";s:25:\"2025-03-18T13:27:14+00:00\";s:12:\"english_name\";s:8:\"Japanese\";s:11:\"native_name\";s:9:\"日本語\";s:7:\"package\";s:81:\"https://translations.duplicator.com/packages/duplicator-pro/duplicator-pro-ja.zip\";s:3:\"iso\";a:1:{i:0;s:2:\"ja\";}}i:5;a:7:{s:8:\"language\";s:5:\"pl_PL\";s:7:\"version\";s:3:\"1.0\";s:7:\"updated\";s:25:\"2025-03-18T13:27:14+00:00\";s:12:\"english_name\";s:6:\"Polish\";s:11:\"native_name\";s:6:\"Polski\";s:7:\"package\";s:84:\"https://translations.duplicator.com/packages/duplicator-pro/duplicator-pro-pl_PL.zip\";s:3:\"iso\";a:2:{i:0;s:2:\"pl\";i:1;s:3:\"pol\";}}i:6;a:7:{s:8:\"language\";s:5:\"pt_BR\";s:7:\"version\";s:3:\"1.0\";s:7:\"updated\";s:25:\"2025-03-18T13:27:14+00:00\";s:12:\"english_name\";s:19:\"Portuguese (Brazil)\";s:11:\"native_name\";s:20:\"Português do Brasil\";s:7:\"package\";s:84:\"https://translations.duplicator.com/packages/duplicator-pro/duplicator-pro-pt_BR.zip\";s:3:\"iso\";a:2:{i:0;s:2:\"pt\";i:1;s:3:\"por\";}}i:7;a:7:{s:8:\"language\";s:5:\"ru_RU\";s:7:\"version\";s:3:\"1.0\";s:7:\"updated\";s:25:\"2025-03-18T13:27:14+00:00\";s:12:\"english_name\";s:7:\"Russian\";s:11:\"native_name\";s:14:\"Русский\";s:7:\"package\";s:84:\"https://translations.duplicator.com/packages/duplicator-pro/duplicator-pro-ru_RU.zip\";s:3:\"iso\";a:2:{i:0;s:2:\"ru\";i:1;s:3:\"rus\";}}i:8;a:7:{s:8:\"language\";s:5:\"es_ES\";s:7:\"version\";s:3:\"1.0\";s:7:\"updated\";s:25:\"2025-03-18T13:27:14+00:00\";s:12:\"english_name\";s:15:\"Spanish (Spain)\";s:11:\"native_name\";s:8:\"Español\";s:7:\"package\";s:84:\"https://translations.duplicator.com/packages/duplicator-pro/duplicator-pro-es_ES.zip\";s:3:\"iso\";a:3:{i:0;s:2:\"es\";i:1;s:3:\"spa\";i:2;s:3:\"spa\";}}i:9;a:7:{s:8:\"language\";s:5:\"tr_TR\";s:7:\"version\";s:3:\"1.0\";s:7:\"updated\";s:25:\"2025-03-18T13:27:14+00:00\";s:12:\"english_name\";s:7:\"Turkish\";s:11:\"native_name\";s:8:\"Türkçe\";s:7:\"package\";s:84:\"https://translations.duplicator.com/packages/duplicator-pro/duplicator-pro-tr_TR.zip\";s:3:\"iso\";a:2:{i:0;s:2:\"tr\";i:1;s:3:\"tur\";}}}}s:13:\"_last_checked\";i:1786300904;}', 'off');
