{"id":124861,"date":"2026-08-04T11:10:09","date_gmt":"2026-08-04T11:10:09","guid":{"rendered":"https:\/\/make.wordpress.org\/core\/?p=124861"},"modified":"2026-08-05T06:26:57","modified_gmt":"2026-08-05T06:26:57","slug":"miscellaneous-block-editor-changes-in-wordpress-7-1","status":"publish","type":"post","link":"https:\/\/make.wordpress.org\/core\/2026\/08\/04\/miscellaneous-block-editor-changes-in-wordpress-7-1\/","title":{"rendered":"Miscellaneous Editor Changes in WordPress 7.1"},"content":{"rendered":"<p class=\"wp-block-paragraph\">In this post, you will find\u00a0<span tabindex='0' class='glossary-item-container'>dev notes<span class='glossary-item-hidden-content'><span class='glossary-item-header'>dev note<\/span> <span class='glossary-item-description'>Each important change in WordPress Core is documented in a developers note, (usually called dev note). Good dev notes generally include a description of the change, the decision that led to this change, and a description of how developers are supposed to work with that change. Dev notes are published on Make\/Core blog during the beta phase of WordPress release cycle. Publishing dev notes is particularly important when plugin\/theme authors and WordPress developers need to be aware of those changes.In general, all dev notes are compiled into a Field Guide at the beginning of the release candidate phase.<\/span><\/span><\/span>\u00a0for smaller changes to the editor in WordPress 7.1.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Table of contents<\/strong><\/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=\"#blocks\">Blocks<\/a><ol><li><a class=\"wp-block-table-of-contents__entry\" href=\"#navigation-block-stops-propagating-font-size-to-child-items\">Navigation block stops propagating font-size to child items<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#targeting-block-variations-in-block-transforms\">Targeting Block Variations in Block Transforms<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#stabilize-clonesanitizedblock-and-sanitizeblockattributes\">Stabilize cloneSanitizedBlock and sanitizeBlockAttributes<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#updated-markdown-parsing-library\">Updated Markdown parsing library<\/a><\/li><\/ol><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#editortemplate-parts-can-opt-out-of-content-only-editing\">Editor<\/a><ol><li><a class=\"wp-block-table-of-contents__entry\" href=\"#template-parts-can-opt-out-of-content-only-editing\">Template parts can opt out of content-only editing<\/a><\/li><\/ol><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#global-styles\">Global Styles<\/a><ol><li><a class=\"wp-block-table-of-contents__entry\" href=\"#block-level-preset-classes-now-match-root-level-specificity\">Block-level preset classes now match root-level specificity<\/a><\/li><\/ol><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#core-data\">Core Data<\/a><ol><li><a class=\"wp-block-table-of-contents__entry\" href=\"#non-paginated-entities-now-return-all-records\">Non-paginated entities now return all records<\/a><\/li><\/ol><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#deprecating-legacy-editor-packages\">Deprecating legacy editor packages<\/a><ol><li><a class=\"wp-block-table-of-contents__entry\" href=\"#wordpress-nux-now-a-no-op-compatibility-package\">@wordpress\/nux: Now a no-op compatibility package<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#title\">@wordpress\/reusable-blocks: Public APIs now log deprecation warnings<\/a><\/li><\/ol><\/li><\/ol><\/nav>\n\n\n<h2 id=\"blocks\" class=\"wp-block-heading\">Blocks<\/h2>\n\n\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<h3 id=\"navigation-block-stops-propagating-font-size-to-child-items\" class=\"wp-block-heading\">Navigation <span tabindex='0' class='glossary-item-container'>block<span class='glossary-item-hidden-content'><span class='glossary-item-header'>Block<\/span> <span class='glossary-item-description'>Block is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience.<\/span><\/span><\/span> stops propagating font-size to child items<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The Navigation block will no longer forcefully propagate its font-size configurations down to the markup of individual child blocks (<code>core\/navigation-link<\/code>, <code>core\/navigation-submenu<\/code>, <code>core\/page-list<\/code>, and <code>core\/home-link<\/code>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Currently, font size is propagated to every navigation item. Because relative units multiply against their parent container\u2019s computed size, this caused extreme compounding (e.g., <code>1.5em<\/code> \u2192 <code>2.25em<\/code> \u2192 <code>3.375em<\/code>), severely breaking the layout of deeply nested dropdown menus.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">By removing the explicit application on child items, the Navigation block now safely relies on standard <span tabindex='0' class='glossary-item-container'>CSS<span class='glossary-item-hidden-content'><span class='glossary-item-header'>CSS<\/span> <span class='glossary-item-description'>Cascading Style Sheets.<\/span><\/span><\/span> text inheritance. This fixes an issue where the editor canvas and the frontend displayed mismatched typography sizes when child links had their own explicit font sizes overridden by parent propagation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As for backwards compatibility, theme developers can restore the legacy font-size propagation behavior by applying the following <span tabindex='0' class='glossary-item-container'>filter<span class='glossary-item-hidden-content'><span class='glossary-item-header'>Filter<\/span> <span class='glossary-item-description'>Filters are one of the two types of Hooks <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Hooks\">https:\/\/codex.wordpress.org\/Plugin_API\/Hooks<\/a>. They provide a way for functions to modify data of other functions. They are the counterpart to Actions. Unlike Actions, filters are meant to work in an isolated manner, and should never have side effects such as affecting global variables and output.<\/span><\/span><\/span> in their <code>functions.php<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">\/**\n * Restores font size classes on Navigation child blocks.\n * Use this if your theme targets has-{slug}-font-size on nav items directly.\n *\/\nfunction restore_nav_item_font_size( $block_content, $parsed_block, $block ) {\n    $context = $block-&gt;context;\n\n    $has_named_font_size  = array_key_exists( 'fontSize', $context );\n    $has_custom_font_size = isset( $context['style']['typography']['fontSize'] );\n\n    if ( ! $has_named_font_size &amp;&amp; ! $has_custom_font_size ) {\n        return $block_content;\n    }\n\n    $target_tag = 'core\/page-list' === $block-&gt;name ? 'UL' : 'LI';\n\n    $processor = new WP_HTML_Tag_Processor( $block_content );\n\n    if ( ! $processor-&gt;next_tag() || $target_tag !== $processor-&gt;get_tag() ) {\n        return $block_content;\n    }\n\n    if ( $has_named_font_size ) {\n        $processor-&gt;add_class( sprintf( 'has-%s-font-size', $context['fontSize'] ) );\n    } elseif ( $has_custom_font_size ) {\n        $existing_style  = $processor-&gt;get_attribute( 'style' ) ?? '';\n        $font_size_style = sprintf(\n            'font-size: %s;',\n            wp_get_typography_font_size_value(\n                array( 'size' =&gt; $context['style']['typography']['fontSize'] )\n            )\n        );\n        $processor-&gt;set_attribute( 'style', $existing_style . $font_size_style );\n    }\n\n    return $processor-&gt;get_updated_html();\n}\n\nadd_filter( 'render_block_core\/navigation-link', 'restore_nav_item_font_size', 10, 3 );\nadd_filter( 'render_block_core\/navigation-submenu', 'restore_nav_item_font_size', 10, 3 );\nadd_filter( 'render_block_core\/home-link', 'restore_nav_item_font_size', 10, 3 );\nadd_filter( 'render_block_core\/page-list', 'restore_nav_item_font_size', 10, 3 );<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">References:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/github.com\/WordPress\/gutenberg\/issues\/76416\">Navigation block: Stop font size setup propagation to children blocks (causes font size multiplication issue!)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/77419\">Prevent font-size propagation in Navigation items causing <code>em<\/code> compounding<\/a><\/li>\n<\/ul>\n<\/div>\n\n\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<h3 id=\"targeting-block-variations-in-block-transforms\" class=\"wp-block-heading\">Targeting Block Variations in Block Transforms<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">It\u2019s now possible to target a specific block variation in a block transform, via the optional <code>variationName<\/code> property:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">transforms: {\n\tto: [\n\t\t{\n\t\t\ttype: 'block',\n\t\t\tblocks: [ 'core\/group' ],\n\t\t\tvariationName: 'group-grid',\n\t\t\ttransform: ( attributes, innerBlocks ) =&gt; {\n\t\t\t\treturn createBlock(\n\t\t\t\t\t'core\/group',\n\t\t\t\t\t{\n\t\t\t\t\t\t...attributes,\n\t\t\t\t\t\tlayout: { type: 'grid' },\n\t\t\t\t\t},\n\t\t\t\t\tinnerBlocks\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\">For programmatic transforms, <code>switchToBlockType<\/code> now accepts the target variation name as an optional third argument:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">switchToBlockType( blocks, 'core\/group', 'group-grid' );<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">References:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/github.com\/WordPress\/gutenberg\/issues\/70355\">Add Transform from Columns -&gt; Grid<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/78713\">Try allowing transforms to a variation of another block<\/a><\/li>\n<\/ul>\n<\/div>\n\n\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<h3 id=\"stabilize-clonesanitizedblock-and-sanitizeblockattributes\" class=\"wp-block-heading\">Stabilize <code>cloneSanitizedBlock<\/code> and <code>sanitizeBlockAttributes<\/code><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>@wordpress\/blocks<\/code> package and <code>wp.blocks<\/code> global have two functions, <code>__experimentalCloneSanitizedBlock<\/code> and <code>__experimentalSanitizeBlockAttributes<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">These functions will continue to work in WordPress 7.1, but they will now log deprecation messages to the console. The functions have been replaced with stable versions that do not have the <code>__experimental<\/code> prefix.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Developers should replace any usage of <code>__experimentalCloneSanitizedBlock<\/code> with <code>cloneSanitizedBlock<\/code> and <code>__experimentalSanitizeBlockAttributes<\/code> with <code>sanitizeBlockAttributes<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">References:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/79928\">Blocks package: Stabilize <code>cloneSanitizedBlock<\/code> and <code>sanitizeBlockAttributes<\/code><\/a><\/li>\n<\/ul>\n<\/div>\n\n\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<h3 id=\"updated-markdown-parsing-library\" class=\"wp-block-heading\">Updated Markdown parsing library<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>@wordpress\/blocks<\/code> replaced <code>showdown<\/code> with <code>marked<\/code> for parsing pasted Markdown. The parser is internal to <code>pasteHandler()<\/code> and was never exported, so no code changes are needed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Output should be equivalent, but edge cases now follow the <a href=\"https:\/\/spec.commonmark.org\/\">CommonMark<\/a> and <a href=\"https:\/\/github.github.com\/gfm\/\">GFM<\/a> specs. Consumers calling <code>pasteHandler()<\/code> directly should re-test representative Markdown input against the blocks it produces.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">References:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/77953\">Blocks: Migrate Markdown converter from showdown to marked<\/a><\/li>\n<\/ul>\n\n\n\n<h2 id=\"editortemplate-parts-can-opt-out-of-content-only-editing\" class=\"wp-block-heading\">Editor<\/h2>\n<\/div>\n\n\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<h3 id=\"template-parts-can-opt-out-of-content-only-editing\" class=\"wp-block-heading\">Template parts can opt out of content-only editing<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress 7.1 introduces a <code>disableContentOnlyForTemplateParts<\/code> editor setting, letting themes and plugins restore standard block editing for Template Parts instead of the content-only editing used by default.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Set it via the <code>block_editor_settings_all<\/code> filter in <span tabindex='0' class='glossary-item-container'>PHP<span class='glossary-item-hidden-content'><span class='glossary-item-header'>PHP<\/span> <span class='glossary-item-description'>The web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher<\/span><\/span><\/span>:<\/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['disableContentOnlyForTemplateParts'] = true;\n\treturn $settings;\n} );<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Or at runtime from <span tabindex='0' class='glossary-item-container'>JavaScript<span class='glossary-item-hidden-content'><span class='glossary-item-header'>JavaScript<\/span> <span class='glossary-item-description'>JavaScript or JS is an object-oriented computer programming language commonly used to create interactive effects within web browsers. WordPress makes extensive use of JS for a better user experience. While PHP is executed on the server, JS executes within a user\u2019s browser.\r<a href=\"https:\/\/www.javascript.com\/\">https:\/\/www.javascript.com<\/a><\/span><\/span><\/span>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">wp.data.dispatch( 'core\/block-editor' ).updateSettings( {\n\tdisableContentOnlyForTemplateParts: true,\n} );<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"note-that-when-the-editor-is-in-template-locked-rendering-mode-content-only-editing-stays-on-regardless-of-this-setting\">When the editor is in <code>template-locked<\/code> rendering mode, content-only editing for Template Parts is always disabled regardless of this setting.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There is no impact on backward compatibility: leaving the setting unset preserves the existing default behavior.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For a session-only toggle while editing, the command palette also offers an \u201cEnable\/Disable content-only editing for patterns and template parts\u201d command.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"further-reading\">References:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/github.com\/WordPress\/gutenberg\/issues\/79189\">Block Editor: <code>disableContentOnlyForTemplateParts<\/code> cannot be overridden via PHP filter<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/79191\">Block Editor: Allow overriding <code>disableContentOnlyForTemplateParts<\/code> setting<\/a><\/li>\n<\/ul>\n<\/div>\n\n\n\n<h2 id=\"global-styles\" class=\"wp-block-heading\">Global Styles<\/h2>\n\n\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<h3 id=\"block-level-preset-classes-now-match-root-level-specificity\" class=\"wp-block-heading\">Block-level preset classes now match root-level specificity<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress 7.1 lowers the CSS specificity of the preset utility classes (<code>.has-*-color<\/code>, <code>-background-color<\/code>, <code>-border-color<\/code>, <code>-gradient-background<\/code>, <code>-font-size<\/code>, <code>-font-family<\/code>) generated for <strong>block-level<\/strong> presets, so they match the specificity of top-level (root) presets.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Presets defined at the block level, that is, via <code>theme.json<\/code> <code>settings.blocks.&lt;block&gt;<\/code> or the <code>wp_theme_json_data_*<\/code> filters, used to prepend the block selector to the preset class, raising its specificity above top-level presets.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The block selector is now wrapped in <code>:where()<\/code>, which contributes no specificity.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Before:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"css\" class=\"language-css\">.has-accent-color                { color: \u2026 !important; } \/* top level:   0-1-0 *\/\np.has-accent-color               { color: \u2026 !important; } \/* block level: 0-1-1 *\/\n.wp-block-group.has-accent-color { color: \u2026 !important; } \/* block level: 0-2-0 *\/<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">After:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"css\" class=\"language-css\">:where(p).has-accent-color               { color: \u2026 !important; } \/* 0-1-0 *\/\n:where(.wp-block-group).has-accent-color { color: \u2026 !important; } \/* 0-1-0 *\/<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Scoping is unchanged. The rule still only matches the class on\/within that block. Top-level presets are unchanged.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The reason for the change is that block-level presets out-ranking top-level ones was inconsistent and broke the responsive style states also landing in 7.1. Preset classes and responsive state styles both use <code>!important<\/code>, so specificity picked the winner. For example, a block-level palette colour set for Desktop overrode one set for Mobile. At equal specificity the responsive rule now wins on source order, as intended.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Affected are themes and plugins that register block-level presets and depend on their former, higher specificity. For example custom CSS written to slot between a top-level and a block-level preset. Such rules now tie block-level presets at <code>0-1-0<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The risk of <span tabindex='0' class='glossary-item-container'>regression<span class='glossary-item-hidden-content'><span class='glossary-item-header'>regression<\/span> <span class='glossary-item-description'>A software bug that breaks or degrades something that previously worked. Regressions are often treated as critical bugs or <a href=\"#blocker\">blockers<\/a>. Recent regressions may be given higher priorities. A \"3.6 regression\" would be a bug in 3.6 that worked as intended in 3.5.<\/span><\/span><\/span> is relatively contained because:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>presets flow through CSS variables, so only collision tie-breaks change, not rendered values.<\/li>\n\n\n\n<li>only <code>!important<\/code> author CSS ever competed with presets, and the drop is a single component in each case: <code>0-1-1<\/code> to <code>0-1-0<\/code> for element-based block selectors, <code>0-2-0<\/code> to <code>0-1-0<\/code> for class-based ones.<\/li>\n\n\n\n<li><code>:where()<\/code> is already used throughout <span tabindex='0' class='glossary-item-container'>Gutenberg<span class='glossary-item-hidden-content'><span class='glossary-item-header'>Gutenberg<\/span> <span class='glossary-item-description'>The Gutenberg project is the new Editor Interface for WordPress. The editor improves the process and experience of creating new content, making writing rich content much simpler. It uses \u2018blocks\u2019 to add richness rather than shortcodes, custom HTML etc.\r<a href=\"https:\/\/wordpress.org\/gutenberg\/\">https:\/\/wordpress.org\/gutenberg\/<\/a><\/span><\/span><\/span> to manage specificity.<\/li>\n\n\n\n<li>Realistic collisions are dominated by the responsive-states <span tabindex='0' class='glossary-item-container'>bug<span class='glossary-item-hidden-content'><span class='glossary-item-header'>bug<\/span> <span class='glossary-item-description'>A bug is an error or unexpected result. Performance improvements, code optimization, and are considered enhancements, not defects. After feature freeze, only bugs are dealt with, with regressions (adverse changes from the previous version) being the highest priority.<\/span><\/span><\/span> this fixes. Responsive states are new to 7.1.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">References:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/github.com\/WordPress\/gutenberg\/issues\/80580\">7.1 Bug when using JSON filter for text colors in Responsive style states for blocks<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/80657\">Theme JSON: Level block-level preset class specificity with :where()<\/a><\/li>\n<\/ul>\n\n\n\n<h2 id=\"core-data\" class=\"wp-block-heading\"><span tabindex='0' class='glossary-item-container'>Core<span class='glossary-item-hidden-content'><span class='glossary-item-header'>Core<\/span> <span class='glossary-item-description'>Core is the set of software required to run WordPress. The Core Development Team builds WordPress.<\/span><\/span><\/span> Data<\/h2>\n<\/div>\n\n\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<h3 id=\"non-paginated-entities-now-return-all-records\" class=\"wp-block-heading\">Non-paginated entities now return all records<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Several <span tabindex='0' class='glossary-item-container'>REST API<span class='glossary-item-hidden-content'><span class='glossary-item-header'>REST API<\/span> <span class='glossary-item-description'>The REST API is an acronym for the RESTful Application Program Interface (API) that uses HTTP requests to GET, PUT, POST and DELETE data. It is how the front end of an application (think \u201cphone app\u201d or \u201cwebsite\u201d) can communicate with the data store (think \u201cdatabase\u201d or \u201cfile system\u201d)\r<a href=\"https:\/\/developer.wordpress.org\/rest-api\/\">https:\/\/developer.wordpress.org\/rest-api\/<\/a><\/span><\/span><\/span> endpoints ignore the <code>page<\/code> and <code>per_page<\/code> collection parameters and always return the entire collection. <code>getEntityRecords()<\/code> applied client-side pagination to every entity, slicing responses to the default <code>per_page<\/code> of 10 and ignoring remaining records. That was a bug.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The unintended behavior has been corrected: slicing now only happens for entities that declare <code>supportsPagination: true<\/code>, and everything else returns the full collection.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The common <code>per_page: -1<\/code> workaround is no longer necessary, though passing it remains harmless. If you were getting a short list back from one of these entities, you\u2019ll now get all of them, so take a look anywhere you render or <span tabindex='0' class='glossary-item-container'>loop<span class='glossary-item-hidden-content'><span class='glossary-item-header'>Loop<\/span> <span class='glossary-item-description'>The Loop is PHP code used by WordPress to display posts. Using The Loop, WordPress processes each post to be displayed on the current page, and formats it according to how it matches specified criteria within The Loop tags. Any HTML or PHP code in the Loop will be processed on each post. <a href=\"https:\/\/codex.wordpress.org\/The_Loop\">https:\/\/codex.wordpress.org\/The_Loop<\/a><\/span><\/span><\/span> over the results without setting your own limit. Custom entities backed by a non-paginated REST route should declare <code>supportsPagination: false<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">References:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/github.com\/WordPress\/gutenberg\/issues\/15413\">getPostTypes() limited to 10<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/76406\">Core Data: Fix incorrect pagination for non-paginated entities<\/a><\/li>\n<\/ul>\n<\/div>\n\n\n\n<h2 id=\"deprecating-legacy-editor-packages\" class=\"wp-block-heading\">Deprecating legacy editor packages<\/h2>\n\n\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<h3 id=\"wordpress-nux-now-a-no-op-compatibility-package\" class=\"wp-block-heading\"><code>@wordpress\/nux<\/code>: Now a no-op compatibility package<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Starting in WordPress 7.1, the <code>@wordpress\/nux<\/code> package becomes a no-op compatibility package.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The package has been deprecated since WordPress 5.4. It remains available so existing imports and script dependencies do not break, but it no longer displays tips or guides.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you still rely on NUX for onboarding, migrate to the <code>Guide<\/code> component from <code>@wordpress\/components<\/code> instead.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">References:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/77773\">Make <code>@wordpress\/nux<\/code> a no-op compatibility package<\/a><\/li>\n<\/ul>\n<\/div>\n\n\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<h3 id=\"title\" class=\"wp-block-heading\"><code>@wordpress\/reusable-blocks<\/code>: Public APIs now log deprecation warnings<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>@wordpress\/reusable-blocks<\/code> package components and data APIs will log deprecation warnings starting from WordPress 7.1.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The package only exposed experimental APIs, and it hasn\u2019t been used by the core since 2023. If your code needs to fetch or update Synced Patterns (formerly known as Reusable Blocks) on the client side, use the standard <a href=\"https:\/\/developer.wordpress.org\/block-editor\/reference-guides\/data\/data-core\/\">core entity methods<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This deprecation prepares the packages for a <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/79186\">no-op backward compatibility update<\/a>, similar to <code>@wordpress\/nux<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">References:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/79805\">Deprecate <code>@wordpress\/reusable-blocks<\/code> public APIs<\/a><\/li>\n<\/ul>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Props to <a href=\"https:\/\/profiles.wordpress.org\/ellatrix\/\" class=\"mention\"><span class=\"mentions-prefix\">@<\/span>ellatrix<\/a>, <a href=\"https:\/\/profiles.wordpress.org\/isabel_brison\/\" class=\"mention\"><span class=\"mentions-prefix\">@<\/span>isabel_brison<\/a>, <a href=\"https:\/\/profiles.wordpress.org\/mamaduka\/\" class=\"mention\"><span class=\"mentions-prefix\">@<\/span>mamaduka<\/a>, <a href=\"https:\/\/profiles.wordpress.org\/ramonopoly\/\" class=\"mention\"><span class=\"mentions-prefix\">@<\/span>ramonopoly<\/a>, <a href=\"https:\/\/profiles.wordpress.org\/sarthaknagoshe2002\/\" class=\"mention\"><span class=\"mentions-prefix\">@<\/span>sarthaknagoshe2002<\/a>, <a href=\"https:\/\/profiles.wordpress.org\/talldanwp\/\" class=\"mention\"><span class=\"mentions-prefix\">@<\/span>talldanwp<\/a>, and <a href=\"https:\/\/profiles.wordpress.org\/0mirka00\/\" class=\"mention\"><span class=\"mentions-prefix\">@<\/span>0mirka00<\/a> for content, and to <a href=\"https:\/\/profiles.wordpress.org\/ramonopoly\/\" class=\"mention\"><span class=\"mentions-prefix\">@<\/span>ramonopoly<\/a> and <a href=\"https:\/\/profiles.wordpress.org\/tyxla\/\" class=\"mention\"><span class=\"mentions-prefix\">@<\/span>tyxla<\/a> for review.<\/p>\n<p class=\"o2-appended-tags\"><a href=\"https:\/\/make.wordpress.org\/core\/tag\/7-1\/\" class=\"tag\"><span class=\"tag-prefix\">#<\/span>7-1<\/a>, <a href=\"https:\/\/make.wordpress.org\/core\/tag\/dev-notes\/\" class=\"tag\"><span class=\"tag-prefix\">#<\/span>dev-notes<\/a>, <a href=\"https:\/\/make.wordpress.org\/core\/tag\/dev-notes-7-1\/\" class=\"tag\"><span class=\"tag-prefix\">#<\/span>dev-notes-7-1<\/a><\/p><nav class='o2-post-footer-actions'><ul class='o2-post-footer-action-row'><li class='o2-post-footer-action'><a href=\"https:\/\/login.wordpress.org\/?redirect_to=https%3A%2F%2Fmake.wordpress.org%2Fcore%2F2026%2F08%2F04%2Fmiscellaneous-block-editor-changes-in-wordpress-7-1%2F%23respond&#038;locale=en_US\" title=\"Login to Reply\"  class=\"genericon  genericon-reply\"  data-action=\"login-to-reply\"  data-actionstate=\"default\" >Login to Reply<\/a><\/li><\/ul><div class='o2-post-footer-action-likes'><\/div><ul class='o2-post-footer-action-row'><\/ul><\/nav>","protected":false},"excerpt":{"rendered":"<p>In this post, you will find\u00a0dev notesdev note Each important change in WordPress Core is documented in a developers note, (usually called dev note). Good dev notes generally include a description of the change, the decision that led to this change, and a description of how developers are supposed to work with that change. Dev [&hellip;]<\/p>\n","protected":false},"author":15585732,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"jetpack_seo_schema_type":"","_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_post_was_ever_published":false},"categories":[1175],"tags":[5885,1443,5894],"class_list":["post-124861","post","type-post","status-publish","format-standard","hentry","category-general","tag-7-1","tag-dev-notes","tag-dev-notes-7-1","mentions-0mirka00","mentions-ellatrix","mentions-isabel_brison","mentions-mamaduka","mentions-ramonopoly","mentions-sarthaknagoshe2002","mentions-talldanwp","mentions-tyxla","author-wildworks"],"revision_note":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p2AvED-wtT","jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/posts\/124861","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/users\/15585732"}],"replies":[{"embeddable":true,"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/comments?post=124861"}],"version-history":[{"count":128,"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/posts\/124861\/revisions"}],"predecessor-version":[{"id":125346,"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/posts\/124861\/revisions\/125346"}],"wp:attachment":[{"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/media?parent=124861"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/categories?post=124861"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/tags?post=124861"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}