{"id":6352,"date":"2026-08-10T21:18:51","date_gmt":"2026-08-10T21:18:51","guid":{"rendered":"https:\/\/developer.wordpress.org\/news\/?p=6352"},"modified":"2026-08-10T21:19:22","modified_gmt":"2026-08-10T21:19:22","slug":"whats-new-for-developers-august-2026","status":"publish","type":"post","link":"https:\/\/developer.wordpress.org\/news\/2026\/08\/whats-new-for-developers-august-2026\/","title":{"rendered":"What\u2019s new for developers? (August 2026)"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">August is a big month for WordPress. Version 7.1 is scheduled to land on August 19, and it&#8217;s arriving on the last day of <a href=\"https:\/\/us.wordcamp.org\/2026\/\">WordCamp US<\/a> in Phoenix, which runs August 16\u201319. Release day during the flagship event of the year is a nice bit of scheduling, and if you&#8217;re going to be there, you&#8217;ll get to watch it happen live.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Both RC1 and RC2 have shipped in the last week. That means the feature set is locked and the <a href=\"https:\/\/make.wordpress.org\/core\/2026\/08\/05\/wordpress-7-1-field-guide\/\">Field Guide<\/a> is out.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Two security releases also landed in the past month. <a href=\"https:\/\/wordpress.org\/news\/2026\/07\/wordpress-7-0-2-release\/\">WordPress 7.0.2<\/a> arrived on July 17 to address one critical and one high severity issue. The severity was high enough that WordPress.org enabled forced updates for affected versions. Then <a href=\"https:\/\/wordpress.org\/news\/2026\/08\/wordpress-7-0-3-release\/\">WordPress 7.0.3<\/a> shipped on August 6 with a dozen more fixes. If any site you maintain somehow missed both auto-updates, go handle that before you read the rest of this post.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">With nine days left before 7.1 ships, this is your last comfortable window to test your plugins and themes against it. Let&#8217;s get into what&#8217;s new.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As always, you can test the latest by running WordPress trunk along with the newest Gutenberg release, or by spinning up a <a href=\"https:\/\/playground.wordpress.net\/?php=8.0&amp;wp=beta&amp;networking=no&amp;language=&amp;multisite=no&amp;random=y4q1rn88xn\">Playground instance<\/a> with no setup at all.<\/p>\n\n\n\n<div class=\"wp-block-group has-light-grey-2-background-color has-background is-layout-flow wp-block-group-is-layout-flow\" style=\"border-radius:2px;margin-top:var(--wp--preset--spacing--30);margin-bottom:var(--wp--preset--spacing--30);padding-top:var(--wp--preset--spacing--30);padding-right:var(--wp--preset--spacing--30);padding-bottom:var(--wp--preset--spacing--30);padding-left:var(--wp--preset--spacing--30)\">\n<p class=\"has-large-font-size wp-block-paragraph\" style=\"font-style:normal;font-weight:600;line-height:1\">Table of Contents<\/p>\n\n\n<nav aria-label=\"Table of Contents\" class=\"wp-block-table-of-contents\"><ol><li><a class=\"wp-block-table-of-contents__entry\" href=\"#highlights\">Highlights<\/a><ol><li><a class=\"wp-block-table-of-contents__entry\" href=\"#the-7-1-field-guide-is-out\">The 7.1 Field Guide is out<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#responsive-block-styles-land-in-core\">Responsive block styles land in Core<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#pseudo-and-custom-style-states\">Pseudo and custom style states<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#the-svg-icon-api-now-public\">The SVG Icon API now public<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#the-post-editor-is-always-iframed\">The post editor is always iframed<\/a><\/li><\/ol><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#plugins-and-tools\">Plugins and tools<\/a><ol><li><a class=\"wp-block-table-of-contents__entry\" href=\"#list-table-row-headers-have-moved\">List table row headers have moved<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#the-abilities-api-updates\">The Abilities API updates<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#design-system-theming-for-admin-interfaces\">Design System theming for admin interfaces<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#components-drop-the-40px-opt-in-for-good\">Components drop the 40px opt-in for good<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#accessible-tooltips-arrive-in-the-admin\">Accessible tooltips arrive in the admin<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#block-api-and-editor-extensibility\">Block API and editor extensibility<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#filtering-site-editor-screens\">Filtering Site Editor screens<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#widget-primitives\">Widget primitives<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#notes-and-collaboration\">Notes and collaboration<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#other-core-changes-worth-a-look\">Other Core changes worth a look<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#react-19-is-punted-again\">React 19 is punted again<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#wordpress-coding-standards\">WordPress Coding Standards<\/a><\/li><\/ol><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#themes\">Themes<\/a><ol><li><a class=\"wp-block-table-of-contents__entry\" href=\"#three-new-design-tools\">Three new design tools<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#the-navigation-block-stops-propagating-font-size\">The Navigation block stops propagating font size<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#global-styles-values-show-up-in-the-inspector\">Global Styles values show up in the inspector<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#playlist-and-tabs-are-stable\">Playlist and Tabs are stable<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#other-theme-facing-changes\">Other theme-facing changes<\/a><\/li><\/ol><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#playground\">Playground<\/a><ol><li><a class=\"wp-block-table-of-contents__entry\" href=\"#a-new-interface-and-a-handbook-to-go-with-it\">A new interface, and a handbook to go with it<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#programmatic-site-management\">Programmatic site management<\/a><\/li><\/ol><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#resources\">Resources<\/a><ol><li><a class=\"wp-block-table-of-contents__entry\" href=\"#developer-blog\">Developer Blog<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#developer-notes\">Developer notes<\/a><\/li><\/ol><\/li><\/ol><\/nav><\/div>\n\n\n\n<h2 id=\"highlights\" class=\"wp-block-heading\">Highlights<\/h2>\n\n\n\n<h3 id=\"the-7-1-field-guide-is-out\" class=\"wp-block-heading\">The 7.1 Field Guide is out<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The <a href=\"https:\/\/make.wordpress.org\/core\/2026\/08\/05\/wordpress-7-1-field-guide\/\">WordPress 7.1 Field Guide<\/a> is published, and it is the single most important thing to read this month. It collects every release dev note in one place: Media, Accessibility, the Abilities API, Global Styles, the SVG Icon API, DataViews and View Config, the Editor, the Design System, the persistent admin bar, and external libraries.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The section on <a href=\"https:\/\/make.wordpress.org\/core\/2026\/08\/05\/wordpress-7-1-field-guide\/#what-changes-didn-t-make-the-7-1-release\">what didn&#8217;t make the release<\/a> is equally useful. Real-time collaboration is not enabled in 7.1. The plan to hide the Classic block from the inserter was reverted. React 19 has been punted again. The <strong>On This Day<\/strong> dashboard widget didn&#8217;t land, and the Guidelines\/Knowledge merge proposal continues to evolve. If you&#8217;ve been tracking any of those in these previous roundups, that&#8217;s where they stand.<\/p>\n\n\n\n<h3 id=\"responsive-block-styles-land-in-core\" class=\"wp-block-heading\">Responsive block styles land in Core<\/h3>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a7acd6eb0f93&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a7acd6eb0f93\" class=\"wp-block-image alignwide size-full has-custom-border wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"2650\" height=\"1476\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/developer.wordpress.org\/news\/files\/2026\/08\/responsive-styles.webp\" alt=\"WordPress post editor with the &quot;preview&quot; dropdown selected. The Tablet view is selected and the Responsive Styles item is selected to edit styles in tablet mode.\" class=\"has-border-color has-light-grey-2-border-color wp-image-6355\" style=\"border-width:1px\" srcset=\"https:\/\/developer.wordpress.org\/news\/files\/2026\/08\/responsive-styles.webp 2650w, https:\/\/developer.wordpress.org\/news\/files\/2026\/08\/responsive-styles-300x167.webp 300w, https:\/\/developer.wordpress.org\/news\/files\/2026\/08\/responsive-styles-767x427.webp 767w, https:\/\/developer.wordpress.org\/news\/files\/2026\/08\/responsive-styles-1024x570.webp 1024w, https:\/\/developer.wordpress.org\/news\/files\/2026\/08\/responsive-styles-1536x856.webp 1536w, https:\/\/developer.wordpress.org\/news\/files\/2026\/08\/responsive-styles-2048x1141.webp 2048w\" sizes=\"auto, (max-width: 2650px) 100vw, 2650px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Responsive style states have been a work in progress in these roundups since spring. <a href=\"https:\/\/make.wordpress.org\/core\/2026\/08\/05\/responsive-block-styles-and-configurable-viewports-in-wordpress-7-1\/\">In WordPress 7.1, they ship.<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Styles can now be defined for tablet and mobile viewports, both in Global Styles per block type and on individual block instances. In <code>theme.json<\/code>, they&#8217;re nested under <code>@mobile<\/code> and <code>@tablet<\/code> keys:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"json\" class=\"language-json\">\"styles\": {\n\t\"blocks\": {\n\t\t\"core\/group\": {\n\t\t\t\"spacing\": {\n\t\t\t\t\"padding\": { \"top\": \"3rem\" }\n\t\t\t},\n\t\t\t\"@mobile\": {\n\t\t\t\t\"spacing\": {\n\t\t\t\t\t\"padding\": { \"top\": \"1rem\" }\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">There is no <code>@desktop<\/code> key, and that&#8217;s on purpose. The block&#8217;s default style is the desktop style, and it continues to apply at every viewport for any property you don&#8217;t override.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The part you might\u2019ve been waiting for:<\/strong> themes can now <a href=\"https:\/\/core.trac.wordpress.org\/ticket\/65596\">configure the breakpoints themselves<\/a> via a new top-level <code>settings.viewport<\/code> property in <code>theme.json<\/code>. The defaults are <code>480px<\/code> for mobile and <code>782px<\/code> for tablet. The values must be non-negative lengths in <code>px<\/code>, <code>em<\/code>, or <code>rem<\/code>. CSS functions, percentages, and unitless values are ignored. And if the tablet value is equal to or lower than the mobile value, only mobile is used. It&#8217;s a top-level setting, so you can&#8217;t configure it per block type.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Blocks that use standard block supports get responsive styles for free. That covers typography, color, background, border, dimensions, spacing, and layout. Blocks with custom style controls do not. That&#8217;s the line to check your own blocks against.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can also <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/80814\">turn off responsive editing<\/a> for users with a quick filter:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">add_filter( 'block_editor_settings_all', 'example_disable_responsive_editing' );\n\nfunction example_disable_responsive_editing( $settings ) {\n\t$settings['responsiveEditingEnabled'] = false;\n\treturn $settings;\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Note that responsive styles support means changing block-level CSS in Core. <a href=\"https:\/\/make.wordpress.org\/core\/2026\/08\/04\/miscellaneous-block-editor-changes-in-wordpress-7-1\/#block-level-preset-classes-now-match-root-level-specificity\">Preset utility selectors<\/a> are now wrapped in <code>:where()<\/code>.<\/p>\n\n\n\n<h3 id=\"pseudo-and-custom-style-states\" class=\"wp-block-heading\">Pseudo and custom style states<\/h3>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a7acd6eb1758&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a7acd6eb1758\" class=\"wp-block-image alignwide size-full wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"2048\" height=\"1141\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/developer.wordpress.org\/news\/files\/2026\/08\/pseudo-states.webp\" alt=\"WordPress Site Editor with the Styles &gt; Blocks &gt; Button panel open. The &quot;Hover&quot; state for the button is selected for customization.\" class=\"wp-image-6357\" srcset=\"https:\/\/developer.wordpress.org\/news\/files\/2026\/08\/pseudo-states.webp 2048w, https:\/\/developer.wordpress.org\/news\/files\/2026\/08\/pseudo-states-300x167.webp 300w, https:\/\/developer.wordpress.org\/news\/files\/2026\/08\/pseudo-states-766x427.webp 766w, https:\/\/developer.wordpress.org\/news\/files\/2026\/08\/pseudo-states-1024x570.webp 1024w, https:\/\/developer.wordpress.org\/news\/files\/2026\/08\/pseudo-states-1536x856.webp 1536w\" sizes=\"auto, (max-width: 2048px) 100vw, 2048px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Alongside responsive styles, another oft-requested theme dev feature has landed: <a href=\"https:\/\/make.wordpress.org\/core\/2026\/08\/05\/pseudo-and-custom-style-states-in-wordpress-7-1\/\">support for pseudo-state styling<\/a>. You can define <code>:hover<\/code>, <code>:focus<\/code>, <code>:focus-visible<\/code>, and <code>:active<\/code> in <code>theme.json<\/code> and via the editor. For now, this is limited to the Button and Navigation Link blocks.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here\u2019s an example of styling <code>:hover<\/code> for a Button block (with responsive styling!):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"json\" class=\"language-json\">\"core\/button\": {\n\t\":hover\": {\n\t\t\"color\": { \"background\": \"var:preset|color|contrast\" }\n\t},\n\t\"@mobile\": {\n\t\t\":hover\": {\n\t\t\t\"color\": { \"background\": \"var:preset|color|contrast-2\" }\n\t\t}\n\t}\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">There&#8217;s also an early custom states feature, currently <code>theme.json<\/code>-only with no user-facing UI, used by the Navigation Link block to style the current menu item via a <code>-current<\/code> property. Custom states use a <code>-<\/code> prefix and generate CSS that targets a class name declared through a block&#8217;s <code>block.json<\/code> <code>selectors.states<\/code> property. Worth knowing about now, even though it&#8217;s narrow today.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Like responsive editing, this has its own opt-out: the <code>blockStatesEditingEnabled<\/code> editor setting.<\/p>\n\n\n\n<h3 id=\"the-svg-icon-api-now-public\" class=\"wp-block-heading\">The SVG Icon API now public<\/h3>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a7acd6eb1ddf&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a7acd6eb1ddf\" class=\"wp-block-image alignwide size-full wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"2048\" height=\"1135\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/developer.wordpress.org\/news\/files\/2026\/08\/custom-icons.webp\" alt=\"Modal popup in the WordPress post editor that displays the Icon Library. A custom collection is selected showing various custom SVG icons.\" class=\"wp-image-6359\" srcset=\"https:\/\/developer.wordpress.org\/news\/files\/2026\/08\/custom-icons.webp 2048w, https:\/\/developer.wordpress.org\/news\/files\/2026\/08\/custom-icons-300x166.webp 300w, https:\/\/developer.wordpress.org\/news\/files\/2026\/08\/custom-icons-767x425.webp 767w, https:\/\/developer.wordpress.org\/news\/files\/2026\/08\/custom-icons-1024x568.webp 1024w, https:\/\/developer.wordpress.org\/news\/files\/2026\/08\/custom-icons-1536x851.webp 1536w\" sizes=\"auto, (max-width: 2048px) 100vw, 2048px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress 7.0 shipped a bundled set of SVG icons for the editor and the Icon block. In 7.1, <a href=\"https:\/\/make.wordpress.org\/core\/2026\/07\/24\/registering-and-rendering-svg-icons-in-wordpress-7-1\/\">it becomes a proper public API<\/a> that you can register into.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Every icon belongs to a collection, and the collection name becomes a namespace prefix, which is what keeps <code>my-plugin\/star<\/code> from colliding with <code>core\/star<\/code>. Register the collection with <code>wp_register_icon_collection()<\/code>, then add icons with <code>wp_register_icon()<\/code>. And <code>wp_get_icon()<\/code> renders an icon anywhere in PHP with optional size, class, and label arguments.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There are two limitations to plan around:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Registered SVGs are sanitized through <code>wp_kses<\/code> against a deliberately conservative allowlist: only <code>&lt;svg&gt;<\/code>, <code>&lt;path&gt;<\/code>, and <code>&lt;polygon&gt;<\/code>. <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/75550\">Work to broaden the allowlist is underway<\/a>.<\/li>\n\n\n\n<li><code>fill<\/code> is only allowed on the shapes, not the outer <code>&lt;svg&gt;<\/code>, and <code>wp_get_icon()<\/code> doesn&#8217;t add one. Inside the Icon block this doesn&#8217;t matter, because the block stylesheet sets it to the current color. But a standalone <code>wp_get_icon()<\/code> call renders in the SVG&#8217;s own fill (black), not the surrounding text color. Recommended: supply your own CSS against the class you pass in.<\/li>\n<\/ul>\n\n\n\n<h3 id=\"the-post-editor-is-always-iframed\" class=\"wp-block-heading\">The post editor is always iframed<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">This one has been coming since the template editor moved into an iframe in WordPress 5.8. In 7.1, <a href=\"https:\/\/make.wordpress.org\/core\/2026\/08\/03\/iframed-editor-changes-in-wordpress-7-1\/\">the post editor takes the final step<\/a>: it is always iframed, regardless of theme type, the block API versions of registered blocks, or the block API versions of blocks in the content. Sites that register legacy meta boxes are included.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In 7.0, the decision was made per post based on what blocks were inserted, which meant the editor could switch between iframed and non-iframed modes depending on content. That conditional behavior is gone.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Most blocks already work without changes. The issues that do surface almost always trace back to one root cause: the iframe has its own document and window, separate from the admin page where editor scripts run. Code reaching for the global document or window to touch the canvas is looking at the wrong document. The usual fixes are getting the canvas document from an element inside it via <code>ownerDocument<\/code> and <code>defaultView<\/code>, and using <code>useRefEffect<\/code> to attach and clean up listeners on canvas elements. The handbook&#8217;s <a href=\"https:\/\/developer.wordpress.org\/block-editor\/reference-guides\/block-api\/block-api-versions\/block-migration-for-iframe-editor-compatibility\/#technical-considerations-for-the-iframe-editor\">technical considerations for the iframe editor<\/a> covers the full list.<\/p>\n\n\n\n<h2 id=\"plugins-and-tools\" class=\"wp-block-heading\">Plugins and tools<\/h2>\n\n\n\n<h3 id=\"list-table-row-headers-have-moved\" class=\"wp-block-heading\">List table row headers have moved<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">This is the change most likely to quietly break something you maintain. In <a href=\"https:\/\/core.trac.wordpress.org\/changeset\/62838\">changeset 62838<\/a>, the primary <code>th scope=\"row\"<\/code> in post list tables <a href=\"https:\/\/make.wordpress.org\/core\/2026\/08\/03\/post-list-tables-row-headers-changed\/\">moved from the checkbox column to the title column<\/a>. The checkbox cell is now a <code>td<\/code>, the title cell is now a <code>th<\/code> carrying an <code>aria-label<\/code> with the post title, and collapsed cells in the responsive view use flex layout.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It&#8217;s a real accessibility win: screen readers now identify each row by the post rather than by a checkbox that may not even be present. But this is markup that has been largely stable since 2010, and plenty of extensions depend on it implicitly. Check any CSS or JavaScript selecting <code>th.check-column<\/code>, or expecting row actions and post titles inside a <code>td<\/code>.<\/p>\n\n\n\n<h3 id=\"the-abilities-api-updates\" class=\"wp-block-heading\">The Abilities API updates<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The Abilities API shipped as infrastructure in WordPress 6.9. In 7.1 it picks up nearly everything you&#8217;d need to actually build against it: a filterable execution lifecycle, custom validation, and a shared discovery pipeline. If you&#8217;re building AI integrations, automation tooling, or protocol adapters, this is the release where the API stops being a foundation and starts being a toolkit.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Five dev notes cover it, and they&#8217;re worth reading in this order:<\/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<\/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\/08\/05\/filtering-registered-abilities-with-wp_get_abilities-in-wordpress-7-1\/\">Filtering registered abilities with wp_get_abilities()<\/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<\/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<\/ul>\n\n\n\n<h3 id=\"design-system-theming-for-admin-interfaces\" class=\"wp-block-heading\">Design System theming for admin interfaces<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress 7.1 ships <a href=\"https:\/\/make.wordpress.org\/core\/2026\/07\/31\/design-system-theming-in-wordpress-7-1\/\">foundational support for theming admin interface components<\/a>, covering color, roundness, and cursor styles. Note that this has nothing to do with the front end. \u201cTheming\u201d in this instance is directly related to the admin.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>wp-theme<\/code> stylesheet provides a full set of semantic design tokens as CSS custom properties, so you can reference them instead of hardcoding values. The <code>wp-theme<\/code> script handle provides a <code>ThemeProvider<\/code> React component that wraps a section of a page and overrides those token values. Give it a pair of seed colors and it generates a harmonious ramp for you.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For plugin authors who&#8217;ve wanted their admin screens to carry their own brand while still looking like they belong in WordPress, this is the first real opening. The <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/blob\/wp\/7.1\/packages\/theme\/docs\/tokens.md\">token reference<\/a> lists what&#8217;s available.<\/p>\n\n\n\n<h3 id=\"components-drop-the-40px-opt-in-for-good\" class=\"wp-block-heading\">Components drop the 40px opt-in for good<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>__next40pxDefaultSize<\/code> prop has finished its journey. It was introduced in 6.7, soft-deprecated in 6.8, and as of 7.1 it&#8217;s <a href=\"https:\/\/make.wordpress.org\/core\/2026\/07\/23\/editor-components-updates-in-wordpress-7-1\/\">a no-op<\/a>.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Form controls render at 40px unconditionally, and passing <code>__next40pxDefaultSize={false}<\/code> no longer opts back out to 36px. Remove the prop from your usage; there&#8217;s no replacement. If you were passing <code>size=\"__unstable-large\"<\/code> only to get the taller control, remove that too. On <code>BorderBoxControl<\/code>, <code>BorderControl<\/code>, <code>FontSizePicker<\/code>, and <code>ToggleGroupControl<\/code>, the <code>size<\/code> prop is deprecated as well.<\/p>\n\n\n\n<h3 id=\"accessible-tooltips-arrive-in-the-admin\" class=\"wp-block-heading\">Accessible tooltips arrive in the admin<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Tooltips have existed in the editor for a while, but not in the rest of wp-admin. WordPress 7.1 adds <code>wp_get_tooltip()<\/code> and <code>wp_get_toggletip()<\/code> <a href=\"https:\/\/make.wordpress.org\/core\/2026\/08\/03\/introducing-name-and-informational-tool-tips-in-wordpress-7-1\/\">to close that gap<\/a>. The first gives a visible accessible name to icon-only controls; the second adds a triggerable button for extended help text. Core uses them on post meta box controls and the login screen&#8217;s &#8220;Remember Me&#8221; checkbox respectively.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The CSS loads globally, but the JavaScript only loads where Core uses it. Elsewhere, enqueue <code>wp-tooltip<\/code> for both.<\/p>\n\n\n\n<h3 id=\"block-api-and-editor-extensibility\" class=\"wp-block-heading\">Block API and editor extensibility<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Several miscellaneous items are worth looking at that could affect your code:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Block transforms can now <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/78713\">target a specific variation<\/a> via <code>variationName<\/code>, and <code>switchToBlockType()<\/code> accepts a variation as a third argument.<\/li>\n\n\n\n<li><code>__experimentalCloneSanitizedBlock<\/code> and <code>__experimentalSanitizeBlockAttributes<\/code> are <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/79928\">stabilized<\/a>. The experimental names still work but now log deprecations.<\/li>\n\n\n\n<li>Non-paginated entities <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/76406\">now return all records<\/a>. If you were getting a truncated list of ten back from <code>getEntityRecords()<\/code>, you&#8217;ll now get everything, so check anywhere you render without your own limit.<\/li>\n\n\n\n<li>Template parts can <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/79191\">opt out of content-only editing<\/a> with the new <code>disableContentOnlyForTemplateParts<\/code> setting.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Elsewhere in Gutenberg 23.6 and 23.7: block bindings <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/79855\">share context assembly between call sites<\/a>, PHP-only blocks <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/78909\">forward the current post ID to server render<\/a>, the inspector controls styles slot <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/80111\">moved back to its previous position<\/a>, and <code>PluginPostStatusInfo<\/code> is <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/79586\">now available in the DataForm post summary<\/a>. The Interactivity API also <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/79975\">refactored its directives into self-registering modules<\/a>.<\/p>\n\n\n\n<h3 id=\"filtering-site-editor-screens\" class=\"wp-block-heading\">Filtering Site Editor screens<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Four new filters let you configure the <code>DataViews<\/code> and <code>DataForm<\/code> components powering the Pages, Templates, Parts, and Patterns screens:\u00a0<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>get_entity_view_config_posttype_page<\/code><\/li>\n\n\n\n<li><code>get_entity_view_config_posttype_wp_template<\/code><\/li>\n\n\n\n<li><code>get_entity_view_config_posttype_wp_template_part<\/code><\/li>\n\n\n\n<li><code>get_entity_view_config_posttype_wp_block<\/code><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Each can set default_view, default_layouts, view_list, and form, so you can control default layout and sort order, which layouts users can pick, the preconfigured views in the sidebar, and the Quick Edit form.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Callbacks receive a config object with methods for merging patches, and they must return the container. The <a href=\"https:\/\/make.wordpress.org\/core\/2026\/07\/31\/filtering-site-editor-screens-in-wordpress-7-1\/\">dev note<\/a> has a working example, and the mechanism is designed to grow to other entities. On the Gutenberg side, view config also <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/79809\">gained version handling<\/a> and <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/80571\">stricter merge semantics<\/a>.<\/p>\n\n\n\n<h3 id=\"widget-primitives\" class=\"wp-block-heading\">Widget primitives<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Work on the widget dashboard continued through both Gutenberg releases, mostly in the direction of typed, declarative widget definitions:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Widget primitives now <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/80149\">ship as a script module<\/a>.<\/li>\n\n\n\n<li>New <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/79544\"><code>WidgetAttributeField<\/code><\/a> for typed attribute schemas, backed by a <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/80148\">field type registry<\/a>.<\/li>\n\n\n\n<li>The widget category is <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/79638\">exposed through the build pipeline and REST API<\/a>.<\/li>\n\n\n\n<li>New declarative <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/79830\">help metadata field<\/a> and <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/79735\">relevance attribute<\/a>.<\/li>\n\n\n\n<li><code>title<\/code>, <code>description<\/code>, and <code>keywords<\/code> are <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/79701\">translated server-side<\/a>.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Dashboard widgets also picked up <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/80510\">action href sanitization<\/a> and <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/80409\">help link sanitization<\/a>.<\/p>\n\n\n\n<h3 id=\"notes-and-collaboration\" class=\"wp-block-heading\">Notes and collaboration<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Real-time collaboration isn&#8217;t in 7.1, but Notes picked up two features since Beta 1: <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/79606\">email notifications for @mentions<\/a> and <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/79934\">shareable revision links<\/a>. Notes are also <a href=\"https:\/\/core.trac.wordpress.org\/ticket\/65613\">now excluded from comment feed queries<\/a>, which relates to a disclosure issue patched in 7.0.3.<\/p>\n\n\n\n<h3 id=\"other-core-changes-worth-a-look\" class=\"wp-block-heading\">Other Core changes worth a look<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The <code>notify_post_author<\/code> <a href=\"https:\/\/make.wordpress.org\/core\/2026\/08\/05\/the-notify_post_author-filter-now-has-the-final-say-on-post-author-notifications\/\">filter now has the final say<\/a>. Approval status is folded into the default, so a <code>__return_true<\/code> callback will now also send mail for comments in moderation, spam, or trash.<\/li>\n\n\n\n<li>The toolbar <a href=\"https:\/\/make.wordpress.org\/core\/2026\/07\/13\/consistent-navigation-in-wordpress-7-1-with-persistent-toolbar\/\">now persists across editor screens<\/a>. If you extend it, test how your items behave during client-side navigation.<\/li>\n\n\n\n<li><a href=\"https:\/\/core.trac.wordpress.org\/ticket\/65624\">Speculative loading can be configured<\/a> via environment variables and constants.<\/li>\n\n\n\n<li><code>_doing_it_wrong()<\/code> messages in <code>WP_Block_Type_Registry::register()<\/code> <a href=\"https:\/\/core.trac.wordpress.org\/ticket\/65039\">gained context<\/a>.<\/li>\n\n\n\n<li><code>get_file_data()<\/code> <a href=\"https:\/\/core.trac.wordpress.org\/ticket\/42517\">now recognizes headers prefixed<\/a> by a <code>&lt;?<\/code> tag.<\/li>\n\n\n\n<li><a href=\"https:\/\/core.trac.wordpress.org\/ticket\/65049\">Templates gained a date field<\/a>, and <a href=\"https:\/\/core.trac.wordpress.org\/ticket\/65491\">KSES allows autofocus on dialog elements<\/a>.<\/li>\n<\/ul>\n\n\n\n<h3 id=\"react-19-is-punted-again\" class=\"wp-block-heading\">React 19 is punted again<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/make.wordpress.org\/core\/2026\/07\/24\/react-19-punted-beyond-wordpress-7-1-experiment-in-gutenberg\/\">React 19 won&#8217;t ship in 7.1<\/a>. It was briefly enabled in Gutenberg, then reverted after unexpected incompatibilities surfaced in how old and new versions of React interact and in how plugins consume React. WordPress 7.1 stays on 18.3.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Testing hasn&#8217;t stopped, though.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Gutenberg 23.4 and later ship an experimental flag under Settings <span aria-hidden=\"true\" class=\"wp-exclude-emoji\">\u2192<\/span> Gutenberg that swaps in React 19 at runtime. The two failure modes to look for are bundling react\/jsx-runtime directly instead of using the externalized script WordPress provides, and relying on React features removed in 19 like string refs or default props on function components. There&#8217;s also <a href=\"https:\/\/github.com\/WordPress\/plugin-check\/issues\/1356\">work underway<\/a> to catch these automatically in Plugin Check.<\/p>\n\n\n\n<h3 id=\"wordpress-coding-standards\" class=\"wp-block-heading\">WordPress Coding Standards<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Two WordPressCS releases landed this month. <a href=\"https:\/\/github.com\/WordPress\/WordPress-Coding-Standards\/releases\/tag\/3.4.0\">3.4.0<\/a> is a normal feature release, and <a href=\"https:\/\/github.com\/WordPress\/WordPress-Coding-Standards\/releases\/tag\/3.4.1\">3.4.1<\/a> contains a security fix, so upgrade sooner rather than later.<\/p>\n\n\n\n<h2 id=\"themes\" class=\"wp-block-heading\">Themes<\/h2>\n\n\n\n<h3 id=\"three-new-design-tools\" class=\"wp-block-heading\">Three new design tools<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress 7.1 adds two block supports and one Global Styles property, and the gradient one solves a problem theme authors have been working around for years.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/make.wordpress.org\/core\/2026\/07\/26\/new-block-support-in-wordpress-7-1-background-gradient-background-gradient\/\"><code>background.gradient<\/code><\/a> is a separate support from the existing color.gradient, and the difference is where the value lands in CSS. The old support renders through the <code>background<\/code> shorthand, which resets every <code>background<\/code> property including <code>background-image<\/code>, so a block could show a gradient or an image but never both. The new support renders through the <code>background-image<\/code> longhand instead, letting the style engine output the gradient and the image as comma-separated values in a single declaration. Opt in through <code>block.json<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"json\" class=\"language-json\">{\n\t\"supports\": {\n\t\t\"background\": {\n\t\t\t\"backgroundImage\": true,\n\t\t\t\"gradient\": true,\n\t\t\t\"__experimentalDefaultControls\": {\n\t\t\t\t\"backgroundImage\": true,\n\t\t\t\t\"gradient\": true\n\t\t\t}\n\t\t}\n\t}\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Core opts Group, Accordion, Pullquote, Post Content, and Quote in for 7.1. Values live at <code>style.background.gradient<\/code> and can be set in <code>theme.json<\/code> under the background styles group, at the root or per block. <code>safecss_filter_attr()<\/code> was updated to permit the combined gradient plus <code>url()<\/code> value, so no extra filtering is needed on your end.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/make.wordpress.org\/core\/2026\/07\/26\/new-block-support-in-wordpress-7-1-minimum-width\/\"><code>dimensions.minWidth<\/code><\/a> follows the same pattern as <code>minHeight<\/code>, applies as CSS <code>min-width<\/code>, and picks up <code>dimensionSizes<\/code> presets when a theme provides them. Note that it&#8217;s hidden by default in the block inspector unless a block opts in through <code>__experimentalDefaultControls<\/code>, but shown by default in Global Styles. And <a href=\"https:\/\/make.wordpress.org\/core\/2026\/07\/23\/text-shadow-support-in-global-styles\/\">text-shadow is now supported in Global Styles<\/a>.<\/p>\n\n\n\n<h3 id=\"the-navigation-block-stops-propagating-font-size\" class=\"wp-block-heading\">The Navigation block stops propagating font size<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The Navigation block no longer forces its font-size configuration onto the markup of <code>core\/navigation-link<\/code>, <code>core\/navigation-submenu<\/code>, <code>core\/page-list<\/code>, and <code>core\/home-link<\/code>. The old behavior compounded badly with relative units, multiplying <code>1.5em<\/code> into <code>2.25em<\/code> into <code>3.375em<\/code> down a nested dropdown, and it caused the editor canvas and the front end to disagree about typography. The block now relies on standard CSS text inheritance.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If your theme targets <code>has-{slug}-font-size<\/code> on nav items directly, the <a href=\"https:\/\/make.wordpress.org\/core\/2026\/08\/04\/miscellaneous-block-editor-changes-in-wordpress-7-1\/#navigation-block-stops-propagating-font-size-to-child-items\">dev note includes a filter<\/a> that restores the legacy classes on child blocks. The original discussion is in <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/issues\/76416\">#76416<\/a>.<\/p>\n\n\n\n<h3 id=\"global-styles-values-show-up-in-the-inspector\" class=\"wp-block-heading\">Global Styles values show up in the inspector<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Block inspector controls now <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/77894\">reflect inherited Global Styles values<\/a> rather than appearing empty when a value is coming from <code>theme.json<\/code>, with <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/80495\">per-level heading element styles<\/a> and <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/80607\">link element styles for blocks that are links<\/a> resolving correctly. The user-facing inheritance UI is <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/80815\">behind a Gutenberg experiment<\/a> for now, so this is one to watch rather than build against.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Two related fixes landed in the same window: <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/80554\">presets are selected by slug<\/a> so two gradients sharing a value keep their identity, and the <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/80497\">same problem is fixed for color presets sharing a hex<\/a>.<\/p>\n\n\n\n<h3 id=\"playlist-and-tabs-are-stable\" class=\"wp-block-heading\">Playlist and Tabs are stable<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Both blocks have been experimental for a while and have appeared in these roundups in that state. In Gutenberg 23.6, <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/80203\">the Playlist blocks<\/a> and <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/80163\">the Tabs block<\/a> were stabilized, and Tabs also picked up <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/80107\">toolbar buttons for reordering tabs<\/a>. Both are on the 7.1 roadmap. If you held off on styling them while the markup was still moving, now&#8217;s the time.<\/p>\n\n\n\n<h3 id=\"other-theme-facing-changes\" class=\"wp-block-heading\">Other theme-facing changes<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Themes that use <code>theme.json<\/code> can now <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/76559\">opt out of block visibility<\/a>.<\/li>\n\n\n\n<li>Custom CSS is <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/80062\">output after the block library styles<\/a>, and Additional CSS <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/78282\">no longer duplicates inside a Query Loop<\/a>.<\/li>\n\n\n\n<li><code>calc()<\/code> expressions now <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/79786\">accept unitless zeros<\/a>.<\/li>\n\n\n\n<li>The style engine <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/79568\">preserves important gradient declarations<\/a>, and block gap <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/80464\">handles nested array values properly<\/a>.<\/li>\n\n\n\n<li>Term Name <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/76581\">migrated to the text-align block support<\/a>, continuing the standardization that&#8217;s been running since 7.0.<\/li>\n\n\n\n<li>Latest Posts <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/77989\">gained layout and block spacing support<\/a>.<\/li>\n\n\n\n<li>Cover can now <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/80092\">restrict which video embed providers are allowed<\/a>.<\/li>\n\n\n\n<li>Video <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/80537\">handles a non-lowercase VIDEO tag<\/a> in <code>render_block_core_video()<\/code>.<\/li>\n\n\n\n<li>Navigation Link and Submenu <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/79748\">run their post-status check without the Gutenberg plugin active<\/a>, fixing a draft and deleted links regression.<\/li>\n\n\n\n<li><code>WP_Theme_JSON::to_ruleset()<\/code> <a href=\"https:\/\/core.trac.wordpress.org\/ticket\/64848\">no longer coerces implicitly<\/a>, and <code>WP_Theme::get_post_templates()<\/code> <a href=\"https:\/\/core.trac.wordpress.org\/ticket\/42513\">got faster for large themes<\/a>.<\/li>\n<\/ul>\n\n\n\n<h2 id=\"playground\" class=\"wp-block-heading\">Playground<\/h2>\n\n\n\n<h3 id=\"a-new-interface-and-a-handbook-to-go-with-it\" class=\"wp-block-heading\">A new interface, and a handbook to go with it<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress Playground has had a busy month. The most visible change is <a href=\"https:\/\/make.wordpress.org\/playground\/2026\/07\/31\/meet-the-new-wordpress-playground-interface\/\">a new interface<\/a>, rebuilt around managing multiple sites rather than spinning up one throwaway instance at a time. Alongside it, there&#8217;s now a proper <a href=\"https:\/\/developer.wordpress.org\/playground\/\">Playground Handbook<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you use Playground for demos, support reproductions, or testing against 7.1 RC builds, this is a good moment to kick the tires and tell them what breaks.<\/p>\n\n\n\n<h3 id=\"programmatic-site-management\" class=\"wp-block-heading\">Programmatic site management<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The <a href=\"https:\/\/make.wordpress.org\/playground\/2026\/07\/22\/manage-wordpress-playground-sites-programmatically\/\">new Site Manager API<\/a> lets you create, list, modify, and delete Playground sites from code rather than clicking through the UI, which opens the door to scripted test matrices and automated demo environments. Worth a look if you&#8217;ve been maintaining your own wrapper around Blueprints to do something similar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Two other resources landed:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/make.wordpress.org\/playground\/2026\/07\/28\/one-playground-three-workflows-consistent-agent-guidance-across-surfaces\/\">One Playground, three workflows<\/a> covers a new version of the Playground agent skill and how guidance stays consistent across surfaces.<\/li>\n\n\n\n<li>A guide on <a href=\"https:\/\/wordpress.github.io\/wordpress-playground\/guides\/import-content-with-blueprints\/\">importing content with Blueprints<\/a>, which is something folks often ask about once they&#8217;ve built their first Blueprint.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Playground also remains the fastest way to test 7.1 without touching a server. The RC announcement links <a href=\"https:\/\/playground.wordpress.net\/?php=8.0&amp;wp=beta&amp;networking=no&amp;language=&amp;multisite=no&amp;random=y4q1rn88xn\">a preconfigured instance<\/a> running the beta channel.<\/p>\n\n\n\n<h2 id=\"resources\" class=\"wp-block-heading\">Resources<\/h2>\n\n\n\n<h3 id=\"developer-blog\" class=\"wp-block-heading\">Developer Blog<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Aside from the regular monthly roundup, three new posts landed on the Developer Blog in the last month:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/developer.wordpress.org\/news\/2026\/07\/on-brand-maintenance-mode-for-wordpress-block-themes\/\">On-brand maintenance mode for WordPress Block Themes<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/developer.wordpress.org\/news\/2026\/07\/build-your-first-ai-powered-wordpress-plugin\/\">Build your first AI-Powered WordPress plugin<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/developer.wordpress.org\/news\/2026\/08\/rethinking-do_action-events-as-objects-hooks-as-class-names\/\">Rethinking do_action(): Events as objects, hooks as class names<\/a><\/li>\n<\/ul>\n\n\n\n<h3 id=\"developer-notes\" class=\"wp-block-heading\">Developer notes<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Also, be sure to catch up on the WordPress 7.1 Dev Notes that apply to your work:<\/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\/22\/client-side-media-processing-in-wordpress-7-1\/\">Client-Side Media Processing in WordPress 7.1<\/a><\/li>\n\n\n\n<li><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><\/li>\n\n\n\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\/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\/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\/24\/registering-and-rendering-svg-icons-in-wordpress-7-1\/\">Registering and rendering SVG icons in WordPress 7.1<\/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\/26\/new-block-support-in-wordpress-7-1-background-gradient-background-gradient\/\">New Block Support in WordPress 7.1: Background Gradient (background.gradient)<\/a><\/li>\n\n\n\n<li><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><\/li>\n\n\n\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 in WordPress 7.1<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/make.wordpress.org\/core\/2026\/07\/29\/jquery-ui-updated-to-1-14-2-in-wordpress-7-1\/\">jQuery UI updated to 1.14.2 in WordPress 7.1<\/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 in WordPress 7.1<\/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 in WordPress 7.1<\/a><\/li>\n\n\n\n<li><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><\/li>\n\n\n\n<li><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><\/li>\n\n\n\n<li><a href=\"https:\/\/make.wordpress.org\/core\/2026\/08\/03\/iframed-editor-changes-in-wordpress-7-1\/\">Iframed Editor Changes in WordPress 7.1<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/make.wordpress.org\/core\/2026\/08\/03\/post-list-tables-row-headers-changed\/\">Post list tables row headers changed<\/a><\/li>\n\n\n\n<li><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><\/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 in WordPress 7.1<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/make.wordpress.org\/core\/2026\/08\/04\/miscellaneous-block-editor-changes-in-wordpress-7-1\/\">Miscellaneous Editor Changes in WordPress 7.1<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/make.wordpress.org\/core\/2026\/08\/05\/responsive-block-styles-and-configurable-viewports-in-wordpress-7-1\/\">Responsive block styles and configurable viewports in WordPress 7.1<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/make.wordpress.org\/core\/2026\/08\/05\/pseudo-and-custom-style-states-in-wordpress-7-1\/\">Pseudo and custom style states in WordPress 7.1<\/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\n\n\n<li><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><\/li>\n<\/ul>\n\n\n\n<p class=\"has-text-align-right wp-block-paragraph\"><em>Props to <a href='https:\/\/profiles.wordpress.org\/bph\/' class='mention'><span class='mentions-prefix'>@<\/span>bph<\/a> and <a href='https:\/\/profiles.wordpress.org\/juanmaguitar\/' class='mention'><span class='mentions-prefix'>@<\/span>juanmaguitar<\/a> for feedback and review on this post.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>WordPress 7.1 ships August 19, and the Field Guide is out. Responsive block styles, pseudo states, the SVG Icon API, and an always-iframed post editor coming soon.<\/p>\n","protected":false},"author":20482,"featured_media":6363,"comment_status":"open","ping_status":"closed","sticky":true,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"edge","default_image_id":0,"font":"","enabled":false},"version":2},"_wpas_customize_per_network":false,"jetpack_post_was_ever_published":false},"categories":[53,158,40,38],"tags":[65],"class_list":["post-6352","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blocks","category-playground","category-plugins","category-themes","tag-roundup","mentions-bph","mentions-juanmaguitar"],"revision_note":"","jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/developer.wordpress.org\/news\/files\/2026\/08\/whats-new-devs-aug-2026.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/developer.wordpress.org\/news\/wp-json\/wp\/v2\/posts\/6352","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/developer.wordpress.org\/news\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/developer.wordpress.org\/news\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/developer.wordpress.org\/news\/wp-json\/wp\/v2\/users\/20482"}],"replies":[{"embeddable":true,"href":"https:\/\/developer.wordpress.org\/news\/wp-json\/wp\/v2\/comments?post=6352"}],"version-history":[{"count":6,"href":"https:\/\/developer.wordpress.org\/news\/wp-json\/wp\/v2\/posts\/6352\/revisions"}],"predecessor-version":[{"id":6366,"href":"https:\/\/developer.wordpress.org\/news\/wp-json\/wp\/v2\/posts\/6352\/revisions\/6366"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/developer.wordpress.org\/news\/wp-json\/wp\/v2\/media\/6363"}],"wp:attachment":[{"href":"https:\/\/developer.wordpress.org\/news\/wp-json\/wp\/v2\/media?parent=6352"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/developer.wordpress.org\/news\/wp-json\/wp\/v2\/categories?post=6352"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/developer.wordpress.org\/news\/wp-json\/wp\/v2\/tags?post=6352"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}