{"id":6392,"date":"2026-09-10T22:18:51","date_gmt":"2026-09-10T22:18:51","guid":{"rendered":"https:\/\/developer.wordpress.org\/news\/?p=6392"},"modified":"2026-09-10T22:19:06","modified_gmt":"2026-09-10T22:19:06","slug":"whats-new-for-developers-september-2026","status":"publish","type":"post","link":"https:\/\/developer.wordpress.org\/news\/2026\/09\/whats-new-for-developers-september-2026\/","title":{"rendered":"What&#8217;s new for developers? (September 2026)"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Last month was a fun one in the WordPress world as <a href=\"https:\/\/wordpress.org\/news\/2026\/08\/mary-lou\/\">version 7.1, \u201cMary Lou,\u201d<\/a> launched to the world. The release included responsive style states, icon registration, and more. If you haven\u2019t updated already, it\u2019s well past time. And if you haven\u2019t caught up on all the developer goodies, be sure to catch up in <a href=\"https:\/\/developer.wordpress.org\/news\/2026\/08\/whats-new-for-developers-august-2026\/\">last month\u2019s roundup<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Since then, we\u2019ve had a couple of new Gutenberg releases: <a href=\"https:\/\/make.wordpress.org\/core\/2026\/08\/19\/whats-new-in-gutenberg-23-8-19-august\/\">23.8<\/a> and <a href=\"https:\/\/make.wordpress.org\/core\/2026\/09\/02\/whats-new-in-gutenberg-23-9-2-september\/\">23.9<\/a>. These continue building upon and fine-tuning previous work. Some of the changes in these releases may feel less glamorous than a lot of new APIs, but I expect a lot of major changes during the WordPress 7.2 development cycle over the next couple of months.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Speaking of WordPress 7.2, Beta 1 is scheduled for October 20-22, 2026, with the final release sometime between December 8-10. For the full release schedule, check out the <a href=\"https:\/\/make.wordpress.org\/core\/7-2\/\">WordPress 7.2 dev cycle page<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As always, you can test the latest changes 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=\"#runnable-code-examples-land-in-the-code-reference\">Runnable code examples land in the Code Reference<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#block-variations-and-transforms-can-declare-their-own-keyboard-shortcuts\">Block variations and transforms can declare their own keyboard shortcuts<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#the-extensible-site-editor-is-where-features-have-to-land-now\">The extensible Site Editor is where features have to land now<\/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=\"#dataviews-drops-private-apis\">DataViews drops private APIs<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#inner-block-templates-move-into-block-settings\">Inner block templates move into block settings<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#schema-support-for-php-only-blocks\">Schema support for PHP-only blocks<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#consistent-kebab-case-slug-generation\">Consistent kebab case slug generation<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#editors-now-use-the-admin-color-scheme\">Editors now use the admin color scheme<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#time-field-for-data-views\">Time field for Data Views<\/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=\"#states-theme-json-schema-fixes\">States theme.json schema fixes<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#more-options-for-curating-the-styles-ui\">More options for curating the styles UI<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#label-now-customizable-via-global-styles\">&lt;label&gt; now customizable via Global Styles<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#cite-text-input-and-select-dropdown-editable-in-global-styles\">Cite, text input, and select dropdown editable in Global Styles<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#vertical-and-horizontal-block-gap-added-for-group\">Vertical and horizontal block gap added for Group<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#updated-block-supports\">Updated block supports<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#global-styles-and-other-fixes\">Global styles and other fixes<\/a><\/li><\/ol><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#playground\">Playground<\/a><\/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=\"#general\">General<\/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=\"runnable-code-examples-land-in-the-code-reference\" class=\"wp-block-heading\">Runnable code examples land in the Code Reference<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The <a href=\"https:\/\/make.wordpress.org\/core\/2026\/09\/04\/runnable-code-examples-are-now-live-in-the-code-reference\/\">Code Reference now runs its examples in the browser<\/a>. Open a page like <code><a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_html_processor\/class_list\/\">WP_HTML_Processor::class_list()<\/a><\/code>, hit <strong>Run<\/strong>, and the snippet executes against a real WordPress install powered by Playground.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Examples are written directly in DocBlocks using a code fence named <code>php interactive<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">&lt;?php\n\/**\n * Generator for a foreach loop to step through each class name for the matched tag.\n *\n * ```php interactive\n * $p = new WP_HTML_Tag_Processor( \"&lt;div class='free &amp;lt;egg&amp;gt;\\tlang-en'&gt;\" );\n * $p-&gt;next_tag();\n * foreach ( $p-&gt;class_list() as $class_name ) {\n *   echo \"{$class_name} \";\n * }\n * \/\/ Outputs: \"free &lt;egg&gt; lang-en \"\n * ```\n *\/\npublic function class_list() {}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This means the runnable example and the documented function live in the same file. The idea has been open as a <a href=\"https:\/\/github.com\/WordPress\/Documentation-Issue-Tracker\/issues\/730\">documentation proposal<\/a> in the documentation issue tracker for a while.<\/p>\n\n\n\n<h3 id=\"block-variations-and-transforms-can-declare-their-own-keyboard-shortcuts\" class=\"wp-block-heading\">Block variations and transforms can declare their own keyboard shortcuts<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Gutenberg 23.9 added a <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/81588\">declarable API<\/a> for block keyboard shortcuts. <kbd>Alt+Shift+2<\/kbd> has converted a paragraph to a Heading 2 since 2022, but that behavior was hardcoded in a private component that each editor package had to render for itself.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There are two declaration sites, and the key names differ between them. Variations take a singular <code>shortcut<\/code> object:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">wp.blocks.registerBlockVariation( 'core\/heading', {\n\tname: 'h2',\n\ttitle: 'Heading 2',\n\tattributes: { level: 2 },\n\tisActive: ( blockAttributes ) =&gt; blockAttributes.level === 2,\n\tshortcut: {\n\t\tname: 'core\/block-editor\/transform-to-heading-2',\n\t\tdescription: __( 'Transform the selected block into a heading 2.' ),\n\t\tkeyCombination: { modifier: 'access', character: '2' },\n\t},\n} );<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Transforms take a plural <code>shortcuts<\/code> array on a type: &#8216;block&#8217; transform, plus an optional <code>variationName<\/code> so one transform can carry six shortcuts without appearing six times in the block switcher.<\/p>\n\n\n\n<h3 id=\"the-extensible-site-editor-is-where-features-have-to-land-now\" class=\"wp-block-heading\">The extensible Site Editor is where features have to land now<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Gutenberg 23.9 carried roughly twenty PRs for the <code>Boot<\/code> package for Site Editor v2: an Identity route, a theme preview page with Global Styles editing, registered plugin mounting, canvas navigation between entity records, unsaved-changes warnings, and theme screens gated on theme support. You can follow along in the <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/issues\/79895\">extensible Site Editor iteration issue<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The contributing guidelines now <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/81752\">require site editor features to land in the extensible site editor too<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It is currently experimental, but if you extend the Site Editor, it\u2019s worth keeping an eye on this progress.<\/p>\n\n\n\n<h2 id=\"plugins-and-tools\" class=\"wp-block-heading\">Plugins and tools<\/h2>\n\n\n\n<h3 id=\"dataviews-drops-private-apis\" class=\"wp-block-heading\">DataViews drops private APIs<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">If you&#8217;ve bundled <code>@wordpress\/dataviews<\/code> into a plugin, you may have hit <code>Cannot unlock an object that was not locked before<\/code>. The cause is that DataViews ships as a bundled package but reaches for private APIs, and two copies of <code>@wordpress\/private-apis<\/code> in one runtime can&#8217;t unlock each other&#8217;s objects. <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/issues\/81230\">DataViews: remove all private API usage<\/a> tracks the fix, which ends with dropping <code>@wordpress\/private-apis<\/code> from the package entirely.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The happy side effect is that components DataViews depended on are getting public homes instead. <code>Calendar<\/code> and <code>RangeCalendar<\/code> <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/81337\">moved into <code>@wordpress\/ui<\/code><\/a> rather than being copied, <code>withIgnoreIMEEvents<\/code> <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/81343\">landed in <code>@wordpress\/keycodes<\/code><\/a>, and <code>ValidatedInputControl<\/code> is <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/81627\">now public too<\/a>. Eght other <code>Validated*<\/code> controls were vendored into DataViews as internal code. But if you&#8217;ve been eyeing a Core component from behind the private API wall, a few more of them are now just imports.<\/p>\n\n\n\n<h3 id=\"inner-block-templates-move-into-block-settings\" class=\"wp-block-heading\">Inner block templates move into block settings<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Gutenberg 23.8 added <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/80027\">template and templateInsertUpdatesSelection as block type settings<\/a>, replacing the <code>&lt;InnerBlocks&gt;<\/code> props of the same names:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">registerBlockType( 'core\/list', {\n\ttemplate: [ [ 'core\/list-item' ] ],\n\ttemplateInsertUpdatesSelection: true,\n\t\/\/ \u2026\n} );<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The change is because of ongoing work on real-time collaboration. The prop-based path applied the template after mount, on each connected client\u2014so inserting a List block with three collaborators in the document produced three list items. Moving the declaration into block type settings means the block and its template land in a single store operation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Roughly twenty core blocks have been migrated. The props still work, but they&#8217;re deprecated, so if your block ships an inner block template, you\u2019ll want to make the change before 7.2 is released.<\/p>\n\n\n\n<h3 id=\"schema-support-for-php-only-blocks\" class=\"wp-block-heading\">Schema support for PHP-only blocks<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>autoRegister<\/code> flag is now <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/80173\">in the block.json schema<\/a>. This means code editor autocomplete and validation for a feature that has technically worked since WordPress 7.0. For a full reference, the <a href=\"https:\/\/make.wordpress.org\/core\/2026\/03\/03\/php-only-block-registration\/\">PHP-only block registration dev note<\/a> from March 2026 is still the best overview.<\/p>\n\n\n\n<h3 id=\"consistent-kebab-case-slug-generation\" class=\"wp-block-heading\">Consistent kebab case slug generation<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress Core&#8217;s <code>_wp_to_kebab_case()<\/code> uses semantics that differ from many off-the-shelf libraries, particularly around numbers. That&#8217;s now available as <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/81294\">the @wordpress\/kebab-case package<\/a> instead of a private utility on the JavaScript side of things.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Usage in JS will produce the same output as in PHP:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">kebabCase( 'white2white' ); \/\/ 'white-2-white'\nkebabCase( 'font2xl' );     \/\/ 'font-2-xl'\nkebabCase( 'white4th' );    \/\/ 'white-4th'<\/code><\/pre>\n\n\n\n<h3 id=\"editors-now-use-the-admin-color-scheme\" class=\"wp-block-heading\">Editors now use the admin color scheme<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The post editor, widgets editor, and customizer widgets editor are now wrapped in a <code>ThemeProvider<\/code> <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/81112\">seeded from the active admin color scheme<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The useful part for extenders is that <code>getAdminThemeColors()<\/code> is a public export of <code>@wordpress\/admin-ui<\/code>. It reads the <code>admin-color-*<\/code> body class and returns primary and background values, which means you can do the same two-line wrap on your own admin screens and have design-system components pick up the user&#8217;s chosen scheme automatically.<\/p>\n\n\n\n<h3 id=\"time-field-for-data-views\" class=\"wp-block-heading\">Time field for Data Views<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Gutenberg 23.8 added a <code>time<\/code> <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/80830\">field type and control<\/a>. This can be useful for things like business hours, event start times, booking slots, or anything where the value is a time of day. Note that there is no date.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Values are stored as <code>HH:mm<\/code> or <code>HH:mm:ss<\/code>, so 9:00am reads as 9:00am for every visitor regardless of their timezone. For specific moments, <code>datetime<\/code> is still the right type.<\/p>\n\n\n\n<h2 id=\"themes\" class=\"wp-block-heading\">Themes<\/h2>\n\n\n\n<h3 id=\"states-theme-json-schema-fixes\" class=\"wp-block-heading\">States theme.json schema fixes<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Responsive style and pseudo-class states shipped with WordPress 7.1, but the schema that validates them was not complete. Several fixes landed in Gutenberg 23.8.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">These changes will ensure that states do not appear as invalid when viewing <code>theme.json<\/code> in your code editor:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/81309\">Responsive states for style variations<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/81253\">Responsive states are specific to blocks<\/a> (not elements)<\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/81209\">Corrected errors with pseudo-class styling<\/a><\/li>\n<\/ul>\n\n\n\n<h3 id=\"more-options-for-curating-the-styles-ui\" class=\"wp-block-heading\">More options for curating the styles UI<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Gutenberg 23.8 <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/80956\">added an opt-out<\/a> for the block style state controls: a <code>blockStatesEditingEnabled<\/code> and <code>responsiveEditingEnabled<\/code>. Both are filterable through <code>block_editor_settings_all<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">add_filter( 'block_editor_settings_all', function ( $settings ) {\n\t$settings['blockStatesEditingEnabled'] = false;\n\t$settings['responsiveEditingEnabled']  = false;\n\treturn $settings;\n} );<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Both default to <code>true<\/code>. Styles already defined in <code>theme.json<\/code>, Global Styles, or a block&#8217;s style attribute keep rendering either way. That makes them useful for locking down a client build without breaking the design you shipped with it.<\/p>\n\n\n\n<h3 id=\"label-now-customizable-via-global-styles\" class=\"wp-block-heading\">&lt;label&gt; now customizable via Global Styles<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Gutenberg 23.9 added <code>&lt;label&gt;<\/code> as a new element to style via <code>theme.json<\/code>. You can customize it via <code>styles.elements.label<\/code> like other element styles. It applies to any markup rendering a <code>&lt;label&gt;<\/code>. In Core that covers the Search, Form Input, Post Comments Form, Archives, and Categories blocks. It will also apply to third-party blocks.<\/p>\n\n\n\n<h3 id=\"cite-text-input-and-select-dropdown-editable-in-global-styles\" class=\"wp-block-heading\">Cite, text input, and select dropdown editable in Global Styles<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>cite<\/code>, <code>textInput<\/code>, and <code>select<\/code> were already supported via <code>theme.json<\/code>. But a recent <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/80852\">PR made them editable<\/a> via the <strong>Styles<\/strong> interface in the editor under the <strong>Typography<\/strong> and <strong>Colors<\/strong> panels.<\/p>\n\n\n\n<h3 id=\"vertical-and-horizontal-block-gap-added-for-group\" class=\"wp-block-heading\">Vertical and horizontal block gap added for Group<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The Group block now declares its <code>blockGap<\/code> support as <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/81476\">both horizontal and vertical<\/a>. This means that the <code>blockGap<\/code> property in <code>theme.json<\/code> accepts both a plain string or an object with <code>top<\/code> and <code>left<\/code> keys.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The editor UI continues to restrict the axial controls to flex and grid layouts, which is where the separate axes would be useful.<\/p>\n\n\n\n<h3 id=\"updated-block-supports\" class=\"wp-block-heading\">Updated block supports<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A few blocks gained new supports, making it easier to use them across a variety of layouts:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>List: <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/68002\">wide and full alignment<\/a><\/li>\n\n\n\n<li>Query No Results: <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/64601\">border and spacing<\/a><\/li>\n\n\n\n<li>Query Loop: <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/79689\">block gap<\/a> (<em>this one has been on my wishlist for a long time!<\/em>)<\/li>\n<\/ul>\n\n\n\n<h3 id=\"global-styles-and-other-fixes\" class=\"wp-block-heading\">Global styles and other fixes<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Several other smaller items landed that are worth a look:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The Accordion Heading block now <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/81976\">routes theme.json spacing to the toggle button<\/a> rather than the wrapper.<\/li>\n\n\n\n<li>Duotone palettes are <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/81605\">editable in Global Styles<\/a>.<\/li>\n\n\n\n<li>Global Styles also <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/81373\">indicates which blocks have custom styles<\/a> and lets you filter by them.<\/li>\n\n\n\n<li>Shadow presets <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/81346\">keep storing as CSS variables when custom presets exist<\/a>, which affects what lands in a user&#8217;s saved styles.<\/li>\n\n\n\n<li><code>blockGap<\/code> values are <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/81460\">normalized more consistently<\/a>. Note that the sanitizer rejects parentheses, so literal <code>calc()<\/code> or <code>var()<\/code> values are dropped.<\/li>\n\n\n\n<li>The Table of Contents block <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/80404\">stopped saving its output<\/a> to post content.<\/li>\n<\/ul>\n\n\n\n<h2 id=\"playground\" class=\"wp-block-heading\">Playground<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Playground now <a href=\"https:\/\/make.wordpress.org\/playground\/2026\/09\/05\/wordpress-playground-and-webmcp-bringing-ai-agents-into-your-browser-workflow\/\">supports WebMCP<\/a>, a draft browser API for exposing actions as tools an AI agent can call. Because Playground runs WordPress in a nested iframe, a new proxy advertises the embedded site&#8217;s tools on the outer page and forwards calls back down. Note that registering a WordPress ability isn&#8217;t enough on its own. A plugin has to wrap it in a WebMCP tool.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Playground can also <a href=\"https:\/\/make.wordpress.org\/playground\/2026\/08\/24\/run-any-era-of-wordpress-in-playground\/\">run releases back to version 0.7<\/a>. Tick <strong>Include older versions<\/strong> in the settings panel and the picker covers everything through 6.2, with PHP pairing automatically. This is handy for answering &#8220;when did this break?&#8221; without rebuilding an old stack by hand.<\/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\">We\u2019ve only had one post since the last monthly roundup. Check it out if you missed it:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/developer.wordpress.org\/news\/2026\/08\/hands-on-with-the-wordpress-7-1-icon-registration-api\/\">Hands-on with the WordPress 7.1 Icon Registration API<\/a><\/li>\n<\/ul>\n\n\n\n<h3 id=\"general\" class=\"wp-block-heading\">General<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Also worth a read from the past month:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/make.wordpress.org\/core\/2026\/08\/19\/whats-new-in-gutenberg-23-8-19-august\/\">What&#8217;s new in Gutenberg 23.8?<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/make.wordpress.org\/core\/2026\/09\/02\/whats-new-in-gutenberg-23-9-2-september\/\">What&#8217;s new in Gutenberg 23.9?<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/make.wordpress.org\/core\/2026\/08\/25\/proposal-a-secrets-api-for-wordpress-7-2\/\">Proposal: A Secrets API for WordPress 7.2<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/make.wordpress.org\/core\/2026\/09\/04\/replacing-dashicons-in-the-admin-bar-and-menu\/\">Replacing Dashicons in the Admin Bar and Menu<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/make.wordpress.org\/playground\/2026\/09\/05\/wordpress-playground-and-webmcp-bringing-ai-agents-into-your-browser-workflow\/\">WordPress Playground and WebMCP: bringing AI agents into your browser workflow<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/make.wordpress.org\/core\/2026\/09\/03\/wordcamp-us-2026-php-conversation\/\">WordCamp US 2026: PHP Conversation<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/make.wordpress.org\/core\/2026\/09\/07\/wordpress-7-1-release-retrospective\/\">WordPress 7.1 Release Retrospective<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/make.wordpress.org\/core\/2026\/08\/28\/xpost-the-core-security-initiative\/\">The Core Security Initiative<\/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\/welcher\/' class='mention'><span class='mentions-prefix'>@<\/span>welcher<\/a> for feedback and review on this article.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Gutenberg 23.8 and 23.9 bring declarable block keyboard shortcuts, theme.json schema fixes for responsive states, and a batch of new deprecations.<\/p>\n","protected":false},"author":20482,"featured_media":6395,"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_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"{title}\n\n{excerpt}\n\n{url}","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-6392","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blocks","category-playground","category-plugins","category-themes","tag-roundup","mentions-welcher"],"revision_note":"","jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pe6QtA-1F6","jetpack_featured_media_url":"https:\/\/developer.wordpress.org\/news\/files\/2026\/09\/whats-new-devs-sept-2026.png","_links":{"self":[{"href":"https:\/\/developer.wordpress.org\/news\/wp-json\/wp\/v2\/posts\/6392","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=6392"}],"version-history":[{"count":6,"href":"https:\/\/developer.wordpress.org\/news\/wp-json\/wp\/v2\/posts\/6392\/revisions"}],"predecessor-version":[{"id":6399,"href":"https:\/\/developer.wordpress.org\/news\/wp-json\/wp\/v2\/posts\/6392\/revisions\/6399"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/developer.wordpress.org\/news\/wp-json\/wp\/v2\/media\/6395"}],"wp:attachment":[{"href":"https:\/\/developer.wordpress.org\/news\/wp-json\/wp\/v2\/media?parent=6392"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/developer.wordpress.org\/news\/wp-json\/wp\/v2\/categories?post=6392"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/developer.wordpress.org\/news\/wp-json\/wp\/v2\/tags?post=6392"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}