Make WordPress Core

Keyboard Shortcuts | Hide comment threads

Bug Scrub Schedule for 5.9

With 5.9 well underway, we’re ready to schedule the 5.9 bug scrub sessions. These 5.9 specific ticket scrubs will happen each week until the final release.

Alpha Scrubs:

Hosted by @audrasjb

Hosted by @chaion07 (APAC-friendly)

Beta Scrubs:

Focus: issues reported from the previous beta.

RC Scrubs:

Focus: issues reported from the previous RC

Check this schedule often, as it will change to reflect the latest information.

What about recurring component scrubs and triage sessions?

The above 5.9 scheduled bug scrubs are separate and in addition.

For your reference, here are some of the recurring sessions:

  • Twenty Twenty-Two Triage: Every Monday 15:00 UTC in the #core-themes channel.
  • Gutenberg Design Triage: Every Tuesday 16:00 UTC in the #design channel.
  • Accessibility Scrub: Every Friday 15:00 UTC in the #accessibility channel.
  • Testing Scrub: Every Friday 13:15 UTC in the #core-test channel.
  • CSS Scrub: First Thursday of every month 20:00 UTC in the #core-css channel.
  • Upgrade/Install Component: Every Tuesday at 17:00 UTC in the #core-auto-update channel.
  • Help/About Component: Every Monday, 19:00 UTC in the #core channel.

Want to lead a bug scrub?

Did you know that anyone can lead a bug scrub at anytime? Yes, you can!

How? Ping @audrasjb or @chaion07 on slack and let us know the day and time you’re considering as well as the report or tickets you want to scrub.

Planning one that’s 5.9-focused? Awesome! We’ll add it to the schedule here. You’ll get well deserved props in the weekly Dev Chat, as well as in the #props Slack channel!

Where can you find tickets to scrub?

  • Report 5 provides a list of all open 5.9 tickets:
    • Use this list to focus on highest priority tickets first.
    • Use this list to focus on tickets that haven’t received love in a while.
  • Report 6 provides a list of open 5.9 tickets ordered by workflow.

Need a refresher on bug scrubs? Checkout Leading Bug Scrubs in the core handbook.

Questions?

Have a question, concern, or suggestion? Want to lead a bug scrub? Please leave a comment or reach out directly to @audrasjb or @chaion07 on slack.

Thanks @jeffpaul for proof-reading.

#5-9, #bug-scrub

Thunks in Gutenberg

Gutenberg 11.6 added support for thunks. You can think of thunks as of functions that can be dispatched:

// actions.js
export const myThunkAction = () => ( { select, dispatch } ) => {
	return "I'm a thunk! I can be dispatched, use selectors, and even dispatch other actions.";
};

Why are thunks useful?

Thunks expand the meaning of what a Redux action is. Before thunks, actions were purely functional and could only return and yield data. Common use cases such as interacting with the store or requesting API data from an action required using a separate control. You would often see code like:

export function* saveRecordAction( id ) {
	const record = yield controls.select( 'current-store', 'getRecord', id );
	yield { type: 'BEFORE_SAVE', id, record };
	const results = yield controls.fetch({ url: 'http://wayback.fauppsala.se:80/wayback/20211029144636/https://...', method: 'POST', data: record });
	yield { type: 'AFTER_SAVE', id, results };
	return results;
}

const controls = {
	select: // ...,
	fetch: // ...,
};

Side effects like store operations and fetch functions would be implemented outside of the action. Thunks provide an alternative to this approach. They allow you to use side effects inline, like this:

export const saveRecordAction = ( id ) => async ({ select, dispatch }) => {
	const record = select( 'current-store', 'getRecord', id );
	dispatch({ type: 'BEFORE_SAVE', id, record });
	const response = await fetch({ url: 'http://wayback.fauppsala.se:80/wayback/20211029144636/https://...', method: 'POST', data: record });
	const results = await response.json();
	dispatch({ type: 'AFTER_SAVE', id, results });
	return results;
}

This removes the need to implement separate controls.

Thunks have access to the store helpers

Let’s take a look at an example from Gutenberg core. Prior to thunks, the toggleFeature action from the @wordpress/interface package was implemented like this:

export function* toggleFeature( scope, featureName ) {
	const currentValue = yield controls.select(
		interfaceStoreName,
		'isFeatureActive',
		scope,
		featureName
	);

	yield controls.dispatch(
		interfaceStoreName,
		'setFeatureValue',
		scope,
		featureName,
		! currentValue
	);
}

Controls were the only way to dispatch actions and select data from the store.

With thunks, there is a cleaner way. This is how toggleFeature is implemented now:

export function toggleFeature( scope, featureName ) {
	return function ( { select, dispatch } ) {
		const currentValue = select.isFeatureActive( scope, featureName );
		dispatch.setFeatureValue( scope, featureName, ! currentValue );
	};
}

Thanks to the select and dispatch arguments, thunks may use the store directly without the need for generators and controls.

Thunks may be async

Imagine a simple React app that allows you to set the temperature on a thermostat. It only has one input and one button. Clicking the button dispatches a saveTemperatureToAPI action with the value from the input.

If we used controls to save the temperature, the store definition would look like below:

const store = wp.data.createReduxStore( 'my-store', {
    actions: {
        saveTemperatureToAPI: function*( temperature ) {
            const result = yield { type: 'FETCH_JSON', url: 'http://wayback.fauppsala.se:80/wayback/20211029144636/https://...', method: 'POST', data: { temperature } };
            return result;
        }
    },
    controls: { 
        async FETCH_JSON( action ) {
            const response = await window.fetch( action.url, {
                method: action.method,
                body: JSON.stringify( action.data ),
            } );
            return response.json();
        }
    },
    // reducers, selectors, ...
} );

While the code is reasonably straightforward, there is a level of indirection. The saveTemperatureToAPI action does not talk directly to the API, but has to go through the FETCH_JSON control.

Let’s see how this indirection can be removed with thunks:

const store = wp.data.createReduxStore( 'my-store', {
    __experimentalUseThunks: true,
    actions: {
        saveTemperatureToAPI: ( temperature ) => async () => {
            const response = await window.fetch( 'http://wayback.fauppsala.se:80/wayback/20211029144636/https://...', {
                method: 'POST',
                body: JSON.stringify( { temperature } ),
            } );
            return await response.json();
        }
    },
    // reducers, selectors, ...
} );

That’s pretty cool! What’s even better is that resolvers are supported as well:

const store = wp.data.createReduxStore( 'my-store', {
    // ...
    selectors: {
        getTemperature: ( state ) => state.temperature
    },
    resolvers: {
        getTemperature: () => async ( { dispatch } ) => {
            const response = await window.fetch( 'http://wayback.fauppsala.se:80/wayback/20211029144636/https://...' );
            const result = await response.json();
            dispatch.receiveCurrentTemperature( result.temperature );
        }
    },
    // ...
} );

Support for thunks is experimental for now. You can enable it by setting __experimentalUseThunks: true when registering your store.

Thunks API

A thunk receives a single object argument with the following keys:

select

An object containing the store’s selectors pre-bound to state, which means you don’t need to provide the state, only the additional arguments. select triggers the related resolvers, if any, but does not wait for them to finish. It just returns the current value even if it’s null.

If a selector is part of the public API, it’s available as a method on the select object:

const thunk = () => ( { select } ) => {
    // select is an object of the store’s selectors, pre-bound to current state:
    const temperature = select.getTemperature();
}

Since not all selectors are exposed on the store, select doubles as a function that supports passing a selector as an argument:

const thunk = () => ( { select } ) => {
    // select supports private selectors:
    const doubleTemperature = select( ( temperature ) => temperature * 2 );
}

resolveSelect

resolveSelect is the same as select, except it returns a promise that resolves with the value provided by the related resolver.

const thunk = () => ( { resolveSelect } ) => {
    const temperature = await resolveSelect.getTemperature();
}

dispatch

An object containing the store’s actions

If an action is part of the public API, it’s available as a method on the dispatch object:

const thunk = () => ( { dispatch } ) => {
    // dispatch is an object of the store’s actions:
    const temperature = await dispatch.retrieveTemperature();
}

Since not all actions are exposed on the store, dispatch doubles as a function that supports passing a Redux action as an argument:

const thunk = () => async ( { dispatch } ) => {
	// dispatch is also a function accepting inline actions:
	dispatch({ type: 'SET_TEMPERATURE', temperature: result.value });
    
	// thunks are interchangeable with actions
	dispatch( updateTemperature( 100 ) );
	
	// Thunks may be async, too. When they are, dispatch returns a promise
	await dispatch( ( ) => window.fetch( /* ... */ ) );
}

registry

A registry provides access to other stores through its dispatchselect, and resolveSelect methods. These are very similar to the ones described above, with a slight twist. Calling registry.select( storeName ) returns a function returning an object of selectors from storeName. This comes handy when you need to interact with another store. For example:

const thunk = () => ( { registry } ) => {
  const error = registry.select( 'core' ).getLastEntitySaveError( 'root', 'menu', menuId );
  /* ... */
}

This article is now a part of the developer’s handbook.

Special thanks to @jsnajdr, @get_dave, and @mcsf for their countless reviews and ideas for improving this article.

WordPress Performance Team kick off

Two weeks ago, Google and Yoast WordPress contributors posted a proposal to create a Performance team responsible for coordinating efforts to increase the performance (speed) of WordPress. The proposal was very well received overall, and many other contributors showed interest in joining the effort (thanks everyone).

This post aims at announcing the next steps.

Initial contributors coordination

As authors of the initial proposal, long time WordPress contributors, @tweetythierry, @flixos90, @aristath, @justinahinon, @adamsilverstein (in no particular order) are committed to:

  • lead the working groups formation
  • coordinate the initial administrative tasks (slack channel, weekly meetings, schedule working groups representative nominations, etc.)
  • create a mission statement for the team
  • coordinate the areas to tackle
  • outline the scope and the roadmap

If you have interest in contributing to any of the above, please join the kickoff meeting, if you can, or use the comments of this post to do so.

Everybody is welcome to join working groups and contribute to performance enhancements without specific nomination 🙂

Kickoff meeting

Given the large interest from many contributors, it sounds like getting together is the first step.

By looking at the Core Meetings calendar, Tuesdays at 3PM UTC seem good candidates. @justinahinon has offered to run chats ad interim, the kick-off meeting will happen on Tuesday, November 2, 2021 at 03:00 PM UTC in the #performance Slack channel.

Agenda

  • Welcome
  • Contributor interest open floor
  • Defining areas of focus

Defining focus areas and working groups

As we have seen from the initial post comments, there are no shortage of areas in need of performance enhancements in WordPress (which is a good problem to have in a way). With that in mind, we will initially aim to keep the scope limited by defining the most impactful area of focus and create working groups if need be. Defined focus areas will be the main points of discussion during weekly chats.

An agenda item for the first meetings will be to define the initial focus areas for the team. Every contributor will be asked to self-assign themselves to one or two areas, to indicate what they would like to work on. The performance projects are assembled in a spreadsheet which can already be reviewed ahead of the kickoff meeting.

This is not exclusive of any performance contributions.

Props

Thanks to the following for their involvement in authoring, proofreading and providing feedback on this post.

@francina, @flixos90, @aristath, @tweetythierry, @justinahinon (in no particular order)

#agenda, #meeting, #performance, #performance-chat

Can’t attend the meeting (and I don’t see it explicitly in the projects spreadsheet), but I hope that as part of plugin/javascript/css performance, some thought and attention will be given to improving external dependency management.

End users shouldn’t need to worry about plugins trying to load 8 copies over 3 versions of bootstrap, fontawesome, or the other usual suspects.

Sorry to hear you can’t make the next instance, we hope to see you for the following week’s meeting 🙂

I hope that as part of plugin/javascript/css performance, some thought and attention will be given to improving external dependency management.

Depending on prioritizations decisions, that could be covered within JavaScript, CSS and Web fonts focus area.

Really looking forward to getting stuck into this!

Hello,

How is it possible to propose things for the list or to contribute with ideas?

  • Documentation for developers/user on performance best practices within the scope of WordPress
  • Better separation of the focus areas in frontend (browser), backend (server), documentation
  • “Unified UI components” (button, form elements, grids, “slider wrapper”…) for the frontend, as of now every developer uses its own …
  • Better quality checks for plugin/theme repo
    • → maybe finally use Git (maybe with direct Github support) and allow others to directly contribute to code, with review stewardship from WordPress team members (there are many great but abandoned plugins)
      • a way to clean the WordPress repo of old plugins/themes
      • (a way to let authors earn money using the official repo…)

Beside this:

  • Build-in (basic == in the database) support for multilingual websites
  • Build-in support for custom post type tables (per type “post” and “post_meta” tables)
  • Build-in support for entity relation (1:1, 1:n, m:n)
  • Removal of jQuery and related scripts in the frontend, instead providing a sensible set of fast, small, plain-js, field-tested libs for most common tasks…
  • (Maybe “Prometheus” endpoint for site health check)

What’s new in Gutenberg 11.8.0? (27 October)

October is almost over, and we’re really close to WordPress 5.9, with this version of Gutenberg being the second to last to make it into that release. This time around we have plenty of enhancements to the editing experience, including a way to discover Featured Block Patterns, spacing tools for heading blocks, new animations for some elements (such as Dropzone, and Insertion Point), and more.

Featured Patterns from the Pattern Directory.

The Pattern Directory is the go-to source for great Block Patterns, and with this enhancement to the inserter, users get direct access to a selection of featured Patterns, making it easier to find rich Patterns to use or get inspiration from.

Spacing Tools now available to more blocks

Spacing controls are an important piece when getting your Posts, Pages, and Templates looking just right. In Gutenberg 11.8 we’re getting great Improvements in this area.

Spacing on Heading Blocks — Spacing controls were already available for the Site Title Block, and it made sense to add this possibility for all blocks that generate headings, including the Navigation Block, as seen below! With this enhancement, it’s no longer necessary to manually add padding or margin support to each Pattern or Template that uses heading blocks.

Gap support on the Navigation Block — Enables us to control the space between elements of a Navigation Block, taking advantage of the Block Gap support added in Gutenberg 11.5.

Button Block gap and vertical margin — Also related to Block Gap support, this enables us to control the space between buttons, as well as adding vertical margin support in order to adjust the space above and below the Buttons container. As a side note, the discussion behind this change shows off how Contributors come together to add these useful features to Gutenberg; a big thank you to everyone involved!

Enable always-on burger menu for Responsive Navigation Block.

This update is two-fold: users can now hide a Navigation Menu behind a button at all times, and they also get a new and improved Navigation Block Display options panel.

Other notable improvements

Allow child theme.json to be merged with parent theme.json

Child themes containing a theme.json file will now apply their styles on top of those defined by the parent theme’s theme.json, allowing them to easily overwrite certain styles while maintaining the parent’s base ones. If no theme.json file is present on the child theme, the parent’s styles are applied, and the other way around as well.

More control over Cover and Column blocks’ inner blocks

Starting in Gutenberg 11.8, there is more control over which types of blocks are allowed inside some container blocks, as allowedBlocks support has been added to the Cover Block and to the Column Block.

Enable the Slash Inserter for heading, list, and quote.

The Slash Inserter is the fastest way to find, and add blocks to your content, and from now on users are able to utilize it to add blocks within a Heading, List, and Quote blocks, similarly to how it works in basic Paragraph blocks.


Animations for insertion point, drop zone, and other elements

This release adds a nice touch by providing animations for insertion points and drop zones, among others. For extra clarity, and flair. ✨

Show the ellipsis menu in the ListView

Last but not least, this release also enables the List View’s ellipsis menu (block settings menu) in the Site Editor. Not only does this menu let users copy, duplicate, remove, and perform a bunch of options to blocks from within the List View, but it also helps access the recently revamped Template Part Focus Mode.

11.8.0 Changelog

Spacing tools

  • Buttons: Add gap and vertical margin support. (34546)
  • Add spacing controls to all heading blocks. (35772)
  • Feature Image: Add spacing controls to the featured image block. (35775)
  • Navigation block: Add block gap support. (35277)

More control over inner blocks

  • Column: Allow the specification of blocks allowed within columns. (35342)
  • Cover: Add allowedBlocks and TemplateLock attributes in Cover Block. (31326)

Child theme support for theme.json

  • Allow child theme.json to be merged with parent theme.json. (35459)

Featured Patterns from the directory

  • Featured patterns from the pattern directory. (35115)

Other Improvements

  • Enable slash inserter for heading, list, and quote. (35360)
  • Show the ellipsis menu in the ListView. (35170)
  • Add animations for insertion point, dropzone, and other elements. (33132)
  • Heading: Autogenerate heading anchors. (30825)
  • Enable always-on burger menu for responsive navigation menus. (35568)

Gutenberg 11.8

Enhancements

Block Library

  • Add spacing controls to all heading blocks. (35772)
  • Enable slash inserter for heading, list, and quote. (35360)
  • Unify theme block placeholder content. (35517)
  • Buttons: Add gap and vertical margin support. (34546)
  • Categories: Add support for showing only top-level categories. (35726)
  • Column: Allow the specification of blocks allowed within columns. (35342)
  • Comment Content Block: Add typography, color, and padding support. (35183)
  • Cover: Add allowedBlocks and TemplateLock attributes in Cover Block. (31326)
  • Cover: Add an option to set opacity when the background color is used. (35065)
  • Cover: Allow setting the height from the placeholder state. (35068)
  • Cover: Change dimRatio to 50 if media is added and dimRatio is set to 100. (35789)
  • Cover: Only use white text when the background of the cover block is dark. (33541)
  • Cover: Use the description in the placeholder. (34970)
  • Embed: Add Pinterest as an embed provider. (34895)
  • Feature Image: Add spacing controls to the featured image block. (35775)
  • Featured image and Image: Remove descendent space. (35466)
  • Gallery Block: Get media data in a single request. (34389)
  • Heading: Autogenerate heading anchors. (30825)
  • Quote: Update deprecation to expect style block supports. (35615)
  • Page List: Show empty placeholder if no items. (35441)
  • Post Date: Add more typography options. (35422)
  • Post Comment Author: Add link settings and block supports. (35595)
  • Post Comment Date: Add link setting and block supports. (35112)
  • Quote: Added a “plain” style for quote blocks. (29856)
  • Search: Enable inheritance in the search block. (35723)
  • Site Logo: Add a basic example to the site logo block. (35588)
  • Site Logo: Move the Reset button to the Replace menu dropdown. (35372)
  • Site Logo: placeholder tweaks. (35397)
  • Site Tagline: Add `fontStyle` control to Site Tagline block. (35507)
  • Site Tagline: Add wide + full support to the site tagline block. (35589)
  • Site Title: Add a basic example to the site title block. (35590)
  • Site Logo: Remove the “Reset” button icon. (35434)
  • Social Icons: Add top and bottom margin support. (35374)
  • Social Links: Polish logos only style. (35586)

Design Tools

  • ToolsPanel: Switch to the plus icon when no controls are present in the panel body. (34107)
  • Block Supports: Add panel-specific className. (35793)
  • Block Supports: Switch dimensions inspector controls slot to bubble virtually. (34725)
  • Inspector Controls: Resort the order of the design tools associated with styles hooks. (35574)

Styles

  • Allow users to store duotone data. (35318)
  • Allow child theme.json to be merged with parent theme.json. (35459)
  • Extract the three color panels to their own global styles view. (35400)
  • Font family: Switch from CSS Custom Property to classes. (31910)
  • Move the global styles reset action to a dropdown menu. (35559)
  • Update descriptions for the different screens under global styles. (35429)
  • Update the global styles sidebar’s root view to use Card components. (35547)
  • Use text color to render the Aa preview in global styles. (35631)

Theming

  • Add [data-block] to appender. (35356)
  • Enable theme supports automatically for block themes. (35593)
  • Remove default padding/margin on the body of the page and editor canvas. (35421)
  • Support title in `templateParts`. (35626)
  • CSS: Add a reset for image heights. (30092)

Patterns

  • Increase the number of items per page for default Query Loop Block. (35603)
  • Featured patterns from the pattern directory. (35115)

Block Editor

  • Add animations for insertion point, dropzone, and other elements. (33132)
  • Adjust Link UI visual styling. (35414)
  • Add some top margin. (35717)
  • Show the ellipsis menu in the ListView. (35170)

Template Editor

  • Add more options to template areas in template details. (35577)
  • Add template areas to template inspector. (35239)
  • Add template details to template parts. (35444)
  • Align the layout of the template card with the block card. (35391)
  • Update site editor block placeholder styling. (35513)
  • Use a dark background for the site editor. (35520)
  • Try: Remove dotted ancestor border. (35637)

Components

  • Add shortcut provider. (35652)
  • Iterate on the design of the colors and gradients panel. (35535)
  • Navigator: Update Navigator styling to facilitate sticky positioning. (35518)
  • Repositioned RangeControl tooltip and adjusted image zoom control dropdown height. (27374)
  • Remove segmented control vertical separators. (35497)
  • Storybook: Add RTL switcher to toolbar. (35711)
  • Storybook: Add story for TypographyPanel. (35293)
  • Storybook: Enable Controls and disable Knobs by default. (35682)
  • Storybook: Remove outdated decorator configuration. (35678)
  • Support “any” step in NumberControl and RangeControl. (34542)
  • ToggleGroupControl: Allow custom aria-label. (35423)
  • Update range control metrics. (35540)
  • Update FontSize control. (35395)

Packages

  • Create Block: Add PascalCase slug to create-block template strings. (35462)
  • Create Block: Allow local directories to be passed to –template as relative paths. (35645)
  • Test Setup: Add more complete mocks of common timer functions. (35368)
  • Scripts: Allow customization of the ARTIFACTS_PATH via WP_ARTIFACTS_PATH env var. (35371)

Accessibility

  • Rich text popovers: Move to block tools to fix tab order. (34956)
  • Save button: Prevent focus loss. (34731)

Performance

Global Styles

  • Pass only the data the site editor uses. (35458)
  • Use a context provider for global styles configuration. (35622)

Bug Fixes

Block Library

  • Block Settings: Don’t render ‘Move to’ if the block cannot be moved. (35463)
  • Cover: Update placeholder minHeight style to support non-px units. (35614)
  • Cover: Update ‘templateLock’ attribute. (35671)
  • Featured Image: Center placeholder chip contents. (35417)
  • Heading: Fix undo/redo “trap”. (35767)
  • Heading: Remove anchor map when block unmounts. (35761)
  • Site Logo: Fix site logo block on dark backgrounds. (35718)

i18n

  • Fix HelpHub link i18n for page-jumps. (35404)
  • Fix template part block untranslated strings. (35715)
  • Translation note for Home/end to avoid mistranslations. (35669)

Packages

  • Server Site Render: Prevent empty renders in `ServerSideRender` component caused by changing props while already fetching markup. (35433)

Components

  • Color Picker: Fix some issues on the color picker component; Remove tinycolor2;. (35562)
  • Navigator: Hide horizontal overflow in Navigator. (35332)
  • Popover: Fix __unstableBoundaryParent. (35082)
  • RawHTML component: Allow multiple children. (35532)
  • Rich text: Fix internal paste across multiline and single line instances. (35416)
  • Toggle Group Control: Fix the visual state when no option is selected. (35545)
  • Toggle Group Control: Fixed condition to show separator correctly. (35409)
  • Toggle Group Control: Fix ToggleGroupControlOption not passing ref to the underlying element. (35546)
  • Tooltip: For Tooltips, prevent emitting events to child elements if they are disabled. (35254)
  • Tooltip: Remove extra comma character from Tooltip when the underlying component is disabled. (35247)

Themes

  • Custom Templates: Use “title” from the theme.json. (35592)
  • Elements block support: Fix link color rendering on-site front end. (35446)
  • Move the link color styles to the footer. (35425)
  • Reset margin for all children of flow layouts. (35426)

Template Editor

  • Use slug as template parts area item key. (35796)
  • Fix missing titles in general areas. (35657)

Block API

  • Blocks: Apply the most recent filters to previously registered blocks. (34299)
  • Fix class serialization of font size and colors in dynamic blocks that use block supports. (35751)

Design Tools

  • Border Radius Control: Fix undefined value on the first click into RangeControl. (35651)

Block Editor

  • Fix updating the block list after block removal. (35721)
  • Fix sibling inserter animation. (35729)
  • Inserter: Fix gap between Search and Tabs. (35537)
  • Saving post: Transparent disabled button. (35542)
  • FSE: Coding standards: DOCTYPE should be the first line/character of any HTML document. (35442)

REST API

  • Fix preloading middleware referencing stale data for OPTIONS requests. (35527)

List View

  • Fix expand and collapse when the icon is clicked. (35526)

Global Styles

  • Fix presets that use a callback to validate user data. (35255)

CSS & Styling

  • Remove font size classes that are enqueued in the global stylesheet. (35182)

Block API

  • Allow more than 1 block stylesheets. (32510)

Experiments

Navigation Block

  • Add block gap support. (35277)
  • Enable always-on burger menu for responsive navigation menus. (35568)
  • Fix issue with space-between. (35722)
  • Submenu item paddings & fixes. (35716)
  • Fix navigation gap & padding issues. (35752)
  • Remove color inheritance specificity. (35725)
  • Remove deprecated class names from the Navigation Link block. (35358)

Navigation Screen

  • Use new core functions in menu items REST API. (35648)
  • Navigation: Preload more API requests. (35402)

Documentation

Handbook

  • Add categories to TOC to help digest the FAQ. (35519)
  • Add missing documentation for the wrapperProps property for the BlockListBlock component returned by the editor.blockListEdit filter. (26961)
  • Add section on using theme.json schema. (35739)
  • Add Table of Contents to the FAQ page. (35455)
  • Clarify documentation for InnerBlocks orientation prop. (35712)
  • CustomRadius – Remove plugin-only text. (35582)
  • Update block categories. (35523)
  • Update npm run build command for developing with Gutenberg locally. (35681)

Packages

  • Block Editor: Update default value of the `viewportWidth` attribute in documentation. (35659)
  • Components: Add the storybook link to the /components README. (35493)
  • Components: Add readme for SkipToSelectedBlock component. (32958)
  • Componentes: Add CHANGELOG entry for the fieldset removal from FontAppearanceControl. (35585)
  • Components: Add an entry to CHANGELOG regarding the new ColorPicker. (35486)
  • Components: Fix markdown highlighting on components CONTRIBUTING.md. (35633)
  • Components: Mark CustomSelectControl hint option as experimental. (35673)
  • Components: Polish ToggleGroupControl. (35600)
  • Components: Small tweaks to contributing guidelines. (35620)
  • Components: Update README for SelectControl. (28811)
  • Components: Update DateTimePicker component README to remove reference to isDayHighlighted callback. (35363)
  • Components, feat(SelectControl): Add children prop. (29540)
  • Create Block: Update documentation and readme post-merge of #35645. (35679)

Code Quality

  • Block Editor: Fix odd usage of transform-styles wrap function (and tighten types). (23599)
  • Constrained tabbing: Simplify. (34836)
  • Compose: Convert `usePrevious` hook to TypeScript. (35597)
  • Update Callers to handle when getBlockType return undefined. (35097)
  • Components: Polish ResizableBox and convert it to TypeScript. (35062)
  • Components: Remove `tinycolor` object usage from the gradient picker. (35544)
  • Components: Remove duplicated className in the Card component. (35333)
  • Components: Remove unused useJumpStep utility. (35561)
  • Components: Use new color picker props. (35566)
  • Components: Replace the color picker component with the new version. (35220)
  • Components, FontAppearanceControl: Remove fieldset wrapper. (35461)
  • Components, ToolsPanel: Remove hardcoded classnames. (35415)
  • Components, UnitControl component: Refactor JSX components to TypeScript. (35281)
  • Global Styles: Refactor how the Global Styles access and sets data. (35264)
  • Post Editor: Fix-up Post Editor’s preferences modal. (35369)
  • Remove Tinycolor usage from component color utils. (35553)
  • Reusable Blocks: Thunkify `reusable-blocks` store. (35217)

Tools

Packages

  • Scripts: Remove inject polyfill by default. (35436)

Testing

  • Child theme.json: Update test to better capture that children can update single parts in isolation. (35759)
  • Border Radius Control: Add fallback px unit and add utils tests. (35786)
  • Fix preview end-to-end tests. (35565)
  • Flaky Tests: Fix taxonomies flaky tests. (35534)
  • Flaky Tests: Try another fix for the flaky nav test. (35443)
  • Performance tests: Add more detailed loading metrics. (32237)
  • Components, Panel: Improve unit tests. (35658)
  • Enable/skipped metabox test. (35594)

Build Tooling

  • Revert version bump if build job fails. (33239)
  • Updates `react-native-aztec` android to use S3 dependency for the Aztec editor. (35606)

A note to extenders on the Navigation Editor

Bugfix #35527 fixed preloading on the Navigation Editor; now cache gets deleted after the first cache hit for OPTIONS requests, potentially affecting 3rd-party plugins.

Performance Benchmark

The following benchmark compares performance for a particularly sizeable post (~36,000 words, ~1,000 blocks) over the last releases. Such a large post isn’t representative of the average editing experience but is adequate for spotting variations in performance.

VersionTime To Render First BlockKeyPress Event (typing)
Gutenberg 11.86.21s40.2ms
Gutenberg 11.76.29s43.13ms
WordPress 5.86.74s51.54ms

Thanks to @critterverse for the assets on this post, @priethor for shepherding the process along, @dd32 for assisting with the release to the plugin directory, and to those who contributed to this release! 👏

FSE Program: Answers from Round Three of Questions

This post is part of a wider series that provides answers to questions gathered through the FSE Outreach Program. This round of questions was started on October 13th and ended on October 27th. Thank you to everyone who submitted a question so our knowledge can grow together! Stay tuned for future rounds and join the FSE Outreach Program if you’re keen to both learn more about these features and help shape how they evolve.

Show full post

How to create a bilingual (small) website using FSE? If I could create a header and a footer for each language, this should be quite easy… The navigation would then be language-specific and tied to the header in that language. But can I actually create two different headers (with different navigation/menus showing the pages in that language) and decide on a per page level which header/footer is shown? This would make creating small websites in two languages much easier since currently the solution is be to use a plugin or a multisite installation (which are both fairly complicated for the average user). I guess I would then only need to add some hreflang code if needed. In any case a use case like this for FSE would be very welcome in most bilingual countries (at least for small websites).

This is an excellent question! Right now, there is currently a discussion about how translations might work in the future here that would be great to chime in on for anyone interested. In terms of how best to do this though, you will be able to create different headers to be used as you see fit in various templates. For a simple site, this might be enough for you to rely upon but, for a more complex site, there is still work to be done here. Long term, the last phase of Gutenberg is having multilingual support so know that this is on the horizon. 

Can classic themes have support for Full Site Editing (for those users who want to opt in for this feature) while keeping the classic structure (for those users who do not want the FSE) ? So the theme will have both .php templates and .html (block-templates and block-template-parts).

Yes! Since Full Site Editing is a collection of features, classic themes can opt in and out as they’d like. For example, they can have both PHP templates and HTML as asked, since a classic theme can opt into using the template editor which will create html templates. Classic themes can also use theme.json, theme blocks, the block based widget editor, etc. Here’s more information about each: 

Is there currently a way to link my style.css to the site editor? Will there be? I am just beginning to play with full site editing (though I’ve used the Elementor site builder and customized blank themes such as Hello and Underscores). I have imported an adobe font in my style.css and I’m using it in my header. When I view my site, everything looks as intended. When I’m in the site editor, though, the text does not show up with the styles I’ve used in my style.css. It seems like the site editor should reflect the custom CSS.

You should be able to apply any stylesheet to the editor using add_theme_support( 'editor-styles' ) and add_editor_style. Here’s an example from TT1 Blocks so folks have a sense of how to approach this.

As for the part of the question around fonts, there is also work being done to make it easier to load a web font if that’s all you need, you can follow along at this PR

Will I be able to use full site editing and the customizer?

This will depend on the theme you’re using. Let me quickly go over the different types of themes to set the stage:

  • Block theme: a theme made for FSE using HTML templates and theme.json, allowing one to manage all parts of their site with blocks.  
  • Universal theme: a theme that works with both the Customizer and the Site Editor. 
  • Hybrid theme: a classic theme that adopts a feature(s) of FSE, like theme.json or the template editor.
  • Classic theme: a theme built the way we’ve been used to with PHP templates, functions.php, and more. 

With a Block theme, you will not be able to. However, with universal themes and many hybrid themes, you can! Universal themes in particular are built to work with both and preserve the experience. You can read more about them in this Theme Shaper post

I have activated the new default theme Twenty Twenty Two, and noticed the Appearance menu has drastically changed. How do I get back the customizer, widgets and menus? As I would like to have access to these areas and full site editing.

For block themes like Twenty Twenty-Two, this is intentional as editing all parts of your site (widgets, menus, etc) can now entirely take place in the site editing context. This means you can visually edit your footer while seeing what it looks like within the context of your homepage! In case anyone else wants to explore Twenty Twenty-Two, check out this post to learn more and this GitHub repository

If you do need to get to the Customizer for whatever reason, you can still access it by going directly to the respective page: yoursite.com/wp-admin/customize.php

Can I modify a single page or post directly in the same area as editing the full site?

For transparency, I want to note that two folks asked about this. Currently, in the Gutenberg plugin, there’s the option to navigate to and edit pages/posts from within the Site Editor. However, what’s in the plugin now isn’t what’s likely to be shipped with WordPress 5.9 as those flows are currently under active iteration. To get a better sense of what’s being explored, check out these two posts: Site editing IA concepts: How to surface and access new features and Site Editing iA concepts – Part 2.

What will happen with plugins that have settings in the Customizer if the customizer is removed for block themes? 

For transparency, I want to note that four folks asked a version of this question but the answer is being summarized under this more general question. Right now, this is under discussion in this GitHub issue. Expect a post on Make Core as the release gets closer and decisions are made around how to handle the approach. 

What are some possible causes for FSE not to work when permalinks are set to ‘post name’? Thank you for your response.

I tried to replicate this experience but wasn’t able to! I emailed the person who specifically asked about this to try to get more information and will follow up when they do. 

#5-9, #fse-answers, #fse-outreach-program

Dev chat summary – October 27, 2021

@audrasjb led the chat on this agenda. You can also read the Slack logs.

Highlighted blog posts

Bringing to your attention some interesting reads and some call for feedback and/or volunteers:

After 1.5 year, @francina and @audrasjb decided to pass the Core Team Representative baton for 2022. Everyone can nominate the people they think are best suited to be our new Core team reps, just comment in the above post.

Upcoming releases updates

Next minor release: WP 5.8.2

@desrosj confirmed WP 5.8.2 Release Candidate is still planned for Tuesday November 2, with a few tickets including #54207 which has been quite a pain for many, so fixing it sooner rather than later is best.

Next major release: WP 5.9

First the Release Squad for WordPress 5.9 was published. If anyone is interested in volunteering for one of the roles needing more help, please comment on that post. If anyone has any questions about the release squad roles, some answers are available in the Core team handbook.

@audrasjb and @chaion07 published the 5.9 Bug scrub schedule.

Next scrubs are scheduled on Thursday, October 28, 2021 at 08:00 PM UTC and on Friday, October 29, 2021 at 06:00 AM UTC.

Please note that anyone can run a bug scrub. Checkout the Leading Bug Scrubs section in the Core handbook.

Also, a WordPress 5.9 Editor Update (26 October) was published.

Component maintainers updates

Build/Test Tools – @sergeybiryukov

The Slack Notifications workflow was modified to be a reusable one. See changeset [51921] and some follow-up changes on ticket #53363.

General – @sergeybiryukov

Work has continued on various coding standards fixes in core. See tickets #53359, #54177, #54279, #54295 for more details.

Help/About – @marybaum

Two tickets are getting closer to commit but not completely there. Copy reviews are done, the component maintainers have new patches. Should be able to commit both by next Monday’s component scrub.

Open Floor

@craigfrancis wanted to discuss #54042, as I’d like to make the IN() operator easier/safer, and likewise with quoting table/field identifiers. Given the amount of information shared in the PR, @audrasjb moved this ticket to 5.9, but it will need a deep review as soon as possible to be committed ahead of the feature freeze which is the target for such enhancements.

@marybaum asked if there is still feature freeze a week or so ahead of beta 1. Feature freeze is scheduled on November 9th, and Beta 1 is on the 16th.

@afragen shared a message of @peterwilsoncc from the #core-auto-updates Slack channel. The Upgrade/Install team will meet in this channel on next Tuesday to discuss a proposal concerning the Plugin Dependencies feature.

#5-8-x, #5-9, #dev-chat, #summary

CSS Chat Summary: 21 October 2021

The meeting took place here on Slack. @dryanpress facilitated and @danfarrow wrote up these notes.

The meeting was short but props are due to @dryanpress for finding a way to run it despite having no internet!

CSS Custom Properties (#49930)

Thanks everybody!

#core-css, #summary

WordPress 5.9 Release Squad

WordPress 5.9 is full steam ahead towards the December 14, 2021 release date. With the Go/No Go deadline behind us, the necessary roles required for this version’s release squad have become more clear, and the team is starting to take shape.

Below is the list of roles the squad roles for the 5.9 release with confirmed contributors listed. Any role listed with a hand raised emoji (✋) still need contributors and volunteers.

Some Notes

  • The release squad list on the 5.9 development cycle page has also been updated. As additional contributors are confirmed for the positions needing volunteers, they will only be added to the development cycle page (not accompanied by an additional post here).
  • @noisysocks is coordinating a group of feature-specific contributors, and will be the main information person for all editor related features.
  • All WordPress 5.9 related coordination will happen inside of the #5-9-release-leads Slack room. This room is a public viewing area for transparency (and knowledge sharing!), but is a workspace for that release squad so please limit posting as much as possible for those not on the release squad.

Props @chanthaboune and @jeffpaul for peer review.

#5-9

Dev Chat Agenda for October 27, 2021

Here is the agenda for this week’s developer meeting to occur on Wednesday, October 27, 2021 at 08:00 PM UTC.

Please note that depending on your timezone, the time may have changed with the end of daylight saving time.

Blog Post Highlights and announcements

Bringing to your attention some interesting reads and some call for feedback and/or volunteers:

Next releases status update

Have you been working on 5.9 related issues? Let everyone know!

Components check-in and status updates

  • Check-in with each component for status updates.
  • Poll for components that need assistance.

Open Floor

Do you have something to propose for the agenda, or a specific item relevant to the usual agenda items above?

Please leave a comment, and say whether or not you’ll be in the chat, so the group can either give you the floor or bring up your topic for you accordingly.

This meeting happens in the #core channel. To join the meeting, you’ll need an account on the Making WordPress Slack.

#5-9, #agenda, #core, #dev-chat

Can we discuss #54042, I’ll be in the chat. I’d like to target 5.9, and It shouldn’t cause any backwards compatibility issues.

Nominations for Core Team Reps 2022

This post kicks off the election process with nominations to replace @audrasjb and @francina as Core team reps. We have been in the role for over a year now, so 2022 marks the time to get new folks!

The Role

In the WordPress open source project, each team has on average one or two representatives, abbreviated as reps

It is not called “team lead” for a reason. It’s an administrative role. While people elected as team reps will generally come from the pool of folks that people think of as experienced leaders, the team rep role is designed to change hands regularly.

This role has a time commitment attached to it. Not a huge amount, it’s at least two hours a week.

Here are the main tasks:

Full details on the Team Rep role is on the Team Update site.

How the election works

Please nominate people in the comments of this post. Self-nominations are welcome. The deadline is 10 November 2021.

After that, a poll will be opened for voting. It will stay open for about two weeks. The new reps will start their role on January 1st, 2022.

If you want to nominate someone in private, please reach out to @francina or @audrasjb on Slack.

Disclaimer: if you get nominated, please don’t feel like you have to say yes. The polls will only include the names of the people that are responding positively to a nomination.  So feel free to reply with a “Thank you, but no thank you”.

If you have any questions, please feel free to ask in the comments, we will be happy to reply.

Thanks to @audrasjb for the peer review.

#team-reps

WordPress 5.9 Editor Update – 26 October

Gutenberg 11.9 (the last plugin release which will make its way into WP 5.9) will be cut on November 3 which is in 9 days!

The merge to Core for this release will be tricky. I’m seeking volunteers to assist with the patch. Let me know if you can help.

@mamaduka has ran an audit of our __experimental APIs. Please give it a look over.

I asked around to identity what the “must have” enhancements are for this release and have added them to the WordPress 5.9 Must-Haves project board. Please regularly check in with this project board. There are a bunch of bugs in the board, too, and you should also pay attention to them, but they’re slightly less important because bugs can be addressed after the feature freeze.

Here’s a overview of the “must have” enhancements:

🤙

#core-editor #5-9