Dropping support for PHP 5

Support for PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher 5 will be dropped in WordPress 6.3, scheduled for release on August 8th 2023. The new minimum supported version of PHP will be 7.0.0. The recommended version of PHP remains at 7.4 or greater.

WordPress currently supports PHP version 5.6.20 or greater. The minimum supported version was last adjusted in WordPress 5.2 in 2019, and since then usage of PHP 5.6 has dropped to 3.9% of monitored WordPress installationsย as of July 2023.

Thereโ€™s no concrete usage percentage that a PHP version must fall below before support in WordPress is dropped, but historically the project maintainers have used 5% as the baseline. Now that usage of PHP 5.6 is well below that at 3.9% and dropping by around 0.1% every few weeks, plans to increase the minimum supported PHP version can move forward.

The benefits to increasing the minimum supported PHP version manifest over time and in multiple places, including within the 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. and theme ecosystem, within the long term perception of the WordPress project, within developer relations, and over time within the WordPress codebase and its developer tooling.

Discussion around this minimum version bump can be found here on the Trac ticket.

What about PHP 8?

Support for PHP 8.0, 8.1, and 8.2 in WordPress coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. is very good, andย a proposal for the criteria for removing the โ€œbetaโ€ support label for each new PHP version has been published.

What about security support?

Sites that are running PHP 5.6 will remain on the 6.2 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". of WordPress which will continue receiving security updates as it does currently. The current security policy is to support WordPress versions 4.1 and greater.

What about the 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/ plugin?

The Gutenberg plugin, which is used for development of 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, has a separate release schedule from WordPress core and officially supports the two most recent releases of WordPress. This means that the Gutenberg plugin will continue to support PHP 5.6 for the time being, most likely until WordPress 6.4 is released. See this issue on the Gutenberg repo for further information.

Going forward

There are no plans to bump the minimum supported PHP version on a schedule. The core team will continue to monitor usage of PHP versions and work with the hosting team to encourage users and hosting companies to upgrade their versions of PHP as swiftly as possible. The 5% usage baseline will continue to be used for the foreseeable future.

The PHP usage stats as of July 2023 look like this:

  • 8.2: 2.11%
  • 8.1: 9.37%
  • 8.0: 14.05%
  • 7.4: 51.13%
  • 7.3: 7.92%
  • 7.2: 6.29%
  • 7.1: 1.38%
  • 7.0: 2.05%
  • 5.6: 3.93%

Update PHP today

If you need more information about PHP or how to update it,ย check out this support article that explains more and guides you through the process.

Props to all those that have contributed to this discussion recently. Thanks to those who provided feedback and proof-reading of this post: @azaozz @chanthaboune @flixos90 @hellofromtonya @javiercasares @joemcgill @jorbin @jrf @peterwilsoncc @sergeybiryukov

#php

Editor chat summary: July 5th, 2023

This post summarizes the weekly editor chat meeting (agenda for July 5th meeting) held on Wednesday, July 5th 2023, 03:00 PM GMT in Slack. Moderated by @andraganescu.

Announcements

  1. WordPress 6.3 Beta 3ย is out.
  2. Withย BetaBeta A pre-release of software that is given out to a large group of users to trial under real conditions. Beta versions have gone through alpha testing in-house and are generally fairly close in look, feel and function to the final product; however, design changes often occur as part of the process. 3 already live, we are two weeks away from RC1 and the incomingย string freeze. Please be aware that:
    • Soft string happens during Beta 4; itโ€™s the last chance to addย newย strings.
    • Hard string freeze happens during RC1; no strings can be edited after this.
  3. A series of posts on phase 3 of the 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/ project has been started byย @matias The 1st three installations are:

with more to come. You can check the progress by looking atย the tag.ย 

Key project updates

Open Floor

#core-editor, #core-editor-summary, #gutenberg, #meeting-notes, #summary

Revisions

This is part of the Phase 3: Collaboration roadmap. The main projects are Real-Time Collaboration, Workflows, Revisions, Media Library, Block Library, and Admin Design.

Introduction

Collaboration workflows require 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. and edit history to be clear, usable, and performant. The design of the traditional post revisions interface needs to evolve to become fully aware of blocks. It should offer better visual comparison 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). beyond the classic HTMLHTML HyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. code diffing, which is getting less and less adequate for illustrating 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. modifications. It should provide easy mechanisms for spotting changes regardless of the content type being shown.

Mockup showing a paragraph block with three words highlighted in green as "additions".

As part of improving the overall experience, we should also go beyond document level history and explore how the interface could let users browse through single block changes and offer the ability to restore them individually rather than requiring full post restores. For global styles, we should evolve the revisions panel to allow comparing two revisions side by side. For synced patterns, we could allow browsing edit history with side by side and overlay comparison tools.

Thereโ€™s also a semantic overlap between conflictconflict A conflict occurs when a patch changes code that was modified after the patch was created. These patches are considered stale, and will require a refresh of the changes before it can be applied, or the conflicts will need to be resolved. resolution in real-time collaboration, offline reconciliation, and restoring or managing edit history. At the same time, internal revisions in WordPress are not a replacement for version controlversion control A version control system keeps track of the source code and revisions to the source code. WordPress uses Subversion (SVN) for version control, with Git mirrors for most repositories. systems, so there has to be points of contact to ensure developers can lift from or deployDeploy Launching code from a local development environment to the production web server, so that it's available to visitors. changesets down to the filesystem as needed. Plugins should also be able to extend the capabilities and develop more advanced integrations on top of what CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. provides. For example, consider the case of using all the site editor tools but ensuring user modifications are saved back into files so they can be managed by git or svn workflows, including wp-cli integrations. Exploring some of these problems should also help outline what architectural considerations multi-lingual would present in Phase 4 when managing content over all possible site objects.

Finally, we should investigate if we can adapt customize_changeset to orchestrate revision grouping across all new entities and requirements โ€” such as grouping multiple revisions together, reference and orchestrate changes to entities, etc.

Scope

This is a summary of the broad tasks we need to look into:

  • Design a revisions interface that can better highlight visual differences beyond markup diffing. Align presentation of added & removed content with how edit suggestions might be presented in the other collaborative workflows.
  • Integrate with blocks. Allow selecting a block (like an image) and see all changes that have occurred to it. It should work out of the box with nested contexts, so if you select a parent it tracks and shows changes across all its children as well. Users should be able to focus at any level within a document.
  • Make it easy to restore changes on a document or per block basis. For example, reverting some design changes to an embedded pattern but keeping the rest of the post as is, even if the pattern is not synchronized separately. The flows for restoring should be connected with the flows for publishing, so a revision can be made the currently published view.
  • Explore ways in which branching could work for multi-entity history. For example, site title changes wonโ€™t be naturally covered in the edit history of a template that contains a site title block, but it could be referenced through a customizerCustomizer Tool built into WordPress core that hooks into most modern themes. You can use it to preview and modify many of your siteโ€™s appearance settings. changeset that connects template revision and discrete entity values. The multi-entity saving flow should evolve to take this into account.
  • Evaluate any possible shortcomings in storage and performance of the various revision systems if they are to be used broadly (for example, everything going through posts tables).
  • Improve the visual comparison tools so a user can check their content side by side or using overlays to spot differences. This can be rehearsed on the global styles revisions history and focused pattern views.
  • Develop more immediate clarity over what properties were changed on certain revisions. For example, on style revisions list if there were changes to color palettes, to typography, etc, to improve the browsing experience.
  • Explore viability of naming or grouping revisions, particularly for staging changes in the future. Connect โ€œsaveโ€ area in site editor flows with customize_changeset or equivalent. Keep track and list entity modifications.
  • Review the revisions extended 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. for scheduling updates to already published posts.

Get Involved!

If you are interested in helping improve the revision interfaces and architecture, please join in.

#gutenberg, #phase-3

A Week in Core โ€“ July 3, 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 June 19 and July 3, 2023.

  • 88 commits
  • 143 contributors
  • 87 tickets created
  • 19 tickets reopened
  • 115 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

Build/Test Tools

  • Improve the name of the e2e test jobs 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/ Actions โ€“ #58661
  • Run E2E tests with and without SCRIPT_DEBUG enabled โ€“ #58661
  • Switch frame container when testing 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 output โ€“ #58592
  • Switch frame container when testing block editor output โ€“ #58592
  • Update terser-webpack-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. โ€“ #58660, โ€“ #57657

Bundled Themes

  • Twenty Fourteen: Fix text color issue on Button block hover โ€“ #58509
  • Twenty Nineteen: Add fragment ID to paginated links โ€“ #45920
  • Twenty Nineteen: Always set background color and foreground color together โ€“ #45916
  • Twenty Seventeen: Various docblockdocblock (phpdoc, xref, inline docs) fixes โ€“ #58695, #57840
  • Twenty Sixteen: Replace deprecated unbind method with off โ€“ #58225
  • Twenty Sixteen โ€“ Twenty Ten: Reflect Quote block text color on the entire block โ€“ #57204
  • Twenty Ten: Prevent Block Inserter icon color override โ€“ #57414
  • Twenty Ten: Reflect Heading block text color on front-end โ€“ #56603
  • Twenty Twenty-One: Improve various globals documentation, as per docblock standards โ€“ #58684
  • Twenty Twenty-Three: Allow changing Site Title font size in Marigold and Whisper styles โ€“ #57971
  • Twenty Twenty-Two: Adjust selector to apply bottom margin to top-level comments โ€“ #58653
  • Twenty Twenty: Fix Button block text color when located in footer widgets โ€“ #57087
  • Twenty Twenty: Remove various unused function parameters and variables โ€“ #57371

Coding Standards

  • Fix a PHPCSPHP Code Sniffer PHP Code Sniffer, a popular tool for analyzing code quality. The WordPress Coding Standards rely on PHPCS. issue found in wpPluginsListTable.php
  • Revert use of str_starts_with() and str_contains() in update-core.php โ€“ #58206

Database

  • Move the if statement outside of 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. โ€“ #56541

Docs

  • Correct @return description for wp_count_posts() โ€“ #58685
  • Fix image_get_intermediate_size() docblock โ€“ #58686, #57840

Editor

  • Add block theme previews โ€“ #58561
  • Allow Query Block to show posts from multiple selected authors โ€“ #58426
  • Enqueueย commandsย package styles โ€“ #58667
  • Revert unnecessary changes to .jshintrc files โ€“ #12009
  • Update block-serialization-default-parser package for WP 6.3 BetaBeta A pre-release of software that is given out to a large group of users to trial under real conditions. Beta versions have gone through alpha testing in-house and are generally fairly close in look, feel and function to the final product; however, design changes often occur as part of the process. 1 โ€“ #57832
  • Update npm WordPress npm packages โ€“ #58623
  • Update npm packages to fix gutenberg_ prefix โ€“ #58651
  • add Post Template fallback styles โ€“ #58570
  • add box shadow support to blocks โ€“ #58590
  • add 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. around post editor โ€“ #58626
  • add navigation fallback โ€“ 58557
  • adds deprecation for deleted block_core_navigation_submenu_build_css_colors function โ€“ #58623
  • allow filtering block patterns by source โ€“ #58622
  • delete test file from update duotone support โ€“ #58555
  • navigation post preloading โ€“ #58556 โ€“ #58589
  • refactor and stabilize selectors 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. โ€“ #58586
  • stabilise layout and refactor definitions โ€“ #58550
  • update WordPress npm packages โ€“ #58623
  • update duotone support โ€“ #58555
  • update function name in test commentSeeย #58522
  • update npm packages to latest patchpatch A special text file that describes changes to code, by identifying the files and lines which are added, removed, and altered. It may also be referred to as a diff. A patch can be applied to a codebase for testing. versions โ€“ #58654
  • update npm packages with 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 blessed tasks โ€“ #58701

Emoji

  • Give name to web worker in emoji loader and terminate when finished โ€“ #58472
  • Optimize emoji loader with sessionStorage, willReadFrequently, and OffscreenCanvas โ€“ #58472
  • Pass functions as arguments in loader to account for minification and worker script โ€“ #58472

Filesystem API

  • Allow optional inclusion of hidden files in list_files() โ€“ #53659
  • Define password as null if not set when using SSH2 with public/private key โ€“ #33196

General

  • Add missing parentheses to functions referenced in _deprecated_function() calls added in 6.3 โ€“ #58235, #58301, #58555
  • Ignore invalidinvalid A resolution on the bug tracker (and generally common in software development, sometimes also notabug) that indicates the ticket is not a bug, is a support request, or is generally invalid. types for the โ€˜_wp_http_refererโ€™ URLURL A specific web address of a website or web page on the Internet, such as a websiteโ€™s URL www.wordpress.org query variable โ€“ #57670

HTMLHTML HyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. API

  • Fix a fatal error when processing malformed document with unclosed attribute โ€“ #58637
  • Declare a few default parameters in WP_Http_Curl and WP_Http_Streams โ€“ #52622

Media

  • Fix inconsistent docs for existing wp_img_tag_add_loading_attr 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 remove duplicate โ€“ #58235
  • Only show โ€œCopyโ€ and โ€œDownloadโ€ actions when an attachment URL is available โ€“ #57893

Menus

  • Allow themes and plugins to pass HTML attributes to various Nav Walker outputs โ€“ #57140

Options, 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. APIs

  • Check if the gmt_offset value is numeric in sanitize_option() โ€“ #57728
  • Prime networknetwork (versus site, blog) options in a single cache call using wp_cache_get_multiple โ€“ #56913

Plugins

  • Introduce the plugins_list filter โ€“ #57278

Quick/Bulk Edit

  • Add an action hook to bulk_edit_posts() function โ€“ #28112
  • Ensure scheduled posts are published when using Bulk Edit โ€“ #31635

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/

  • Cache schema in block pattern and menu item endpoints โ€“ #58657
  • Check post meta update authorization only when value is changed
  • Expose current $request object to cors_header filters in WP_REST_SERVER->serve_request() โ€“ #57752
  • add 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 โ€“ #58524
  • ignore empty templates โ€“ #58615
  • updates test annotations for global styles revisions โ€“ #58524

Script Loader

  • Fix performance issues in wp_common_block_scripts_and_styles โ€“ #58560
  • Fix unintended adding of async to scripts that are printed directly with wp_print_scripts() without enqueueing them beforehand โ€“ #58648
  • Prevent fatal error in load-styles.php โ€“ #57629

Site Health

  • Add server time debug data โ€“ #56378
  • Correct the label for wp-content directory check โ€“ #58678
  • Include new WP_DEVELOPMENT_MODE in the list of constants โ€“ #58646

Themes

  • Block template is located twice in get_query_template() โ€“ #58299
  • Fix layout issue on the Themes page background overlay โ€“ #58164
  • Use get_theme_file_path() in wp_theme_has_theme_json() โ€“ #57629
  • Use improved support for child themes in wp_theme_has_theme_json() โ€“ #57629

Upgrade/Install

  • Initialize the local $checkout variable in WP_Automatic_Updater::is_vcs_checkout() โ€“ #58563
  • Only show errors if there is nothing to update โ€“ #57999
  • Pass the full database version string to WordPress.orgWordPress.org The community site where WordPress code is created and shared by the users. This is where you can download the source code for WordPress core, plugins and themes as well as the central location for community conversations and organization. https://wordpress.org/ for parsing โ€“ #58584

Users

  • Introduce the wp_update_user action โ€“ #57843

Props

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

@audrasjb (23), @spacedmonkey (23), @mukesh27 (23), @costdev (19), @ramonopoly (17), @sabernhardt (15), @oglekler (15), @sergeybiryukov (12), @peterwilsoncc (11), @joemcgill (10), @flixos90 (7), @kebbet (6), @azaozz (5), @Clorith (5), @dd32 (4), @westonruter (4), @shailu25 (4), @dmsnell (4), @zunaid321 (3), @oandregal (3), @get_dave (3), @desrosj (3), @dlh (3), @jrf (3), @poena (3), @pooja1210 (3), @mikeschroder (3), @ironprogrammer (3), @onemaggie (3), @johnbillion (3), @youknowriad (2), @isabel_brison (2), @mayur8991 (2), @bernhard-reiter (2), @crstauf (2), @webcommsat (2), @adi3890 (2), @umesh84 (2), @aaronrobertshaw (2), @shuvoaftab (2), @alvitazwar052 (2), @talldanwp (2), @upadalavipul (2), @rutviksavsani (1), @TimothyBlynJacobs (1), @valterlorran (1), @hellofromtonya (1), @tanner m (1), @Cybr (1), @danyk4 (1), @lphoumpakka (1), @davidwebca (1), @ecorica (1), @azzaoz (1), @yani.iliev (1), @fischfood (1), @nateallen (1), @tyxla (1), @API (1), @jeremyfelt (1), @laurelfulford (1), @ellatrix (1), @manfcarlo (1), @rajanpanchal2028 (1), @aristath (1), @TobiasBg (1), @jorgefilipecosta (1), @andrewserong (1), @hareesh-pillai (1), @hrrarya (1), @robinwpdeveloper (1), @sebastienserre (1), @joyously (1), @options (1), @andraganescu (1), @styling (1), @flexible (1), @more (1), @enabling (1), @selectors (1), @the (1), @stabilizing (1), @config (1), @own (1), @their (1), @into (1), @scruffian (1), @ckoerner (1), @helgatheviking (1), @ramonjd (1), @Ov3rfly (1), @itpathsolutions (1), @ugyensupport (1), @afragen (1), @pbiron (1), @Presskopp (1), @pitamdey (1), @ehsanakhgari (1), @J-Dill (1), @thekt12 (1), @xknown (1), @sccr410 (1), @arafatjamil01 (1), @pavanpatil1 (1), @cadic (1), @siobhan (1), @jqz (1), @wildworks (1), @hellofromTonya (1), @sjoerdlinders (1), @ryelle (1), @hasanmisbah (1), @hrdelwar (1), @dhrupo (1), @nithins53 (1), @thakordarshil (1), @darshitrajyaguru97 (1), @Mte90 (1), @amin7 (1), @kajalgohel (1), @timothyblynjacobs (1), @anilvaza (1), @nidhidhandhukiya (1), @marybaum (1), @mensmaximus (1), @pento (1), @itowhid06 (1), @mrasharirfan (1), @afercia (1), @helen (1), @shwetabathani2312 (1), @felixarntz (1), @chaion07 (1), @rachelbaker (1), @bor0 (1), @clorith (1), @ajlende (1), @dilipbheda (1), @Malae (1), @monzuralam (1), @orestissam (1), @zodiac1978 (1), and @madhudollu (1)

Congrats and welcome to our 18 (!) new contributors of the week:ย @adi3890, @shuvoaftab, @valterlorran, @danyk4, @lphoumpakka, @yaniiliev, @fischfood, @rajanpanchal2028n, @hrrarya, @pitamdey, @ehsanakhgari, @sccr410, @sjoerdlinders, @hrdelwar, @darshitrajyaguru97, @anilvaza, @shwetabathani2312, and @orestissamย โ™ฅ๏ธ

Core committers: @audrasjb (22), @isabel_brison (20), @sergeybiryukov (8), @davidbaumwald (6), @spacedmonkey (6), @azaozz (3), @westonruter (3), @johnbillion (3), @flixos90 (3), @bernhard-reiter (3), @kadamwhite (3), @joemcgill (2), @clorith (2), @peterwilsoncc (2), @mikeschroder (1), and @dd32 (1).

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

Performance Chat Summary: 4 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
  • Many folks out today due to US 4 July holiday
  • Reminder ofย 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.ย scrub tomorrow for a check onย 6.3 issues
  • Early performance numbers on WP 6.3 betaBeta A pre-release of software that is given out to a large group of users to trial under real conditions. Beta versions have gone through alpha testing in-house and are generally fairly close in look, feel and function to the final product; however, design changes often occur as part of the process. is out: overall load time performance (represented by the โ€œLCPโ€ metric) sees a boost of a whoppingย ~26% for 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. themesย andย ~19% for classic themesย ย [see Slack post]
  • For those that missed it, we have a specialย Performance Improvements for WordPress 6.3 Hallway Hangoutย scheduled onย Thursday July 27 at 3:00pm UTC
  • Reminder that Beta 4 is next week on July 11 for the 6.3 release cycle

Priority Projects

Server Response Time

Link to roadmap projects

Contributors: @joemcgill @spacedmonkey @aristath

  • @spacedmonkey Mostly been supporting the beta release. I have also validated the number that Felix got, we are massively in the green for performance improves in WP 6.3
    • While profiling, I did find this,ย https://core.trac.wordpress.org/ticket/58682 wp_trim_excerpt parses and renders blocks twice
    • TLDR, excerpts areย parsing blocks twice, which is really bad. I will look into that ticketticket Created for both bug reports and feature development on the bug tracker. in WP 6.4, as it has been a problem since 5.0. Only noticed now other performance has improved.

Database Optimization

Link to roadmap projects

Contributors: @aristath @spacedmonkey @olliejones

  • @spacedmonkey working on 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., here are some early drafts:

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

Images

Link to roadmap projects

Contributors: @flixos90 @thekt12 @adamsilverstein @joemcgill

  • @spacedmonkey I did some testing on the lazy loading / fetchpriority changes. I found some places where these were not working:
    • https://core.trac.wordpress.org/ticket/58680 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. image does not add fetch priority attribute
    • https://core.trac.wordpress.org/ticket/58681 No lazy loading attribute on images in gallery
    • https://core.trac.wordpress.org/ticket/58704 Image widgetWidget A WordPress Widget is a small block that performs a specific function. You can add these widgets in sidebars also known as widget-ready areas on your web page. WordPress widgets were originally created to provide a simple and easy-to-use way of giving design and structure control of the WordPress theme to the user. images do not support fetch priority or async
    • I would say that header images (used by many coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. themes) and gallery shortcodes are pretty big issues that I would love to see fix in the WP 6.3 release cycle

Measurement

Link to roadmap projects

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

  • @swissspidy I started looking into making the performance testing environment reusable. Nothing concrete to share yet though

Ecosystem Tools

Link to roadmap projects

Contributors: @joegrainger @mukesh27

Creating Standalone Plugins

Link to GitHub overview issue

Contributors: @flixos90 @mukesh27 @10upsimon

  • @clarkeemily we have received a response from the 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. Review team on the Dominant Color Images plugin and have some feedback to review. They found an issue that we are unable to replicate, so we are in the process of liaising with the Plugin Review team on this

Open Floor

  • @spacedmonkey Do we have a list of all the tickets that we want to have dev notes for?
  • @mukesh27 For the performance aspect, do we have only one developer note or are there multiple developer notes related to it?
    • @clarkeemily My understanding is multiple, and there will be blogblog (versus network, site) posts about a holistic review of 6.3 performance
    • @spacedmonkey noted that @flixos90 is looking into a retro for WP 6.3. That will cover some of the other ticket that do not need dev notes but had an impact. We donโ€™t normally write a 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. for things we just made faster under the hood.
    • @spacedmonkey If anyone else has anything they think we should call out in docs or write dev notes, please reach out on this channel.

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

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

Performance Chat Agenda: 4 July 2023

Here is the agenda for this weekโ€™s performance team meeting scheduled for July 4, 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

Workflows

This is part of the Phase 3: Collaboration roadmap. The main projects are Real-Time Collaboration, Workflows, Revisions, Media Library, Block Library, and Admin Design.

Introduction

Provide seamless collaboration during the entire editorial process, from draft to publication. Allow users to add comments, suggest edits, and 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.) other users for peer review. Ensure the interface remains focused on a smooth experience for writers and editors.

Mockup showing a new cursor / tool option in the editor for adding "comments" to blocks.

Improve the publishing flow by customizing the review process, establishing what needs to be done before a publication is ready. For example, an author could leave empty media blocks in a story they are writing and mark them to be completed by another team member, ensuring the post cannot be published while empty placeholders are still there. This could also include other types of requirements, like word count, fields to be completed, and so on.

Make it straightforward to share different types of content, from posts to design changes, while controlling access through permissions. Connect with the adminadmin (and super admin) notifications project to capture comment reviews and mentions. Build upon improvements to the post 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. interface to provide clarity over edit history.

The tools and infrastructure developed need to support simpler use cases (one author sharing previews with friends for feedback) all the way to larger editorial teams, managing deadlines, handoffs, and more sophisticated review processes. Plugins should be able to take it further.

While a lot of this work naturally aligns with unpublished content, itโ€™s also important to consider workflows around already published content and pages.

Scope

This is a summary of the broad tasks we need to look into:

  • Introduce inline comments on blocks within the editor experience. Explore using comment types to store them. Allow marking comments as resolved. Status of comments also need to fold within individual revisions, so that itโ€™s easy to see what specific edit state a comment refers to. Possible connection with โ€œpending reviewโ€ functionality.
  • Explore introducing support for โ€œtasksโ€ in publish flow. These would allow highlighting missing actions before a post is to be published. It can be connected to various post statuses (such as going from โ€œpending reviewโ€ to โ€œpublishโ€ readiness, ability to have pending review status over already published content, or other custom statuses). Individual actions should be highly configurable by users and extensibleExtensible This is the ability to add additional functionality to the code. Plugins extend the WordPress core software. by plugins. Tasks can also go beyond publishing and be relevant for other plugins (like marking fulfilled orders in WooCommerce data structures).
  • Ability to share draft links with permission controls and clear revision browsing. This also extends to previewing and sharing design changes across the entire collection of features of the site editor.
  • Introduce extension points for in-app previewing. For example, 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. might want to show how a post looks for subscribers and non-subscribers; with or without ad units; on an RSS feedRSS Feed RSS is an acronym for Real Simple Syndication which is a type of web feed which allows users to access updates to online content in a standardized, computer-readable format. This is the feed. or an email; etc. CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. should provide good mechanics for plugins to hook, control, and modify these views across editors in a way that integrates seamlessly with the editing flows.
  • Improve multi-entity saving to allow scheduling design changes on 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. themes that can be managed through the various revisions systems (styles, templates, patterns, pages, posts). Possibly allow naming future revisions to better manage and orchestrate changes throughout a site. Preview snapshots of a site before they go live.
  • Explore hook points for version controlversion control A version control system keeps track of the source code and revisions to the source code. WordPress uses Subversion (SVN) for version control, with Git mirrors for most repositories. systems to smoothly take over internal revision systems if desired.
  • Control access with granular permissions for patterns and templates rather than general locking. For example, lock patterns to โ€œcontent onlyโ€ for author roles but leave it open for admins.
  • Consider multi-author support on posts or improve how it can be represented as a side effect of real-time collaboration and revision authorship.

Get Involved!

Thereโ€™s been a lot of interest from users, developers, agencies, etc, about these set of features. Many have already reached out over the last year and months to share experiences, insights, or existing plugin work to reference. Letโ€™s capture and highlight feedback to ensure all use cases are represented.

#gutenberg, #phase-3

Editor Chat Agenda: July 5th, 2023

Facilitator and notetaker:ย @ajitbohra

This is the agenda for the weeklyย editor chatย scheduled forย Wednesday, 5 July 2023 at 17:00 GMT+2.

This meeting is held in theย #core-editorย channel in the 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/.

  • Announcements
  • Project updates
  • Task Coordination
  • Open Floor โ€“ extended edition.

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

  • If you have an update for the main site editing projects, please feel free to share 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,ย #coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress.-editor-agenda,ย #meeting, #core-editor

Real-Time Collaboration

This is part of the Phase 3: Collaboration roadmap. The main projects are Real-Time Collaboration, Workflows, Revisions, Media Library, Block Library, and Admin Design.

Introduction

The primary aim of real-time collaboration is to build functionality into 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. editors so that concurrent collaboration, shared edits, and online presence of peers are possible. Supporting these workflows is not just about concurrency, though, but also about lifting restrictions that have been present in WordPress for a long time, such as locking a post when two people try to edit at the same time. There are various technical layers underpinning this functionality, so letโ€™s quickly recap what they are and what we need to take into account to get started.

Animated mockup showing multiple users moving their cursors on a shared editor screen.

First, these 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). should be available to the widest possible audience. That means using technologies that donโ€™t rely on sophisticated server setups that would restrict the ability for people to collaborate within their WordPress sites, regardless of hosting infrastructure. This likely puts us on the path of building on top of open web standards like WebRTC where we can ensure deployment of these features without any special burdens on the backend. WordPress itself could provide an easy to scale signalling server, likely over REST endpoints, for authentication handshake.

However, we also want to ensure the system is flexible enough to extend with other server implementations for more advanced needs โ€” such as a WebSockets service โ€” in order to scale beyond current limits for peer-to-peer simultaneous browser connections, or for cases where peer connections cannot be established. This would naturally be 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. territory.

Outside of the peer sharing setup, we also need to establish the primitives for conflictconflict A conflict occurs when a patch changes code that was modified after the patch was created. These patches are considered stale, and will require a refresh of the changes before it can be applied, or the conflicts will need to be resolved. resolution that are going to be able to reason through our block data structures and orchestrate edits over time. For this purpose, itโ€™s likely Yjs will come in handy, which is an amazing open sourceOpen Source Open Source denotes software for which the original source code is made freely available and may be redistributed and modified. Open Source **must be** delivered via a licensing model, see GPL. library that implements conflict-free replicated data types (aka CRDTs) presented as shared types. This library has already been put to good success in most of the past explorations within the Gutenberg repo and related projects. The author of the library has also engaged directly in some of these iterations with suggestions and feedback. While it has worked pretty well with block data, it has not been paired with multi-entity documents yet. Furthermore, ongoing SQLite explorations might uncover other ideas and opportunities for wider offline-first experiences where CRDT needs to be handled at a different abstraction layer.

Scope

This is a summary of the broad tasks we need to look into:

  • Review all current explorations, their lessons and tradeoffs.
  • Outline the set of 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. necessary to encapsulate collaboration features over block editor providers, like sharing edits and peer state across browsers.
  • Ensure capabilities build on top 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. so that block authors donโ€™t need to make modifications for their blocks to work in collaborative environments.
  • Design and represent โ€œpresenceโ€ of connected peers in the interface. Integrate selection state with other useful parts of the interface, like the block list 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..
  • Lift concurrent editing restrictions. Right now WordPress locks a post to the current user that is editing it. Another user can take over, but it doesnโ€™t allow two users working on the same post at the same time.
  • Review undo / redo stacks and resolution. Itโ€™s likely some modifications are needed here.
  • If employing CRDT, ensure its designed to work with multi-entity documents, which is a newer requirement from Phase 2 compared to just Phase 1.
  • Employ peer caret and selection primitives that work across block types and design their semantic and visual representation.
  • Consider offline a first-class use case of collaboration in orchestrating edits and transactions.
  • Explore the possibility of โ€œfollowing a userโ€ as they work through a document.
  • Define authentication and messaging semantics. For example, the characteristics of a WebRTC handshake with a plain HTTPHTTP HTTP is an acronym for Hyper Text Transfer Protocol. HTTP is the underlying protocol used by the World Wide Web and this protocol defines how messages are formatted and transmitted, and what actions Web servers and browsers should take in response to various commands. 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/ request to the backend. Provide answers to questions like read only sessions over peer-to-peer connections and cases where peer-connections cannot be established.
  • Structure WebRTC implementation as an adapter that could be swapped. The architecture should be pluggable so extenders can provide other solutions.
  • Outline error scenarios and functional overlaps with offline-first capabilities. For example, peers losing a connection while still making edits. Weโ€™d want to employ this for same-user resolution should you be editing across different devices as a single user. Handle saving and revision allocation.

Get involved!

If you are interested in the challenges of real time collaboration or want to leave any feedback on the project, please chime in.

#gutenberg, #phase-3

Editor chat summary: June 28th, 2023

This post summarizes the weekly editor chat meeting (agenda for June 28th meeting) held on Wednesday, June 28th 2023, 03:00 PM GMT+1 in Slack. Moderated by @fabiankaegy.

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/ 16.1 was released. You can find out all the new things in the Whats new in Gutenberg 16.1 post.

WordPress 6.3 BetaBeta A pre-release of software that is given out to a large group of users to trial under real conditions. Beta versions have gone through alpha testing in-house and are generally fairly close in look, feel and function to the final product; however, design changes often occur as part of the process. 12. was released with a small delay due to an issue with how minified styles were getting generated. You learn more about how to help pest this release via the news article published about it.

Key project updates

Open Floor

@smrubenstein raised a PR they created that aims to stabilize the __experimentalDefaultBlock API of the Navigation Block. The PR is currently waiting for a review.

#core-editor, #core-editor-summary, #gutenberg, #meeting-notes, #summary