Editor Chat Agenda: July 19th, 2023

Facilitator and notetaker:ย @jorgefilipecosta.

This is the agenda for the weeklyย editor chatย scheduled forย Wednesday, July 19 2023, 03:00 PM GMT+1.

This meeting is held in theย #core-editorย channel in Making WordPressย SlackSlack Slack is a Collaborative Group Chat Platform https://slack.com/. The WordPress community has its own Slack Channel at https://make.wordpress.org/chat/.

If you are not able toย attendย the meeting, you are encouraged to share anything relevant to the discussion:

  • If you have an update for the main site editing projects, please feel free to share it as a comment or come prepared for the meeting itself.
  • If you have anything to share for the Task Coordination section, please leave it as a comment on this post.
  • If you have anything to propose for the agenda or other specific items related to those listed above, please leave a comment below.

#agenda, #core-editor, #core-editor-agenda, #meeting

A Week in Core โ€“ July 17, 2023

Welcome back to a new issue ofย Week inย CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress.. Letโ€™s take a look at what changed onย TracTrac An open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress.ย between July 10 and July 17, 2023.

  • 78 commits
  • 135 contributors
  • 61 tickets created
  • 12 tickets reopened
  • 70 tickets closed

Ticketticket Created for both bug reports and feature development on the bug tracker.ย numbers are based on theย Trac timeline for the period above. The following is a summary of commits, organized by component and/or focus.

Code changes

Administration

  • Add a missing closing `span> tagtag A directory in Subversion. WordPress uses tags to store a single snapshot of a version (3.6, 3.6.1, etc.), the common convention of tags in version control systems. (Not to be confused with post tags.) for column sorting indicators โ€“ #32170, #57839

Bootstrap/Load

  • Require wp-includes/compat.php in src/index.php โ€“ #58206

Build/Test Tools

  • Remove outmoded jsvalidate task from Gruntfil โ€“ #58645, #26615
  • Prevent 404 errors in the E2E tests โ€“ #58777
  • Reset main query object after each test โ€“ #58776
  • Suppress E2E test suite SlackSlack Slack is a Collaborative Group Chat Platform https://slack.com/. The WordPress community has its own Slack Channel at https://make.wordpress.org/chat/ notifications โ€“ #58779
  • Add tests to ensure the contribute Toolbar node is added when appropriate
  • Use assertSame() in Tests_Comment โ€“ #57855

Bundled Theme

  • fix height of featured images in Twenty Twenty Three โ€“ #58766
  • Twenty Seventeen: Use wp_register_script() to register HTML5 Shiv script โ€“ #56699
  • Twenty Twenty-Three: Add a border to Quote blockBlock 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. โ€“ #57506
  • Twenty Twenty-Three: Remove the perPage attribute where the query inherits from the global query. The global attribute should be used instead โ€“ #58581
  • Twenty Twenty-Three: Revert [55898] โ€“ #58485

Code Modernization

  • Use str_contains() in a few more places โ€“ #58206

Coding Standards

  • Use single quotes for a string in Tests_Comment โ€“ #57855
  • Use strict comparison for static strings in wp-admin/includes/class-wp-list-table.php โ€“ #32170, #57839
  • Use strict comparison in wp-includes/class-wp-network.php โ€“ #57839
  • Use strict comparison in wp-includes/class-wp-rewrite.php โ€“ #57839
  • Use strict comparison in wp-includes/load.php โ€“ #57839
  • Use strict comparison in wp-includes/rewrite.php โ€“ #57839

Docs

  • Clarify where the wp_get_development_mode() value is retrieved from โ€“ #57487, #57840
  • Fix incorrect type for $crop param is various WP_Image_Editor classes and methods โ€“ #58271, #57840
  • Fix various incorrect @since mentions โ€“ #58834, #57840
  • Replace multiple single line comments with multi-line comments โ€“ #58459
  • Replace multiple single line comments with multi-line comments โ€“ #58459
  • Replace multiple single line comments with multi-line comments โ€“ #58459
  • Replace multiple single line comments with multi-line comments โ€“ #58459
  • Replace multiple single line comments with multi-line comments โ€“ #58459
  • Replace multiple single line comments with multi-line commentsProps costdev, audrasjb โ€“ #58459
  • Use consistent wording for development mode โ€“ #57487, #57840
  • Various docblocks corrections โ€“ #57840

Editor

  • Add test for context setting in Comment Template block โ€“ #58839
  • Fix a PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher notice appearing when adding a new template part โ€“ #57851
  • Fix bugbug 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. where it was not possible to style custom block elements in theme.json โ€“ #57868
  • Fix layout of no-js state in site editor โ€“ #56228
  • Fix open_basedir warnings on the classic Edit Post screen when additional TinyMCE plugins are use โ€“ #54354
  • Lazily load Duotone settings only when needed โ€“ #58673
  • fix duotone filters in classic themes โ€“ #58734 โ€“ #46132
  • fix since annotation in rest blocks controller class โ€“ #58677
  • opt out of Navigation fallback โ€“ #58750
  • remove one preloaded navigation endpoint โ€“ #58749
  • trim footnote anchors from post excerpts โ€“ #58805
  • update npm packages with bug fixes and blessed tasks โ€“ #58745
  • update npm packages with first round of bug fixes for 6.3 RC1 โ€“ #58804
  • update npm packages with second round of bug fixes for 6.3 RC1 โ€“ #58804
  • update string incorrectly marked for translationtranslation The process (or result) of changing text, words, and display formatting to support another language. Also see localization, internationalization. in Chrome โ€“ #58716

External Libraries

  • Update deprecated jQuery code in Farbtastic lib โ€“ #57946

Filesystem APIAPI An API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways.

  • Ensure wp_tempnam() does not produce file names longer than 255 characters as this is the limit on most filesystems โ€“ #35755

General

  • Escape nonce used for block theme activation โ€“ #58712
  • Introduce all development mode โ€“ #57487
  • Rename wp_in_development_mode() to wp_is_development_mode() โ€“ #57487
  • add nonce for block theme preview activation โ€“ #58712
  • fix botched file move in r56199 โ€“ #58712

Help/About

  • Add a โ€œGet Involvedโ€ tab to the About page โ€“ #23348
  • Adjust horizontal padding on the tabs under 960 pixels width โ€“ #23348
  • Fix closing contextual help when scrolled โ€“ #55342
  • Fix typo in [56171]: support forumSupport Forum WordPress Support Forums is a place to go for help and conversations around using WordPress. Also the place to go to report issues that are caused by errors with the WordPress code and implementations. โ€œtopicโ€, not โ€œticketโ€
  • String changes in the Contribute screen โ€“ #23348
  • Update the About page for 6.3 โ€“ #58067
  • Update โ€œGet Involvedโ€ tab content with the latest edits โ€“ #23348

I18ni18n Internationalization, or the act of writing and preparing code to be fully translatable into other languages. Also see localization. Often written with a lowercase i so it is not confused with a lowercase L or the numeral 1. Often an acquired skill.

  • Improve the use of dashicons-external icon for external links โ€“ #47303
  • Move translator comments inside sprintf for tagline field description โ€“ #57675

Media

  • Fix adminadmin (and super admin) image editor layout at intermediary widths โ€“ #58692
  • Fix responsive views in image editor โ€“ #58692
  • Improve layout of image rotation options panel โ€“ #58756
  • Optimize images created in shortcodes โ€“ #58681
  • Set default state for image rotation button โ€“ #58800
  • Stop using and deprecate set_imagick_time_limit(). Seems it causes more problems than it solves โ€“ #58202

Menus

  • Fix critical errors when the page_on_front and/or page_for_posts options contain references to non-existing posts โ€“ #58345

Script Loader

  • Improve test coverage for wp_print_scripts() โ€“ #58648

Toolbar

  • Make the โ€˜Edit siteโ€™ link open the editor with the current template โ€“ #58746

Upgrade/Install

  • Add correct parameters to add_option in upgrade_630 โ€“ #58821

Props

Thanks to the 135 (!) people who contributed to WordPress Core on Trac last week:

@costdev (24), @mukesh27 (13), @audrasjb (13), @sergeybiryukov (12), @ramonopoly (9), @poena (9), @sabernhardt (8), @spacedmonkey (8), @flixos90 (8), @swissspidy (8), @joemcgill (7), @peterwilsoncc (7), @oglekler (7), @afercia (6), @joedolson (6), @azaozz (5), @mrinal013 (4), @aristath (4), @desrosj (3), @wildworks (3), @westonruter (3), @mikinc860 (3), @davidbaumwald (3), @richtabor (3), @eidolonnight (3), @andrewserong (3), @jpantani (2), @nithi22 (2), @annezazu (2), @priethor (2), @tobifjellner (2), @marybaum (2), @dunhakdis (2), @vivekawsm (2), @robinwpdeveloper (2), @meher (2), @mikeschroder (2), @get_dave (2), @SeReedMedia (2), @antpb (2), @Presskopp (2), @ryelle (2), @nithins53 (2), @jameskoster (2), @alexstine (2), @ajlende (2), @scruffian (2), @isabel_brison (2), @jorbin (2), @mikachan (2), @nacin (1), @jeffmora (1), @bridgetwillard (1), @jenmylo (1), @boemedia (1), @davidmusnik (1), @lukecavanagh (1), @mehdi01 (1), @hugobaeta (1), @TacoVerdo (1), @joostdevalk (1), @johnbillion (1), @markoheijnen (1), @helen (1), @bacoords (1), @fierevere (1), @skorasaurus (1), @andraganescu (1), @dhrumilk (1), @zoonini (1), @akrocks (1), @nidhidhandhukiya (1), @syamraj24 (1), @jomonthomaslobo1 (1), @Toro_Unit (1), @eric.7186 (1), @thunderdw (1), @paaljoachim (1), @courane01 (1), @clubkert (1), @Shelob9 (1), @beckej (1), @abitofmind (1), @Mamaduka (1), @thekt12 (1), @antonvlasenko (1), @mohiuddinomran (1), @estelaris (1), @webcommsat (1), @cathibosco1 (1), @deepakvijayan (1), @mt_suzette (1), @Malae (1), @soulseekah (1), @matt_fw (1), @ekazda (1), @densityapps (1), @mtxz (1), @hberberoglu (1), @dsar (1), @onemaggie (1), @TobiasBg (1), @Rahmohn (1), @oandregal (1), @glendaviesnz (1), @gudmdharalds (1), @saxonafletcher (1), @joen (1), @markoserb (1), @cbringmann (1), @clarkeemily (1), @peterwilson (1), @youknowriad (1), @karmatosed (1), @MadtownLems (1), @brasofilo (1), @jeryj (1), @nazmul111 (1), @Chouby (1), @suzettefranck (1), @ugyensupport (1), @ibrahimmonir (1), @njsamsatli (1), @rembem (1), @mcsf (1), @josklever (1), @wplindavantol (1), @hbhalodia (1), @dansoschin (1), @Heiko_Mamerow (1), @piotrek (1), @mai21 (1), @studionashvegas (1), @mikecho (1), and @doems (1).

Congrats and welcome to our 23 (!!) new contributors of the week:ย @jeffmora, @davidmusnik, @mehdi01, @beckej, @mohiuddinomran, @mt_suzette, @matt_fw, @ekazda, @densityapps, @mtxz, @hberberoglu, @dsar, @gudmdharalds, @saxonafletcher, @nazmul111, @suzettefranck, @ibrahimmonir, @njsamsatli, @rembem, @wplindavantol, @Heiko_Mamerow, @mikechoย โ™ฅ๏ธ

Core committers: @audrasjb (17), @sergeybiryukov (17), @isabel_brison (13), @joedolson (7), @azaozz (6), @joemcgill (5), @peterwilsoncc (5), @davidbaumwald (2), @spacedmonkey (2), @ryelle (1), @bernhard-reiter (1), @flixos90 (1), @kadamwhite (1), @jorbin (1), and @mikeschroder (1).

#6-3, #core, #week-in-core

Dev Chat agenda, July 19, 2023

The next weekly WordPress developers chat will take place onย Wednesday, July 19, 2023 at 20:00 UTCย in theย coreย channel ofย Make WordPress Slack. All are welcome.

Summary from the Dev Chat on June 12, 2023 โ€“ thanks @davidbaumwald

Announcements

WordPress 6.3 Release Candidate 1 is out โ€“ thanks to all involved!

Whatโ€™s new in Gutenberg 16.2

Highlighted posts

A Week in Core, July 17 โ€“ props to @audrasjb โ€“ 135 people contributed to coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. on TracTrac An open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress. last week, and 23 of them were new to core Trac contribution!

WordPress 6.3 Field Guide is coming together and was published with RC1 to help inform WordPress developers, extenders and others.

WordPress 6.4 โ€“ Whatโ€™s on your wish list? โ€“ great post by @chanthaboune inviting community feedback on what tickets you would like to see, any UXUX User experience main pain points, and whatโ€™s needed for component maintainers for this next release. Feedback deadline August 15, 2023.

Forthcoming release updates

Next major WordPress release: 6.3

6.3 is scheduled for release on August 8, 2023.

Stay in theย loopLoop 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. https://codex.wordpress.org/The_Loopย with 6.3 โ€“ links for reference:

Tickets or Components help requests

Please add any items for this part of the agenda to the comments. If you can not attend dev chat live, donโ€™t worry, include a note and the facilitator can highlight a ticketticket Created for both bug reports and feature development on the bug tracker. if needed. This part of the agenda will focus on items for 6.3.

Open floor

If you have any additional items to add to the agenda, please respond in the comments below to help the facilitator highlight them during the meeting.

#agenda, #dev-chat

Performance Chat Summary: 18 July 2023

Meeting agenda here and the full chat log is available beginning here on Slack.

Announcements

  • Welcome to our new members ofย #core-performance
  • WP 6.3ย Release Candidaterelease candidate One of the final stages in the version release cycle, this version signals the potential to be a final release to the public. Also see alpha (beta).ย 1 is today
  • Reminder: Working on a WordPress 6.3 performance highlights post โ€“ please add suggestions to theย documentย by July 21

Priority Projects

Server Response Time

Link to roadmap projects

Contributors: @joemcgill @spacedmonkey @aristath

Database Optimization

Link to roadmap projects

Contributors: @aristath @spacedmonkey @olliejones

JavaScriptJavaScript 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โ€™s browser. https://www.javascript.com & CSSCSS Cascading Style Sheets.

Link to roadmap project

Contributors: @mukesh27 @10upsimon @adamsilverstein @westonruter

  • @10upsimon Not much of an update here at this point, other than to say that we made it to coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. for 6.3 regarding enhancing the scripts APIAPI An API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways. with a loading strategy
  • @westonruter Now that we have Script Loading Strategies committed, Iโ€™ve started exploring how we can take advantage of them to improve frontend performance in core/themes/plugins. As a first step, I wanted to try one set of enhancements to see what is involved and what the impact is to see whether the effort is worth it. As an initial exploration, I focused on the scripts that GutenbergGutenberg 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 โ€˜blocksโ€™ to add richness rather than shortcodes, custom HTML etc. https://wordpress.org/gutenberg/ adds to the frontend, that is the block view scripts. These are unfortunately all added to theย headย and are all blocking. So opened a PR to leverage async and defer, and my findings a 19.3% reduction in LCP-TTFB!ย https://github.com/WordPress/gutenberg/pull/52536#:~:text=Performance%20Analysis
  • @flixos90 In addition to the above PR byย @westonruter it would be great if we could define what we want to accomplish with the script loading strategy for WP 6.4. There are probably a couple places where we can adopt it, in core, in the default themes etc., so it would be good to capture that somewhere
  • @westonruter Next step is I want to try a performance analysis using an old low-powered Android phone to see the impact there as well
  • @flixos90 Maybe in aย WordPress/performanceย GH issue for overview, and then we can open and link to TracTrac An open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress. tickets, Gutenberg issues, etc. from there

Images

Link to roadmap projects

Contributors: @flixos90 @thekt12 @adamsilverstein @joemcgill

  • @spacedmonkey I got this committed in gutenberg / core โ€“ย https://github.com/WordPress/gutenberg/pull/52708. TDLR, basically some block templates had images set to lazy load.
  • @joemcgill I noticed that @adamsilverstein has been looking int AVIF and JPEG XL support. Iโ€™m wondering if this is something we want to consider adding via the Performance Lab pluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party. soonish?
    • @flixos90 For AVIF, we could literally almost duplicate the WebP Uploads module. Or we could somehow add it into it and allow users to choose which format to generate. Unsure about JPEG XL, since its situation is unclear and support rather poor
    • @joemcgill I thought that changed recently
    • @spacedmonkey Safari added support lately didnโ€™t they?
    • @adamsilverstein safari did adopt support, no word yet from the other browsers on JPEG XL. For AVIF support, Edge has added in Canary โ€“ once it lands in Stable, we can consider merging support into coreย 
    • @spacedmonkey https://webkit.org/blog/14205/news-from-wwdc23-webkit-features-in-safari-17-beta/
    • @flixos90 Chrome deprecated support for JPEG XL as far as I know, so thatโ€™s a reverse signal
    • @spacedmonkey I think allow users to upload these format is fine.
    • @adamsilverstein it never quite made it to chrome stable, it was always behind a feature flag
    • @flixos90 Yeah but now itโ€™s not even available there anymore
    • @spacedmonkey We have other formats at are not web safe that we allow to upload. For example HEIC
    • @flixos90 Sure, in terms of experimentation we can always allow those things. But I wonder whatโ€™s the value is. Especially JPEG XLโ€™s future is unclear, so for that format Iโ€™d be in favor of not supporting in core just yet. Itโ€™s less about safety than about the web ecosystem and standards
    • @adamsilverstein iโ€™m not certain the hooksHooks In WordPress theme and development, hooks are functions that can be applied to an action or a Filter in WordPress. Actions are functions performed when a certain event occurs in WordPress. Filters allow you to modify certain functions. Arguments used to hook both filters and actions look the same. are in place to add support seamlessly in the plugin, suopport for the format needs to be added in numerous places
    • @joemcgill It would definitely be best to explore support via the PL plugin in advance of any core consideration so we can work out the details.
      • @adamsilversteinwe can try, but i suspect we wonโ€™t be able to add full support for AVIF via the plugin
    • @joemcgill Iโ€™d like to see us add an option in the PL plugin that would allow WP to serve AVIF versions of images that are uploaded as JPEG. But happy to have that conversation elsewhere
    • Discussion paused here and @clarkeemily suggested to move discussions over to https://github.com/WordPress/performance/issues/11

Measurement

Link to roadmap projects

Contributors: @adamsilverstein @olliejones @joemcgill @mukesh27 @swissspidy

  • @flixos90 I worked on some exploration for UIUI User interface to add metrics to theย Server-Timingย headerHeader The header of your site is typically the first thing people will experience. The masthead or header art located across the top of your page is part of the look and feel of your website. It can influence a visitorโ€™s opinion about your content and you/ your organizationโ€™s brand. It may also look different on different screen sizes. yesterday, seeย https://wordpress.slack.com/archives/C02KGN5K076/p1689639916131339 Would love to get some feedback on this
    • It would simplify local benchmarking a lot, since you could e.g. add a specific action to capture its performance, then useย benchmark-server-timingย to get its data. Without such a UI, that always involved writing some custom code, which was cumbersome and slow

Ecosystem Tools

Link to roadmap projects

Contributors: @joegrainger @mukesh27 @swissspidy @westonruter

  • @mukesh27 We have started theย QA testingย phase this week, and itโ€™s going well so far. You can keep track of our progress on GitHubGitHub GitHub is a website that offers online implementation of git repositories that can easily be shared, copied and modified by other developers. Public repositories are free to host, private repositories require a paid subscription. GitHub introduced the concept of the โ€˜pull requestโ€™ where code changes done in branches by contributors can be reviewed and discussed before being merged by the repository owner. https://github.com/ using this link:ย https://github.com/10up/plugin-check/ย We welcome everyone to take a look at the testing process and the code changes. If you have any thoughts, ideas, or feedback, please feel free to share them on the repository. Your input is highly valuable to us!

Creating Standalone Plugins

Link to GitHub overview issue

Contributors: @flixos90 @mukesh27 @10upsimon

  • @10upsimon From my end, work is ongoing. No relevant updates from me at this point.

Open Floor

  • @clarkeemily Worth noting, yesterday saw the release of versionย 2.5.0ย of the Performance Lab plugin
  • @spacedmonkey I have been working on automating compare server response time between WP versions. I made some pretty graphs [link] I will share the bash script I used to generate this and the raw data.
    • I think our benchmarking tools need the ability to compare two results or more. ATM, the benchmark tools just output one result and you have manually format it to a google doc / excel. I would love for do multiple runs and it saves it into a CSV file or something.
    • @westonruter And add a column that shows the difference. I did this manually myself yesterday as well
    • @spacedmonkey Should I create a ticketticket Created for both bug reports and feature development on the bug tracker., someone could work on it with some spare time. Feels like we are doing some of manual work, that could be automated.
    • @westonruter Being able to pass multiple URLs into the tool would work when youโ€™re dealing with multiple environments, but it wouldnโ€™t work so well when youโ€™re reusing the same environment and just changing a branchbranch A directory in Subversion. WordPress uses branches to store the latest development code for each major release (3.9, 4.0, etc.). Branches are then updated with code for any minor releases of that branch. Sometimes, a major version of WordPress and its minor versions are collectively referred to as a "branch", such as "the 4.0 branch"., for example.
    • @spacedmonkey I thought about that, what if you say, run 3 times, after the first time, it stops and needs you press enter to continue. That way you could just run it, change your branch and press enter
    • @westonruter yeah. Or it could accept an arg that points to a script that performs env setup.
    • @joemcgill โ€“ @swissspidy automated much of the process earlier today using GitHub actions for the steps, which you can see here:ย https://github.com/swissspidy/compare-wp-performance/. Maybe that could be a good starting point?
  • @clarkeemily Before we close out, Iโ€™d just like to flag this postย https://make.wordpress.org/core/2023/07/18/wordpress-6-4-whats-on-your-wishlist/ย and encourage folks here to think about our wish list for 6.4

Our next chat will be held on Tuesday, July 25, 2023 at 15:00 UTC in the #core-performance channel in Slack.

#core-performance, #performance, #performance-chat, #summary

WordPress 6.4: What’s on your wishlist?

With WP6.3 scheduled for release on August 8th, letโ€™s start planning for WP6.4! We always aim to fix bugs, add new tools, andย makeย WordPress better than ever for users. Polish and refinement of Phase 2 items are high on our list as are any items in the Phase 3: Collaborationย roadmap:ย Real-Time Collaboration,ย Workflows,ย Revisions,ย Media Library,ย Block Library, andย Admin Design.

What other tickets do you think need some attention in this release cycle?

Share Your Feedback!

  • What do you want to see included in WP6.4?
  • What are the currentย UXUX User experienceย pain points?
  • What features can we add or iterate on?
  • Component Maintainers: what tickets of yours do you think will be ready to ship in WP6.4 and need some review/feedback/approval/etc?

Note: Adding yourย ticketticket Created for both bug reports and feature development on the bug tracker.ย here wonโ€™t necessarily guarantee inclusion. But no one can fix things they canโ€™t see, so bravely share your thoughts!

Deadline August 15, 2023

After the deadline passes, the release squad will discuss wishlist items and the release leadRelease Lead The community member ultimately responsible for the Release. will make final decisions based on what is aligned with the roadmap and has an owner, feasible in the time we have*, and high impact for the most users.

* This release is shorter than normal, so thatโ€™s part of the decision making criteria.

#6-4, #wishlist

WordPress 6.3 Field Guide

This guide shares more of the in-depth changes that you will find in 6.3 and is published with Release Candidaterelease candidate One of the final stages in the version release cycle, this version signals the potential to be a final release to the public. Also see alpha (beta). 1 to help inform WordPress developers, extenders, and others.

In CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. TracTrac An open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress., there are almost 371 tickets: 127 of which are enhancements and feature requests, 208 bug fixes, and 36 other blessed tasks. This time, there are 67 tickets with a focus on performance, 23 for accessibility, and 36 for modernizing code and applying coding standards.

GutenbergGutenberg 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 โ€˜blocksโ€™ to add richness rather than shortcodes, custom HTML etc. https://wordpress.org/gutenberg/ included in this release has 1737 pull requests: 307 enhancements, 481 bugbug 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. fixes, and 55 accessibilityAccessibility Accessibility (commonly shortened to a11y) refers to the design of products, devices, services, or environments for people with disabilities. The concept of accessible design ensures both โ€œdirect accessโ€ (i.e. unassisted) and โ€œindirect accessโ€ meaning compatibility with a personโ€™s assistive technology (for example, computer screen readers). (https://en.wikipedia.org/wiki/Accessibility) improvements.

Changes in 6.3 are spread across 43 core components. Below is the breakdown of the most important ones.

BlockBlock 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. Editor

WordPress 6.3 is bringing 10 Gutenberg releases into the core โ€“ 15.2, 15.3, 15.4, 15.5, 15.6, 15.7, 15.8, 15.9, 16.0, and 16.1. You will find new Block APIs, Block properties, Block editing mode, Block layout support, color classes, Command Palette, Reusable Blocks renamed to Synced Patterns, and many other changes in these 10 pluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party. releases.

Bundled Theme

Bundled default themes have dropped support for Internet Explorer scripts and styles, which also removed skip-link focus fix script for navigating by keyboard in Internet Explorer and old versions of Chrome.

In addition, special stylesheets and HTML5 Shiv scripts are not enqueued or included in the header.php template for the following themes: Twenty Thirteen (its conditional code is also removed), Twenty Fifteen, and Twenty Seventeen. (#56699)

Theme developers who wish to continue to support IE can add code snippets to their themes that restore the functionalities.

Cache APIAPI An API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways.

The Cache API has undergone several improvements: introducing new cache groups specific to queries and offering developers greater control over the handling of objects within these groups.

You can now set the expiration time for a cache group, clear specific cache groups, set last changed value for a cache group, and declare specific cache groups as non-persistent. With these changes, you can implement your own custom cache invalidation strategies, allowing you to invalidate an entire cache group programmatically.

Other improvements include improved validation, ensuring that only an array of unique integers are passed as input.

Filesystem API

Hidden (. prefixed) files can now be included in list_files() with a new optional $include_hidden parameter. Defaults to false for backward compatibility. (#53659)

General

A new constant WP_DEVELOPMENT_MODE is introduced to signify context-specific development mode. The constant can have the value โ€œcoreโ€œ, โ€œpluginโ€œ, โ€œthemeโ€œ, โ€œallโ€œ, or an empty string. The latter of which means no development mode, which is also the default.

Two new helper functions wp_is_development_mode( $mode ) and wp_get_development_mode() are introduced as the recommended ways to interact with this new configuration value.

The different development modes affect specific caching functionality; for example, caching is only bypassed during theme development, but not during core development. (#57487)

The current value of the WP_DEVELOPMENT_MODE constant is also accessible under Tools > Site Health > Info, in the WordPress Constants section. (#58646)

WP_DEVELOPMENT_MODE serves as an addition to existing debugging constants: WP_DEBUG, SCRIPT_DEBUG, and WP_ENVIRONMENT_TYPE.

PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher Support

Support for PHP 5 has been dropped in WordPress 6.3.

The new minimum supported version of PHP is 7.0.0.

The recommended version of PHP remains at 7.4 or greater. (#57345) (blog post announcement)

I18Ni18n Internationalization, or the act of writing and preparing code to be fully translatable into other languages. Also see localization. Often written with a lowercase i so it is not confused with a lowercase L or the numeral 1. Often an acquired skill.

Improvements include the ability to short-circuit load_textdomain filterFilter Filters are one of the two types of Hooks https://codex.wordpress.org/Plugin_API/Hooks. 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. and reducing loading time for just-in-time translationtranslation The process (or result) of changing text, words, and display formatting to support another language. Also see localization, internationalization..

Media

The media component has been updated with several enhancements that improve load time performance for content with images. WordPress now automatically adds the fetchpriority attribute with a value of โ€œhighโ€ to the image that it determines most likely to be the โ€œLCP (Largest Contentful Paint) imageโ€. Other enhancements have been implemented to improve the automatic handling of lazy-loading via the loading attribute to more reliably detect when to omit the attribute from some images.

Metadata API

Metadata API has undergone significant improvement in the area of lazy loading capabilitiescapability Aย capabilityย is permission to perform one or more types of task. Checking if a user has a capability is performed by the current_user_can function. Each user of a WordPress site might have some permissions but not others, depending on theirย role. For example, users who have the Author role usually have permission to edit their own posts (the โ€œedit_postsโ€ capability), but not permission to edit other usersโ€™ posts (the โ€œedit_others_postsโ€ capability). for term, comment, and site metadata. Lazy loading refers to a technique where data is loaded only when it is actually needed. This reduces unnecessary database queries or cache lookups and improves overall performance.

Performance

The function get_pages() has been revised to utilize WP_Query internally. This improvement significantly reduces the complexity of the get_pages() function by offloading the burden of querying databases and handling the cache to WP_Query. (#55806 and #12821)

Script Loader

Support for HTMLHTML HyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. 5 โ€œasyncโ€ and โ€œdeferโ€ attributes has been added, which allows developers to register scripts with a loading strategy. The loading strategy can be enabled by overloading the $in_footer parameter as an array that contains the loading strategy to the wp_register_script() and wp_enqueue_script() functions. If present, the loading strategy attribute will be added to the script tagtag A directory in Subversion. WordPress uses tags to store a single snapshot of a version (3.6, 3.6.1, etc.), the common convention of tags in version control systems. (Not to be confused with post tags.).

The intended loading strategy that you pass via the $args parameter may not be the final (chosen) strategy since the scriptโ€™s dependency tree (its dependencies and/or dependents) is taken into account, but it will never be detrimental to (or stricter than) the intended strategy.

Upgrade/Install

The rollback feature will automatically restore the previously installed plugin/theme version if the manual update process fails. This enhancementenhancement Enhancements are simple improvements to WordPress, such as the addition of a hook, a new feature, or an improvement to an existing feature. makes the update process more reliable and ensures that if a plugin or theme update fails, the previous version can be safely restored and the website remains available to its users.

  • When updating a plugin or theme, the old version is moved to a temporary backup directory:
    • wp-content/upgrade-temp-backup/plugins/[plugin-slug] for plugins
    • wp-content/upgrade-temp-backup/themes/[theme-slug] for themes.
  • If the update fails, then the backup kept in the temporary backup directory is restored to its original location.
  • If the update succeeds, the temporary backup is deleted.

To further help troubleshoot plugin and theme updates, two new checks were added to the Site Health screen:

  • Check to make sure the upgrade-temp-backup directory is writable.
  • Check there is enough disk-space available to safely perform updates.

Please take note, the rollback feature cannot be used to โ€œroll backโ€ a plugin/theme to a previous version after a successful update (the feature is only applicable to failed manual updates).

Users

An enhancement has been made to the caching of database queries in WP_User_Query class, the only remaining query class lacking this caching capabilitycapability Aย capabilityย is permission to perform one or more types of task. Checking if a user has a capability is performed by the current_user_can function. Each user of a WordPress site might have some permissions but not others, depending on theirย role. For example, users who have the Author role usually have permission to edit their own posts (the โ€œedit_postsโ€ capability), but not permission to edit other usersโ€™ posts (the โ€œedit_others_postsโ€ capability)..

All calls to WP_User_Query will be automatically cached by default, unless setting the relevant parameters otherwise. You can also globally disable caching by using a filter.

A new global cache group named โ€˜user-queriesโ€˜ is introduced to store the results of queries. Caching will be disabled for user queries that utilize the field parameter and request more than 3 fields.

Finally, plugins utilizing the users_pre_query hook to modify the returned values will bypass caching and the behaviors will remain the same as before.

Other Developer Updates

But wait, there is more!

Cron API

The cron memory limit has been increased to WP_MAX_MEMORY_LIMIT (256MB by default) during cron event processing if the default memory limit is lower than this value. Note that this will not affect external means of processing cron events, such as the wp cron command in WP-CLIWP-CLI WP-CLI is the Command Line Interface for WordPress, used to do administrative and development tasks in a programmatic way. The project page is http://wp-cli.org/ https://make.wordpress.org/cli/, server-level crontab events, or any other cron event processing mechanism that bypasses wp-cron.php.

A new filter cron_memory_limit has been introduced to adjust this value if necessary. (#56628)

Editor

A new source attribute is added to Block patterns allowing them to be filtered by that source. (#58622)

Embeds

  • Anghami has been added as a trusted oEmbed provider. (#49850)
  • Support for TikTok creator profiles has been added. (#55784)

Formatting

  • Added aria content attributes aria-controls, aria-expanded, and aria-current to allowed attributes in KSES. (#55370)
  • CSSCSS Cascading Style Sheets. repeat() function support has been added for KSES. (#58551)

General

  • In KSES, the safecss_filter_attr() function has been revised to allow the filter property to accept a URLURL A specific web address of a website or web page on the Internet, such as a websiteโ€™s URL www.wordpress.org, as a reference to an SVG filter element. (#57780)
  • Replacing strpos() and substr() for code modernization (note: for PHP versions lower than v8.0, the three replacement functions have been polyfilled since WP v5.9):
    • The usage of 0 === strpos() or 0 !== strpos() has been replaced with str_starts_with().
    • The usage of false === strpos() or false !== strpos() has been replaced with str_contains().
    • The usage of $needle === substr( $string, 0, $length ) has been replaced with str_starts_with( $haystack, $needle ). The value of $length should be the length of $needle.
    • The usage of $needle === substr( $string, $offset ) where $offset is negative has been replacedย  with str_ends_with( $haystack, $needle ). The absolute value of $offset should be the length of $needle. (#58012, #58206, #58220)

Performance

  • In the WP_Comments_List_Table class, when the function get_comments() is called, the parameter update_comment_post_cache is passed with a value of true. This primes all the related posts for the displayed comments and improves performance. (#57802)
  • The _wp_array_get() function is the most called function on the front end of a site, up to ~23k times on each page-load when using a block theme. A few minor performance optimizations have been introduced, which adds up to a noticeable improvement. (#58376)

Quick/Bulk Edit

A new bulk_edit_posts action hook is introduced, which triggers after processing the post data for bulk edit and before it returns its results. For example, it allows developers to save additional data without having to perform any .ajax() call. (#28112)

REST APIREST API 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 โ€œphone appโ€ or โ€œwebsiteโ€) can communicate with the data store (think โ€œdatabaseโ€ or โ€œfile systemโ€) https://developer.wordpress.org/rest-api/

  • The Themes REST API can now indicate whether a theme supports the Site Editor by adding an is_block_theme property to each theme in the wp/v2/themes API response. (#58123)
  • A revisionsRevisions The WordPress revisions system stores a record of each saved draft or published update. The revision system allows you to see what changes were made in each revision by dragging a slider (or using the Next/Previous buttons). The display indicates what has changed in each revision. endpoint for global styles, /wp/v2/global-styles/revisions, has been added to the REST API. (#58524)
  • WP_REST_Templates_Controller has a new modified field for template and template part objects that returns post modified datetime for Templates. (#58540)

Revisions

When a post is saved with an unchanged autosave, the existing autosave will be returned, instead of returning an error. (#58739)

Themes

A new public function wp_get_remote_theme_patterns() has been added to query the patterns datum from theme.json and substitutes current usage of private APIs. (#58460)

New Action HooksHooks In WordPress theme and development, hooks are functions that can be applied to an action or a Filter in WordPress. Actions are functions performed when a certain event occurs in WordPress. Filters allow you to modify certain functions. Arguments used to hook both filters and actions look the same.

New Filter Hooks

  • plugins_list (#57278)
  • pre_load_textdomain (#58035)
  • wp_get_attachment_image_context (#58212)
  • get_pages_query_args (#12821)
  • cron_memory_limit (56628)
  • nav_menu_item_attributes (#57140)
  • nav_menu_link_attributes (#57140)
  • nav_menu_submenu_attributes (#57140)
  • pre_wp_setup_nav_menu_item (#56577)
  • site_editor_no_javascript_message (#56228)
  • image_edit_thumbnails_separately (#57685)
  • wp_navigation_should_create_fallback (#58750)
  • wp_min_priority_img_pixels (#58235)

Modified Action/Filter Hooks

  • rest_allowed_cors_headers (#57752) and rest_exposed_cors_headers (#57752)
  • edit_custom_thumbnail_sizes has been deprecated and replaced with image_edit_thumbnails_separately (#57685)

Deprecated Files

  • The wp-admin/media.php file has been deprecated. Users visiting the file will be redirected to the media library wp-admin/upload.php. A user-facing warning will be displayed when the media library is reached via a deprecated link. (#57612)

External Library Updates

The following libraries were updated to the latest versions:

  • PHPMailer is being updated to v6.8.0 (#57873)
  • Requests library is being updated to v2.0.6 (#58079)
  • jQuery is being updated to v3.7.0 (#58083)
  • Sodium Compat is being updated v1.20.0 (#58224)
  • jQuery Migrate is being updated to v3.4.1 (#58451)
  • npm packages is being updated to the latest version (#58623)

Props to @costdev and @mikeschroder for technical review, to @milana_cap for review.

#6-3, #field-guide

Miscellaneous developer changes in WordPress 6.3

Administration

Added the no-store and private directives to the Cache-Control headerHeader The header of your site is typically the first thing people will experience. The masthead or header art located across the top of your page is part of the look and feel of your website. It can influence a visitorโ€™s opinion about your content and you/ your organizationโ€™s brand. It may also look different on different screen sizes. to prevent caching for logged in users. This prevents sensitive data on logged-in users from being cached and available to others, for example, via the browser history after the user logs out. (#21938)

External Libraries

jQueryย has been updated from v3.6.4 to v3.7.0. (#58083)

The latest version of jQuery includes bugbug 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. fixes, a new method called .uniqueSort(), Sizzle selector engine, and a performance improvement for some use cases when using manipulation methods like .append().

The .uniqueSort() method is used to sort an array or an array-like object of DOM elements and remove any duplicate nodes.

Sizzle, its selector engine, has been included as inlined code and removed as a project dependency, along with the removal of some workarounds for legacy browsers in the process.

References:

Login and Registration

Adding required attributes to username and password input fields

In WordPress 6.3, the WordPress login form includes the required attributes for username and password fields, resolving ticketticket Created for both bug reports and feature development on the bug tracker. #32510. This change, while minor, may have some ramifications for pluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party. developers.

The change adds semantic clarity to explicitly mark these fields as required, reinforcing the implied expectation that has always been in place for login fields.

Impact for Developers

Plugins that bypass login fields or login via alternative methods using the login page may need to adapt by removing the input fields or removing the required attribute.

Props @joedolson for the dev notedev 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 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..

Media

The fallback return value in get_the_author() is corrected to return an empty string if called before $authordata is set. This fixes PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher 8.1 โ€œnull to non-nullableโ€ deprecation notice in ent2ncr() function that is hooked via the_author filterFilter Filters are one of the two types of Hooks https://codex.wordpress.org/Plugin_API/Hooks. 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.. (#58157)

Plugins

A new plugins_list filter hook is introduced, which can be used to filter the list of plugins (including those that are โ€œmust-use / muโ€) that are displayed on the WP Adminadmin (and super admin) Plugins screen. (#57278)

function wporg_filter_plugins_list( $plugins ) {
	unset( $plugins['all']['test-plugin/test.php'] );
	return $plugins;
}
add_filter( 'plugins_list', 'wporg_filter_plugins_list' );

Posts, Post Types

A new post type label item_trashed is introduced, which allows the blockBlock 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. editor to announce the correct message when an entity is moved to the TrashTrash Trash in WordPress is like the Recycle Bin on your PC or Trash in your Macintosh computer. Users with the proper permission level (administrators and editors) have the ability to delete a post, page, and/or comments. When you delete the item, it is moved to the trash folder where it will remain for 30 days.. (#51387)

Themes

Non-block themes without theme.json can opt-in to block link color tools and block border tools via add_theme_support(). (#58597 and #58598)

In the callback function that is hooked to the after_setup_theme action in your functions.php of your theme, add the following inside the function:

opt-in to block link color tools:

add_theme_support( 'link-color' );

opt-in to block border tools:

add_theme_support( 'border' );


Props to @audrasjb for the visual assets.

Users

A new wp_update_user action hook is introduced, which fires after the user has been updated and emails have been sent. (#57843)

add_action( 'wp_update_user', function ( $user_id, $userdata, $userdata_raw ) {
        echo $user_id;
        print_r( $userdata );
        print_r( $userdata_raw );
        exit;
}, 10, 3 );

Props to @costdev and @mikeschroder for technical review, to @milana_cap for review.

#6-3, #dev-notes, #dev-notes6-3

Performance Chat Agenda: 18 July 2023

Here is the agenda for this weekโ€™s performance team meeting scheduled for July 18, 2023 at 15:00 UTC.


This meeting happens in the #core-performance channel. To join the meeting, youโ€™ll need an account on the Make WordPress Slack.

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

Bundled themes dropping Internet Explorer scripts and styles

Due to very low traffic from Internet Explorer users, and because WordPress no longer supports this obsolete browser, default themes have removed some IE-specific scripts and styles to give everyone else a better experience.

Most default themes had a skip-link focus fix script for navigating by keyboard in Internet Explorer and old versions of Chrome. As of WordPress 6.3, Twenty Thirteen and Twenty Fourteen no longer include it in their functions.js files, and the six themes from Twenty Fifteen to Twenty Twenty-One do not enqueue or print the script.

In addition, special stylesheets and the HTML5 Shiv script are not enqueued or included in the header.php template for three themes:

  • Twenty Thirteen (its conditional code is also removed)
  • Twenty Fifteen
  • Twenty Seventeen

Future versions of Twenty Eleven, Twenty Twelve, Twenty Fourteen and Twenty Sixteen may remove their special styles and conditional code too.

What if I want to continue supporting Internet Explorer?

Twenty Thirteen users can add a minified version of the script found in later themes:

function wpdocs_twentythirteen_add_skip_link_fix_inline() {
	wp_add_inline_script(
		'twentythirteen-script',
		'/(trident|msie)/i.test(navigator.userAgent)&&document.getElementById&&window.addEventListener&&window.addEventListener("hashchange",function(){var t,e=location.hash.substring(1);/^[A-z0-9_-]+$/.test(e)&&(t=document.getElementById(e))&&(/^(?:a|select|input|button|textarea)$/i.test(t.tagName)||(t.tabIndex=-1),t.focus())},!1);'
	);
}
add_action( 'wp_enqueue_scripts', 'wpdocs_twentythirteen_add_skip_link_fix_inline', 11 );

Twenty Fourteen would need an adjustment for the fixed headerHeader The header of your site is typically the first thing people will experience. The masthead or header art located across the top of your page is part of the look and feel of your website. It can influence a visitorโ€™s opinion about your content and you/ your organizationโ€™s brand. It may also look different on different screen sizes.:

function wpdocs_twentyfourteen_add_skip_link_fix_inline() {
	wp_add_inline_script(
		'twentyfourteen-script',
		'/(trident|msie)/i.test(navigator.userAgent)&&document.getElementById&&window.addEventListener&&window.addEventListener("hashchange",function(){var t,e=location.hash.substring(1);/^[A-z0-9_-]+$/.test(e)&&(t=document.getElementById(e))&&(/^(?:a|select|input|button|textarea)$/i.test(t.tagName)||(t.tabIndex=-1),t.focus(),window.scrollBy(0,-80))},!1);'
	);
}
add_action( 'wp_enqueue_scripts', 'wpdocs_twentyfourteen_add_skip_link_fix_inline', 11 );

Enqueue the themeโ€™s script for Twenty Fifteen, Twenty Sixteen or Twenty Seventeen:

function wpdocs_twentyseventeen_add_skip_link_fix() {
	wp_enqueue_script( 'twentyseventeen-skip-link-focus-fix' );
}
add_action( 'wp_enqueue_scripts', 'wpdocs_twentyseventeen_add_skip_link_fix' );

Add the themeโ€™s function to the wp_print_footer_scripts action for Twenty Nineteen, Twenty Twenty or Twenty Twenty-One:

add_action( 'wp_print_footer_scripts', 'twenty_twenty_one_skip_link_focus_fix' );

Restoring conditional code, styles and scripts

Sites may have been severely broken when using old versions of Internet Explorer, even with the HTML5 Shiv script and IE-specific styles, but you could add them again.

If you have a child themeChild theme A Child Theme is a customized theme based upon a Parent Theme. Itโ€™s considered best practice to create a child theme if you want to modify the CSS of your theme. https://developer.wordpress.org/themes/advanced-topics/child-themes/ of Twenty Thirteen, you can ensure it has a header.php template that includes the conditional code and HTML5 script from previous versions of the theme. Then you could enqueue the styles in the child theme functions (or a pluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party.).

function wpdocs_twentythirteen_ie_restore() {
	wp_enqueue_style( 'twentythirteen-ie' );
}
add_action( 'wp_enqueue_scripts', 'wpdocs_twentythirteen_ie_restore' );

For Twenty Fifteen, you could enqueue the two IE stylesheets. If a child theme does not already have the HTML5 script in a header.php template, the same function could enqueue that too.

function wpdocs_twentyfifteen_ie_restore() {
	// Enqueue stylesheets.
	wp_enqueue_style( 'twentyfifteen-ie' );
	wp_enqueue_style( 'twentyfifteen-ie7' );

	// If the header template does not have the HTML5 script already, enqueue it.
	wp_enqueue_script(
		'twentyfifteen-html5',
		get_template_directory_uri() . '/js/html5.js',
		array(),
		'3.7.0',
		false
	);
	wp_script_add_data( 'twentyfifteen-html5', 'conditional', 'lt IE 9' );
}
add_action( 'wp_enqueue_scripts', 'wpdocs_twentyfifteen_ie_restore' );

With Twenty Seventeen, both the style and script can be enqueued.

function wpdocs_twentyseventeen_ie_restore() {
	wp_enqueue_style( 'twentyseventeen-ie8' );
	wp_enqueue_script( 'html5' );
}
add_action( 'wp_enqueue_scripts', 'wpdocs_twentyseventeen_ie_restore' );

For more details, see TracTrac An open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress. tickets #54421 and #56699.

Props to @westonruter and @joedolson for technical review, to @stevenlinx and @audrasjb for review.

#6-3, #bundled-theme, #core-themes, #dev-notes, #dev-notes6-3

Miscellaneous Editor changes in WordPress 6.3

In this post, you will find dev 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 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. for smaller changes to the editor in WordPress 6.3.


Table of contents


Post editor iframed

From WordPress 6.3 on, the post editor will be iframed if all registered blocks have a Block API version 3 or higher. Adding version 3 support means that the blockBlock 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. should work inside an iframeiframe iFrame is an acronym for an inline frame. An iFrame is used inside a webpage to load another HTML document and render it. This HTML document may also contain JavaScript and/or CSS which is loaded at the time when iframe tag is parsed by the userโ€™s browser., though the block may still be rendered outside the iframe if not all blocks support version 3.

It is worth noting that the Site Editor and Page Template Editor have always been iframed, alongside block and pattern previews, and will continue to be iframed regardless of the Block APIAPI An API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways. version.

To make adoption easier, all assets (styles and scripts) added through theย enqueue_block_assetsย PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher action will now also be enqueued for the iframe. For more details, seeย #48286.

Itโ€™s also worth noting that enqueue_block_editor_assets should not be used to add stylesheets for editor content. Please use enqueue_block_assets instead. If you donโ€™t want styles to load on the front-end, you can use an is_admin() condition.

For backward compatibility, we will clone stylesheets added via enqueue_block_editor_assets if the stylesheet contains a .editor-styles-wrapper, .wp-block, or .wp-block-* selector, but a warning message will be logged. You should use enqueue_block_assets instead, or block.json if youโ€™re adding block styles, theme.json for block-based themes, or add_editor_style() for classic themes.

PluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party. developers are asked to make blocks compatible with the iframed methods and support version 3 and to report any problems with those changes. In a future version of WordPress, the editor content will load within an iframe regardless of the Block API version.

For more information about why iframing the editor content is preferred, please revisit the post Blocks in an iframed (template) editor.

Edit: thereโ€™s a new page in the Block Editor Handbook on enqueuing assets in the editor, provided by @ndiego.

Props to @ellatrixย for the dev notedev 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 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..

Publish types for plugins packages enabled

TypeScript developers appreciate having great in-editor type-hints and compiler warnings. With the changes for WordPress 6.3, contributors reduced the reliance on DefinitelyTyped, and increase code maintainability. Various wordpress packages were published to allow TypeScript to emit types by parsing the JSDoc comments.

With some small tweaks to assist its inference capabilitiescapability Aย capabilityย is permission to perform one or more types of task. Checking if a user has a capability is performed by the current_user_can function. Each user of a WordPress site might have some permissions but not others, depending on theirย role. For example, users who have the Author role usually have permission to edit their own posts (the โ€œedit_postsโ€ capability), but not permission to edit other usersโ€™ posts (the โ€œedit_others_postsโ€ capability)., TypeScript can generate extensive type definitions even for store objects without migrating much code to TypeScript. So far, the following packages are using this process now:

  • Publish rich text build typesย (#49651)
  • Convert wp data controls to typescriptย (#49647)
  • Publish build types for noticesย (#49650)
  • Publish types for plugins packageย (#49649)

The work for some larger packages is still in progress, such asย blocks,ย editor, andย block-editor.

See #49649 for more details.

Props to @noahtallenย for the dev note

Allow dragging-and-dropping images from the inserter to image blocks

The updates to theย onDragStartย prop of theย <Draggable>ย component switched the synchronous callback function from an asynchronous one. Previously, it used to be called asynchronously with a slight delay set byย setTimeout(onDragStart, 0). The previous behavior posed a limitation as users were unable to add additional data for the drag event due toย security measures implemented by web browsers.

This change should have minimal impact on existing code. However, if it does affect your code, you can maintain the original behavior by wrapping your event callback inside aย setTimeoutย function as shown below:

-onDragStart={ () => { doSomething(); } }
+onDragStart={ () => { setTimeout( doSomething, 0 ); } }

See #49673 for more details.

Props toย @kevin940726ย for the dev note

New slot in the site editorโ€™s Template sidebarSidebar A sidebar in WordPress is referred to a widget-ready area used by WordPress themes to display information that is not a part of the main content. It is not always a vertical column on the side. It can be a horizontal rectangle below or above the content area, footer, header, or any where in the theme.

Extenders can now add additional information in the site editorโ€™s Templateย sidebar. With the new slot namedย PluginTemplateSettingPanel the information will appear below the main information, similar to below example of the Template Card. (See Code Example)

import { MyTemplateSettingTest } from '@wordpress/edit-site';
const MyTemplateSettingTest = () => (
	&lt;PluginTemplateSettingPanel>
		&lt;p>Hello, World!&lt;/p>
	&lt;/PluginTemplateSettingPanel>
);

For more details, see #50257.

The site editor, showing settings panel with additional slot below the template card.

Props toย @ntsekourasย for the dev note

New `ungroup` transforms API

Block Transformsย is theย APIย that allows aย blockย to be transformedย fromย andย toย other blocks, as well asย fromย other entities.

From now on, via the optionalย transformsย key of the block configuration, blocks can use theย ungroupย subkey to define the blocks that will replace the block being processed. These new blocks will usually be a subset of the existing inner blocks, but could also include new blocks.

If a block has anย ungroupย transform, it is eligible for ungrouping without the requirement of being the default grouping block. Theย UIUI User interfaceย used to ungroup a block with this API is the same as the one used for the default grouping block. For the Ungroup button to be displayed, you must have a single grouped block selected, which also contains some inner blocks.

ungroupย is a callback function that receives the attributes and inner blocks of the block being processed. It should return an array of block objects.

Example:

export const settings = {
    title: 'My grouping Block Title',
    description: 'My grouping block description',
    /* ... */
    transforms: {
        ungroup: ( attributes, innerBlocks ) =>
            innerBlocks.flatMap( ( innerBlock ) => innerBlock.innerBlocks ),
    },
};

For more details, see #50385.

Props toย @ntsekourasย for the dev note

Block variation transforms in block switcher

Block Variations is the API that allows a block to have similar versions of it, but all these versions share some common functionality. Each block variation is differentiated from the others by setting some initial attributes or inner blocks. Then, when a block is inserted, these attributes and/or inner blocks are applied.

From now on, variations with a scope: transform will be prioritized in the block switcher menu so that they are easier surfaced in existing user interface (UI) patterns. Noting that the existing UI in the blockโ€™s inspector controls regarding the variation transformations is preserved as is.

For more details, see #50139.

Props toย @ntsekourasย for the dev note

Prioritizing Blocks in the Inserter

In this PR, we added a way to control what blocks are shown in the block inserter for a particular block. This allows a block to suggest particular blocks which are going to be most useful.

For example, when inserting a block within the Navigation block, we specify core/navigation-link and core/navigation-link/page as these are the most commonly used inner blocks.

prioritizedInserterBlocks is a property of the InnerBlocks component. To use it, pass prioritizedInserterBlocks as a property of the options argument passed to useInnerBlocksProps.

prioritizedInserterBlocks takes an array of the form {blockName}/{variationName}, where {variationName} is optional.

As a result, the blocks you specify in prioritizedInserterBlocks should be the first ones in the block inserter:

Props to @scruffianย for the dev note

Renaming Reusable Blocks to Patterns

Reusable blocks have been renamed to Patterns in WordPress 6.3. For backward compatibility, the default behavior of ย core/blockย remains exactly the same as with Reusable blocks. The block content is still saved to theย wp_blockย CPT and any changes to the block content are reflected across all instances of the block. This default behavior of the Pattern block is referred to in the UI as โ€˜syncedโ€™.

The Pattern block also has a second option in 6.3 which is โ€˜unsyncedโ€™. When โ€˜unsyncedโ€™, the block will behave the same as the existing theme and plugin patterns, i.e. the patterns blocks will be inserted as standalone blocks, and any edits affect only that instance.

In order to track the synced and unsynced status, a new postmeta field has been registered for theย wp_blockย CPT calledย wp_pattern_sync_status. If this postmeta field is undefined, the pattern is considered synced, and if the pattern is unsynced, this will be set toย unsynced. Because this is a coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. field, it is exposed as a top-level field in the REST APIREST API 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 โ€œphone appโ€ or โ€œwebsiteโ€) can communicate with the data store (think โ€œdatabaseโ€ or โ€œfile systemโ€) https://developer.wordpress.org/rest-api/ instead of aย metaMeta Meta is a term that refers to the inside workings of a group. For us, this is the team that works on internal WordPress sites like WordCamp Central and Make WordPress.ย property, so it will appear on theย wp_blockย asย entity.wp_sync_status.

Because the synced Patterns do not require the new postmeta field, we donโ€™t anticipate any impact on plugins that may modify the existing reusable block behavior. The only impact we anticipate is on any plugins that manipulate the DOM based on selectors that depend on the textย Reusable block(s)ย existing in the UI. These selectors would need to be adjusted to expect the textย Patternย instead.

Props to @glendaviesnz for the dev note

Patterns on the create a new template modal

In WordPress 6.2, we introduced a new modal for creating templates. This modal presents the option to start a new template from a โ€œblankโ€ state or use the current fallback of the template. In WordPress 6.3, we expanded this modalโ€™s functionality to display patterns that are suitable for a given template.

For a pattern to appear in the modal, it needs to specify a property called templateTypes, which is an array containing the templates where the patterns can be used as the full content.

Hereโ€™s an example that demonstrates adding a pattern to the start of a 404 template:

register_block_pattern(
	'my-patterns/404-template',
	array(
		'title'      => __( 'New 404 pattern', 'gutenberg' ),
		'templateTypes' => array( '404' ),
		'content'    => '&lt;!-- wp:paragraph {"align":"center","fontSize":"x-large"} -->
						&lt;p class="has-text-align-center has-x-large-font-size">404&lt;/p>
						&lt;!-- /wp:paragraph -->',
	)
);

Props to @jorgefilipecosta for the dev note


Props to @bph and @annezazu for reviewing the post

#6-3, #dev-notes, #dev-notes6-3