Commit Graph
14058 Commits
Author SHA1 Message Date
Adam Silverstein a84270a1b0 Customizer: use the correct X-Robots-Tag header.
Fix an issue where the `X-Robots` header was used instead of the `X-Robots-Tag` header.  Using `X-Robots-Tag` yields the correct behavior that the original code intended to add. `X-Robots` is left in place for backward compatibility.

Props michelleblanchette, dhruvishah2203, rajinsharwar, jorbin, hztyfoon, elrae. 

Fixes #58865.



git-svn-id: https://develop.svn.wordpress.org/trunk@56462 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-24 20:48:40 +00:00
K. Adam White e82474c536 REST API: Remove misleading comment in WP_REST_Blocks_Controller->get_item_schema.
In r56093 schema caching was added above a comment instructing developers not to cache that controller's schema. However, there is no obvious penalty for re-caching schema that is partially derived from a parent.

Caching schema in the same way in every controller is beneficial consistency, and discussion at WCUS2023 contributor day concluded we could remove this comment.

Props ahardyjpl, davidbinda, johnjamesjacoby, TimothyBlynJacobs.

Fixes #59193. See #58657.


git-svn-id: https://develop.svn.wordpress.org/trunk@56459 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-24 20:21:35 +00:00
David Baumwald 095617ed94 Editor: Optimize wp_get_block_css_selector to remove array_merge calls for better performance.
Some block themes like TT3 use `wp_get_block_css_selector` to determine a CSS selector based on block type and other parameters.  However, recent performance profiling indicated a bottleneck in `wp_get_block_css_selector`, particularly sections that utilize `array_merge`.  By slightly refactoring these sections, `array_merge` calls can be avoided which increases performance.

Props mukesh27, joemcgill, daxelrod, tabrisrp.
Fixes #59178.

git-svn-id: https://develop.svn.wordpress.org/trunk@56457 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-24 19:57:15 +00:00
Anthony Burchell 0c82e15d72 Performance: Add fallback for $script_uri to prevent firing plugins_url() unnecessarily.
Previously, in `register_block_script_handle()` the `$script_uri` variable initialized with a `plugins_url()` call that was reported to invoke four times. In this patch the var is initialized as a blank string with a fallback to use the `plugins_url()` if the other intended conditions are not met.

Props mukesh27, daxelrod, adamsilverstein, davidbaumwald.
Fixes #59181.


git-svn-id: https://develop.svn.wordpress.org/trunk@56455 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-24 19:36:16 +00:00
John Blackbourn f435b0d272 Media: Add a filter to the get_available_post_mime_types() function to allow overriding its database query.
This introduces the `get_available_post_mime_types` filter so this query can be skipped or cached by plugins.

Props maciejmackowiak, archon810, rcorrales

Fixes #52759


git-svn-id: https://develop.svn.wordpress.org/trunk@56452 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-24 16:53:15 +00:00
Joe McGill c10caf93d5 Rewrite Rules: Prevent stampedes when flush_rewrite_rules() is called
This ensures that the `rewrite_rules` option is not emptied until the new value has been recalculated and the option is updated. The logic for refreshing the option value is moved to a new private method named `WP_Rewrite::refresh_rewrite_rules` which is used by both the `flush_rules` and `refresh_rewrite_rules` methods.

Props iCaleb, joemcgill, flixos90, mukesh27.
Fixes #58998.


git-svn-id: https://develop.svn.wordpress.org/trunk@56448 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-24 15:55:27 +00:00
flixos90 81423c3ea6 Options, Meta APIs: Introduce prime_options() to load multiple options with a single database request.
WordPress's `get_option()` function generally relies on making individual database requests for each option, however with the majority of options (in most cases) being autoloaded, i.e. fetched once with a single database request and then stored in (memory) cache.

As part of a greater effort to reduce the amount of options that are unnecessarily autoloaded, this changeset introduces an alternative way to retrieve multiple options in a performant manner, with a single database request. This provides a reasonable alternative for e.g. plugins that use several options which only need to be loaded in a few specific screens.

Specifically, this changeset introduces the following functions:
* `prime_options( $options )` is the foundation to load multiple specific options with a single database request. Only options that aren't already cached (in `alloptions` or an individual cache) are retrieved from the database.
* `prime_options_by_group( $option_group )` is a convenience wrapper function for the above which allows to prime all options of a specific option group (as configured via `register_setting()`).
* `get_options( $options )` is another wrapper function which first primes the requested options and then returns them in an associative array, calling `get_option()` for each of them.

Props mukesh27, joemcgill, costdev, olliejones.
Fixes #58962.


git-svn-id: https://develop.svn.wordpress.org/trunk@56445 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-24 14:40:01 +00:00
Sergey Biryukov f0ff124fe9 Coding Standards: Use strict comparison in wp-includes/ms-site.php.
Follow-up to [12603], [43548], [43654], [44472].

Props aristath, poena, afercia, SergeyBiryukov.
See #58831.

git-svn-id: https://develop.svn.wordpress.org/trunk@56438 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-24 11:17:06 +00:00
Jb Audras 07b5588a88 Docs: Use third-person singular verbs in various function descriptions, as per docblocks standards.
See #58833.




git-svn-id: https://develop.svn.wordpress.org/trunk@56435 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-24 09:06:52 +00:00
Jb Audras e7dd83bf97 Docs: Wrap inline @see tags in curly braces.
Props costdev, mukesh27.
Fixes #58858.
See #58833.




git-svn-id: https://develop.svn.wordpress.org/trunk@56434 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-24 08:59:36 +00:00
Jb Audras ef0e58bf0f Docs: Add missing @param description in WP_Comment class.
Props armondal, hztyfoon, SergeyBiryukov.
Fixes #58890.
See #58833.




git-svn-id: https://develop.svn.wordpress.org/trunk@56433 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-24 08:42:23 +00:00
Sergey Biryukov bf00a673a5 Coding Standards: Use strict comparison in wp-includes/ms-files.php.
Follow-up to [12603], [12936], [56395].

Props aristath, poena, afercia, SergeyBiryukov.
See #58831.

git-svn-id: https://develop.svn.wordpress.org/trunk@56430 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-23 15:51:12 +00:00
Sergey Biryukov 5a99ab468a Posts, Post Types: Remove redundant function calls in get_body_class().
As part of a previous change to add support for post type templates, the `$wp_query->get_queried_object_id()` method ended up being called twice, in both the `is_singular()` and `is_page()` conditional branches.

The `get_post()` function call was also unnecessary, as `$wp_query->get_queried_object()` is already called in the `is_singular()` branch above, which includes the `is_page()` branch too.

This commit removes the redundant calls. The first `$wp_query->get_queried_object_id()` call is removed as well, since the post ID is already available via `$wp_query->get_queried_object()`.

Follow-up to [10485], [10877], [12877], [13032], [21597], [38951].

Props mattkeys, spacedmonkey, oglekler.
Fixes #43661.

git-svn-id: https://develop.svn.wordpress.org/trunk@56424 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-22 12:28:52 +00:00
Tonya Mork 17e9e69bb6 Editor: Fix error handling of converting classic to block menus.
Fixes the error handling for when `WP_Classic_To_Block_Menu_Converter::convert()` returns an instance of `WP_Error`. `WP_Navigation_Fallback::create_classic_menu_fallback()` now checks for `is_wp_error()` and if `true`, returns the error. And the `@return` type is updated to `string|WP_Error`.

Also includes a fix in the return type in `WP_Classic_To_Block_Menu_Converter::convert()` to return an empty string instead of an array instead, i.e. when bailing out for no menu items returned by `wp_get_nav_menu_items()`. The return type is clearly documented as a `string`.

Follow-up to [56052].

Props dlh, get_dave, antonvlasenko, hellofromTonya.
Fixes #58823.

git-svn-id: https://develop.svn.wordpress.org/trunk@56422 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-21 17:49:09 +00:00
Isabel Brison cfe5a1e0a8 Editor: update npm packages with critical bug fixes for 6.3.1.
Includes fixes for footnotes and editor styles related crashes, as well as a cut and paste-related crash.

Props ramonopoly.
See #59151.


git-svn-id: https://develop.svn.wordpress.org/trunk@56419 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-19 23:20:25 +00:00
Sergey Biryukov 5d466a4d4a Docs: Correct punctuation in some instances of the $crop parameter description.
Follow-up to [56416].

See #58833.

git-svn-id: https://develop.svn.wordpress.org/trunk@56418 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-19 00:08:32 +00:00
John Blackbourn dde16aab1c Media: Standardise documentation of the $crop parameter for various media functions and methods.
See #58833


git-svn-id: https://develop.svn.wordpress.org/trunk@56416 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-18 17:54:41 +00:00
John Blackbourn 9bb4369bc1 REST API: Correct the docblocks for various permission related methods.
See #58833


git-svn-id: https://develop.svn.wordpress.org/trunk@56415 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-18 17:44:29 +00:00
John Blackbourn 7aee3d35fb Docs: Miscellaneous docblock corrections and improvements.
See #58833


git-svn-id: https://develop.svn.wordpress.org/trunk@56414 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-18 17:27:16 +00:00
André 9110074a20 Themes: add wp_get_theme_data_custom_templates function.
Adds a new public function, `wp_get_theme_data_custom_templates` that returns the `customTemplates` defined by the active theme from `theme.json`. It also substitutes the usage of private APIs by this new 
API.

Props johnbillion, audrasjb.
Fixes #59137



git-svn-id: https://develop.svn.wordpress.org/trunk@56413 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-18 13:20:56 +00:00
André e42bd867bc Add missing @ to the return tag in the wp_get_theme_data_template_parts function.
Props audrasjb, johnbillion.
Fixes #59003



git-svn-id: https://develop.svn.wordpress.org/trunk@56412 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-18 13:16:13 +00:00
Weston Ruter 2bd2a2fe84 Editor: Ensure defer loading strategy is only applied to a block's viewScript.
Amends [56398].
Props gziolo, westonruter.
Fixes #59115.


git-svn-id: https://develop.svn.wordpress.org/trunk@56403 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-17 16:37:46 +00:00
Weston Ruter 5fab140511 Editor: Use defer loading strategy for block view scripts.
Props westonruter, joemcgill.
Fixes #59115.


git-svn-id: https://develop.svn.wordpress.org/trunk@56398 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-16 00:13:45 +00:00
Sergey Biryukov 25443d3a7f Coding Standards: Bring more consistency to Last-Modified and ETag checks.
This updates two fragments for sending a `304 Not Modified` header to better align with each other by using consistent variable names and formatting. 

Follow-up to [1036], [1037], [1043], [2534], [2584], [2627], [12603], [12936], [56362].

See #58831.

git-svn-id: https://develop.svn.wordpress.org/trunk@56395 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-13 10:29:04 +00:00
Sergey Biryukov 6929fd876f Coding Standards: Use strict comparison in wp-includes/cron.php.
Includes minor code layout fixes for better readability.

Follow-up to [3634], [4189].

Props aristath, poena, afercia, SergeyBiryukov.
See #58831.

git-svn-id: https://develop.svn.wordpress.org/trunk@56394 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-12 12:00:27 +00:00
Jonathan Desrosiers 0c96ba106c External Libraries: Update imagesLoaded to version 5.0.0.
This release drops support for IE and moves to using ES6.

A full list of changes can be found on GitHub: https://github.com/desandro/imagesloaded/compare/v4.1.4...v5.0.0.

Props nazsabuz, arnedb, costdev, audrasjb, ahmedgeek , valmedia2023 , hareesh-pillai.
Fixes #56731.

git-svn-id: https://develop.svn.wordpress.org/trunk@56393 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-11 18:16:25 +00:00
Jonathan Desrosiers 5fa0387707 External Libraries: Update Backbone.js to version 1.5.0.
This release contains bug fixes and documentation improvements.

A full list of changes can be found on GitHub: https://github.com/jashkenas/backbone/compare/1.4.1...1.5.0.

Props rajinsharwar, hareesh-pillai.
Fixes #58930.

git-svn-id: https://develop.svn.wordpress.org/trunk@56391 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-11 16:10:38 +00:00
Jonathan Desrosiers dd764d3fe6 Build/Test Tools: Update all build tool related dependencies.
This updates the following dependencies to their latest versions:
- `chalk`
- `cssnano`
- `dotenv`
- `grunt-contrib-cssmin`
- `grunt-contrib-qunit`
- `grunt-webpack`
- `jest-image-snapshot`
- `postcss`
- `sass`
- `sinon`
- `webpack`

Additionally, `npm audit fix` has been run to automatically fix as many issues as possible.

See #58863.

git-svn-id: https://develop.svn.wordpress.org/trunk@56390 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-11 16:02:43 +00:00
Jonathan Desrosiers 0ca83e91ab External Libraries: Update the whatwg-fetch polyfill library.
This updates the `whatwg-fetch` library from version `3.6.2` to `3.6.17`, the latest current version.

This library is included and registered within WordPress as the `wp-polyfill-fetch` script and is no longer used by WordPress itself.

Props rajinsharwar, hareesh-pillai.
Fixes #59066.

git-svn-id: https://develop.svn.wordpress.org/trunk@56389 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-11 14:42:58 +00:00
Sergey Biryukov 27da228e90 Docs: Correct duplicate hook reference for wp_min_priority_img_pixels.
The original filter location is `wp_maybe_add_fetchpriority_high_attr()` in `wp-includes/media.php`.

This commit updates the instance in `wp_get_loading_optimization_attributes()` to point to the correct file.

Follow-up to [56037], [56143], [56347].

Props tmatsuur, rajinsharwar, khokansardar.
Fixes #59067.

git-svn-id: https://develop.svn.wordpress.org/trunk@56386 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-11 11:33:27 +00:00
André 92521d79e3 Themes: add wp_get_theme_data_template_parts function.
Adds a new public function, `wp_get_theme_data_template_parts` that returns the `templateParts` defined by the active theme from `theme.json`. It also substitutes the usage of private APIs by this new API.

Props felixarntz.
Fixes #59003


git-svn-id: https://develop.svn.wordpress.org/trunk@56385 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-11 11:22:54 +00:00
Felix Arntz bb6de6b8c0 Editor: Simplify usage of block_has_support() function by supporting a string.
Most block feature checks are for a single feature string, and for such cases it is not intuitive to require an array for the `$feature` parameter of the `block_has_support()` function.

This changeset brings it in line with other functions like `post_type_supports()`, allowing to pass a string for the `$feature`. An array is still supported for more complex cases where support for sub-features needs to be determined. This change furthermore includes a very minor performance tweak by avoiding calls to the `_wp_array_get()` function if a single feature string is being checked for.

Props thekt12, nihar007, mukesh27, swissspidy.
Fixes #58532.


git-svn-id: https://develop.svn.wordpress.org/trunk@56382 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-10 16:47:00 +00:00
Sergey Biryukov e5b586bfd0 Users: Correct the logic for switch_to_blog() in WP_User_Query::generate_cache_key().
If `$blog_id` equals `0`, it should be treated as the current site ID, and there is no need to switch to a different site.

This commit prevents an unnecessary call to `switch_to_blog()` on single site to avoid a fatal error when using `'orderby' => 'post_count'` and the deprecated `'who' => 'authors'` parameter:
{{{
Uncaught Error: Call to undefined function switch_to_blog() in wp-includes/class-wp-user-query.php:1077
}}}

Follow-up to [55657].

Props dd32, austinginder, RavanH, mukesh27.
Fixes #59011.

git-svn-id: https://develop.svn.wordpress.org/trunk@56381 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-10 10:24:29 +00:00
Bernie Reiter 37b145a0e4 HTML API: Add support for BUTTON element.
This patch adds support to process the BUTTON element. This requires adding some additional semantic rules to handle situations where a BUTTON element is already in scope.

Also included is a fixup to enforce that `WP_HTML_Processor::next_tag()` never returns for a tag closer. This is useful with the Tag Processor, but not for the HTML Processor. There were tests relying on this behavior to assert that internal processes were working as they should, but those tests have been updated to use the semi-private `step()` function, which does stop on tag closers.

This patch is one in a series of changes to expand support within the HTML API, moving gradually to allow for more focused changes that are easier to review and test. The HTML Processor is a work in progress with a certain set of features slated to be ready and tested by 6.4.0, but it will only contain partial support of the HTML5 specification even after that. Whenever it cannot positively recognize and process its input it bails, and certain function stubs and logical stubs exist to structure future expansions of support.

Props dmsnell.
Fixes #58961.

git-svn-id: https://develop.svn.wordpress.org/trunk@56380 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-10 08:35:55 +00:00
Sergey Biryukov d4b496acab Docs: Remove @see references for SimplePie classes.
As SimplePie is an external library, these classes are not parsed for the WordPress Code Reference, so the `@see` tags were linking to non-existing pages.

Follow-up to [38112].

Props crstauf.
Fixes #59030.

git-svn-id: https://develop.svn.wordpress.org/trunk@56379 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-10 01:04:35 +00:00
Jonathan Desrosiers 429de7ae77 Build/Test Tools: Bump the required versions of Node.js and npm.
This changes the minimum required version of Node.js to 16.19.1, and npm to 8.19.3.

Node.js 14.x reached end of life on April 30, 2023. While 18.x is the currently active LTS version, it can’t yet be used due to a systems level constraint on the build server. 

Updating further will be considered once this blocker is resolved.

Gutenberg has also been updated to follow the same version requirements for consistency.

Props youknowriad, gziolo, swissspidy, kevin940726, desrosj.
Fixes #56658.

git-svn-id: https://develop.svn.wordpress.org/trunk@56378 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-09 18:52:42 +00:00
Sergey Biryukov b1d59267af Coding Standards: Use strict comparison in wp-includes/kses.php.
Follow-up to [649], [2896], [3418], [8386], [20540], [47219], [54933].

Props aristath, poena, afercia, SergeyBiryukov.
See #58831.

git-svn-id: https://develop.svn.wordpress.org/trunk@56377 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-09 10:59:04 +00:00
Aaron Jorbin f7fbd0c25f HTML API: Fix missing * for docblock.
Follow up to [56363].

Props dmsnell.
See #58918. Fixes #59010.


git-svn-id: https://develop.svn.wordpress.org/trunk@56376 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-08 22:59:52 +00:00
Felix Arntz 79a36ded52 Options, Meta APIs: Expand $autoload parameter documentation.
This changeset expands documentation of the `$autoload` parameter of the `add_option()` and `update_option()` functions, in order to provide more context on what autoloading is and which considerations should go into the decision whether to autoload an option.

Excessive autoloading of options can lead to severe performance problems on some sites, and lack of documentation is a partial cause for the issue.

Props rajinsharwar.
Fixes #58963.


git-svn-id: https://develop.svn.wordpress.org/trunk@56370 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-07 19:31:13 +00:00
Bernie Reiter c96b089ec7 HTML API: Adjust code styling to Gutenberg's linter's preferences.
Adjust the code style according to the rules that the linting process in Gutenberg requires.

There are only a couple code changes that should have no effect on the runtime:
 - A missing check to verify that only `UTF-8` is supported has been added (brought up because it was identified as an undefined variable).
 - A few `return false;` statements have been added to avoid having the linter complain that functions don't return a value despite indicating they return `bool`. The functions are stubs for coming support and currently `throw`, so the `return` statements are unreachable.

Props dmsnell, costdev, davidbaumwald, peterwilsoncc, SergeyBiryukov.
Fixes #58918.

git-svn-id: https://develop.svn.wordpress.org/trunk@56363 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-07 13:48:55 +00:00
Sergey Biryukov 4a0712a0c2 Coding Standards: Use strict comparison in wp-includes/class-wp.php.
Includes minor code layout fixes for better readability.

Follow-up to [1043], [2534], [2584], [2627], [2958], [3252], [3564], [21818], [37356].

Props aristath, poena, afercia, SergeyBiryukov.
See #58831.

git-svn-id: https://develop.svn.wordpress.org/trunk@56362 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-07 09:59:20 +00:00
Sergey Biryukov b4cfea6f4e Coding Standards: Use strict comparison in wp-includes/class-wp-image-editor.php.
Follow-up to [22094].

Props aristath, poena, afercia, SergeyBiryukov.
See #58831.

git-svn-id: https://develop.svn.wordpress.org/trunk@56361 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-06 12:50:42 +00:00
Sergey Biryukov fd846534b6 Coding Standards: Rewrite loose comparison in wp_list_categories().
A truthy check is more in line with similar checks elsewhere, including conditionals in the same exact code block.

Follow-up to [10275], [34696].

Props aristath, poena, afercia, SergeyBiryukov.
See #58831.

git-svn-id: https://develop.svn.wordpress.org/trunk@56360 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-05 14:00:56 +00:00
Sergey Biryukov 847328068d Coding Standards: Use strict comparison in wp-includes/revision.php.
Follow-up to [24414], [38118], [38433].

Props aristath, poena, afercia, SergeyBiryukov.
See #58831.

git-svn-id: https://develop.svn.wordpress.org/trunk@56359 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-04 11:56:16 +00:00
Felix Arntz 470911715d Themes: Avoid unnecessary check whether parent template file exists when not using a child theme.
Prior to this change, the `locate_template()` function would unconditionally check whether the relevant template file exists in the parent theme, which for sites not using a child theme is an exact duplicate of the previous check. This is wasteful and has a small impact on performance since `file_exists()` checks have a cost.

Props nihar007, thekt12, spacedmonkey, mukesh27.
Fixes #58576.


git-svn-id: https://develop.svn.wordpress.org/trunk@56357 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-03 20:29:12 +00:00
Weston Ruter 1fc10c92a2 Script Loader: Use defer loading strategy for wp-embed script and move to head (in block themes).
Props westonruter, flixos90, swissspidy.
Fixes #58931.


git-svn-id: https://develop.svn.wordpress.org/trunk@56355 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-03 19:20:36 +00:00
Tonya Mork 5b5d174a30 Code Modernization: Deprecate dynamic properties in WP_Text_Diff_Renderer_Table magic methods.
The unknown use of unknown dynamic property within the `WP_Text_Diff_Renderer_Table` property magic methods is now deprecated. A descriptive deprecation notice is provided to alert developers to declare the property on the child class extending `WP_Text_Diff_Renderer_Table`.

Changes in this commit:
* Adds a deprecation notice to the `__get()`, `__set()`, `__isset()`, `__unset()` magic methods, i.e. to alert and inform developers when attempting to get/set/isset/unset a dynamic property.
* Fixes `__get()` to explicitly returns `null` when attempting to get a dynamic property.
* Fixes `__set()` by removing the value return after setting a declared property, as (a) unnecessary and (b) `__set()` should return `void` [https://www.php.net/manual/en/language.oop5.overloading.php#object.set per the PHP handbook].
* Fixes `__isset()` to return `false` if not in the `$compat_fields`, as `isset()` and `__isset()` should always return `bool`:
   * [https://www.php.net/manual/en/language.oop5.overloading.php#object.isset `__isset()` in the PHP manual] 
   * [https://www.php.net/manual/en/function.isset.php `isset()` in the PHP manual] 
* Adds a test class with happy and unhappy paths for these changes.

For backward compatibility, no changes are made to the internal declared properties listed in `$compat_fields` and accessed through the magic methods. 

For example:
A child class uses a property named `$data` that is not declared as a property on the child class. When getting its value, e.g. `$user_query->data`, the `WP_Text_Diff_Renderer_Table::__get()` magic method is invoked, the following deprecation notice thrown, and `null` returned:

>The property `data` is not declared. Setting a dynamic property is deprecated since version 6.4.0! Instead, declare the property on the class.

=== Why not remove the magic methods, remove the `$compat_fields` property, and restore the properties `public`?

tl;dr Backward compatibility.

If a plugin adds a property to `$compat_fields` array, then sites using that plugin would experience (a) an `Undefined property` `Warning` (PHP 8) | `Notice` (PHP 7) and (b) a possible change in behavior.

=== Why not limit the deprecation for PHP versions >= 8.2?

tl;dr original design intent and inform

The magic methods and `$compat_fields` property were added for one purpose: to continue providing external access to internal properties declared on `WP_Text_Diff_Renderer_Table`. They were not intended to be used for dynamic properties.

Deprecating that unintended usage both alerts developers a change is needed in their child class and informs them what to change.

References: 
* Dynamic (non-explicitly declared) properties are deprecated as of PHP 8.2 and are expected to become a fatal error in PHP 9.0.
* A [https://www.youtube.com/live/vDZWepDQQVE?feature=share&t=10097 live open public working session] where these changes were discussed and agreed to.
* [https://wiki.php.net/rfc/deprecate_dynamic_properties PHP RFC: Deprecate dynamic properties.]

Follow-up to [28525], [31135].

Props antonvlasenko, rajinsharwar, jrf, markjaquith, hellofromTonya, SergeyBiryukov, desrosj, peterwilsoncc, audrasjb, costdev, oglekler, jeffpaul.
Fixes #58898.
See #56034.

git-svn-id: https://develop.svn.wordpress.org/trunk@56354 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-03 18:11:36 +00:00
Tonya Mork 6fe193ce54 Code Modernization: Deprecate dynamic properties in WP_User_Query magic methods.
The unknown use of unknown dynamic property within the `WP_User_Query` property magic methods is now deprecated. A descriptive deprecation notice is provided to alert developers to declare the property on the child class extending `WP_User_Query`.

Changes in this commit:
* Adds a deprecation notice to the `__get()`, `__set()`, `__isset()`, `__unset()` magic methods, i.e. to alert and inform developers when attempting to get/set/isset/unset a dynamic property.
* Fixes `__get()` to explicitly returns `null` when attempting to get a dynamic property.
* Fixes `__set()` by removing the value return after setting a declared property, as (a) unnecessary and (b) `__set()` should return `void` [https://www.php.net/manual/en/language.oop5.overloading.php#object.set per the PHP handbook].
* Fixes `__isset()` to return `false` if not in the `$compat_fields`, as `isset()` and `__isset()` should always return `bool`:
   * [https://www.php.net/manual/en/language.oop5.overloading.php#object.isset `__isset()` in the PHP manual] 
   * [https://www.php.net/manual/en/function.isset.php `isset()` in the PHP manual] 
* Adds unit tests for happy and unhappy paths.

For backward compatibility, no changes are made to the internal declared properties listed in `$compat_fields` and accessed through the magic methods. 

For example:
A child class uses a property named `$data` that is not declared as a property on the child class. When getting its value, e.g. `$user_query->data`, the `WP_User_Query::__get()` magic method is invoked, the following deprecation notice thrown, and `null` returned:

>The property `data` is not declared. Setting a dynamic property is deprecated since version 6.4.0! Instead, declare the property on the class.

=== Why not remove the magic methods, remove the `$compat_fields` property, and restore the properties `public`?

tl;dr Backward compatibility.

If a plugin adds a property to `$compat_fields` array, then sites using that plugin would experience (a) an `Undefined property` `Warning` (PHP 8) | `Notice` (PHP 7) and (b) a possible change in behavior.

=== Why not limit the deprecation for PHP versions >= 8.2?

tl;dr original design intent and inform

The magic methods and `$compat_fields` property were added for one purpose: to continue providing external access to internal properties declared on `WP_User_Query`. They were not intended to be used for dynamic properties.

Deprecating that unintended usage both alerts developers a change is needed in their child class and informs them what to change.

References: 
* Dynamic (non-explicitly declared) properties are deprecated as of PHP 8.2 and are expected to become a fatal error in PHP 9.0.
* A [https://www.youtube.com/live/vDZWepDQQVE?feature=share&t=10097 live open public working session] where these changes were discussed and agreed to.
* [https://wiki.php.net/rfc/deprecate_dynamic_properties PHP RFC: Deprecate dynamic properties.]

Related to #14579, #27881, #30891.

Follow-up to [15491], [28528], [31144].

Props antonvlasenko, rajinsharwar, jrf, markjaquith, hellofromTonya, SergeyBiryukov, desrosj, peterwilsoncc, audrasjb, costdev, oglekler, jeffpaul.
Fixes #58897.
See #56034.

git-svn-id: https://develop.svn.wordpress.org/trunk@56353 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-03 16:25:25 +00:00
Sergey Biryukov b92491b8d2 Coding Standards: Use instanceof keyword instead of the is_a() function.
This is a micro-optimization that removes a few unnecessary function calls.

Follow-up to [31188], [34369], [38986], [41159], [43211], [43230], [44606], [45757].

Props ayeshrajans, jrf, rajinsharwar, costdev, mukesh27, SergeyBiryukov.
Fixes #58943.

git-svn-id: https://develop.svn.wordpress.org/trunk@56352 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-03 12:08:30 +00:00
Felix Arntz 02f9f1ea95 Media: Simplify logic in wp_get_loading_optimization_attributes().
While the `wp_get_loading_optimization_attributes()` function was only recently introduced in 6.3, its code was mostly ported over from the now deprecated `wp_get_loading_attr_default()` function introduced in 5.5.

That function started out in a simple way, but over time was expanded with more and more conditionals on when to avoid lazy-loading, which ended up making the logic extremely complex and hard to follow.

This changeset refactors the logic to simplify it, in a way that allows to follow it more sequentially, and without making any functional changes, ensuring that the extensive existing unit test coverage still passes. This will facilitate future enhancements to the function to be less error-prone and make it more accessible to new contributors.

Props flixos90, joemcgill.
Fixes #58891.


git-svn-id: https://develop.svn.wordpress.org/trunk@56347 602fd350-edb4-49c9-b593-d223f7449a82
2023-08-02 17:56:16 +00:00