WordPress/wp-includes
hellofromTonya 9160482cf3 Code Modernization: Fix trigger_error() with E_USER_ERROR deprecation in wp_trigger_error().
PHP 8.4 deprecates the use of `trigger_errror()` with `E_USER_ERROR` as the error level, as there are a number of gotchas to this way of creating a `Fatal Error` (`finally` blocks not executing, destructors not executing). The recommended replacements are either to use exceptions or to do a hard `exit`.

WP has its own `wp_trigger_error()` function, which under the hood calls `trigger_error()`. If passed `E_USER_ERROR` as the `$error_level`, this will hit the PHP 8.4 deprecation.

Now, there were basically three options:
* Silence the deprecation until PHP 9.0 and delay properly solving this until then. This would lead to an awkward solution, as prior to PHP 8.0, error silencing would apply to all errors, while, as of PHP 8.0, it will no longer apply to fatal errors. It also would only buy us some time and wouldn't actually solve anything.

* Use `exit($status)` when `wp_trigger_error()` is called with `E_USER_ERROR`. This would make the code untestable and would disable handling of these errors via custom error handlers, which makes this an undesirable solution.

* Throw an exception when `wp_trigger_error()` is called with `E_USER_ERROR`. This makes for the most elegant solution with the least BC-breaking impact, though it does open it up to the error potential being "caught" via a `try-catch`. That's not actually a bad thing and is likely to only happen for those errors which can be worked around, in which case, it's a bonus that that's now possible.

The third option is implemented which:
* Introduces a new `WP_Exception` class.
* Starts using `WP_Exception` in the `wp_trigger_error()` function when the `$error_level` is set to `E_USER_ERROR`.

This change is covered by pre-existing tests, which have been updated to expect the exception instead of a PHP error.

Why not use `WP_Error`?

Well, for one, this would lead to completely different behaviour (BC).

As `WP_Error` doesn't extend `Exception`, the program would not be stopped, but would continue running, which would be a much bigger breaking change and carries security risks. `WP_Error` also doesn't natively trigger displaying/logging of the error message, so in that case, it would still need an `exit` with the error message, bringing us back to point 2 above.

Introducing `WP_Exception` provides (essentially) the same behaviour in that it retains the fatal error and error message displaying/logging behaviors. It also introduces a base Exception class, from which future exception classes can extend.

References:
* https://wiki.php.net/rfc/deprecations_php_8_4#deprecate_passing_e_user_error_to_trigger_error
* https://www.php.net/manual/en/migration80.incompatible.php

Follow-up to [56530].

Props jrf, hellofromTonya.
See #62061.
Built from https://develop.svn.wordpress.org/trunk@59107


git-svn-id: http://core.svn.wordpress.org/trunk@58503 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2024-09-27 19:28:14 +00:00
..
ID3
IXR Code Modernization: Remove xml_set_object() in IXR_Message::parse(). 2024-09-18 18:04:14 +00:00
PHPMailer
Requests
SimplePie
Text Code Modernization: Fix trigger_error() with E_USER_ERROR deprecation in Text_Diff_Op::reverse(). 2024-09-27 18:19:17 +00:00
assets Script Loader: Add `@wordpress/a11y` as a Script Module. 2024-09-25 16:51:16 +00:00
block-bindings
block-patterns Editor: Deprecate "Social links with a shared background color" pattern. 2024-09-13 05:37:16 +00:00
block-supports Block Styles: Ensure unique classname generation for variations 2024-08-29 05:41:10 +00:00
blocks Editor: Update packages for 6.7 Beta 1. 2024-09-23 06:52:26 +00:00
certificates
css Editor: Update packages for 6.7 Beta 1. 2024-09-23 06:52:26 +00:00
customize Administration: Modernize Site Icon UI in settings, customizer. 2024-08-23 22:47:16 +00:00
fonts
html-api HTML API: Switch to HTML namespace when entering Integration Points. 2024-09-27 00:44:19 +00:00
images
interactivity-api Revert [59097] because it was renaming a public method that should be deprecated instead. 2024-09-26 19:37:22 +00:00
js Script Loader: Add `@wordpress/a11y` as a Script Module. 2024-09-25 16:51:16 +00:00
l10n I18N: Add a new way to determine whether a translation is available. 2024-09-17 20:58:15 +00:00
php-compat
pomo
rest-api Editor: Add plugin template registration API and improve theme overrides for plugin-registered templates 2024-09-20 02:07:12 +00:00
sitemaps
sodium_compat Upgrade/Install: Add missing files from the sodium_compat v1.21.1 update. 2024-07-18 13:48:15 +00:00
style-engine Background: add background attachment support to theme.json styles 2024-07-31 02:41:16 +00:00
theme-compat
widgets Docs: Correct the placement of `@global` tags in various files. 2024-05-26 20:51:13 +00:00
admin-bar.php Docs: Add changing existing items recommendations to 'admin_bar_menu' action. 2024-09-03 19:58:11 +00:00
atomlib.php Code Modernization: Remove xml_set_object() in AtomParser::parse(). 2024-09-18 21:20:15 +00:00
author-template.php
block-bindings.php Docs: Correct alignment in `WP_Block_Bindings_Registry::register()` DocBlock. 2024-06-12 12:44:13 +00:00
block-editor.php Block Bindings: Adds sources in the editor settings to consume them in the client 2024-07-24 10:59:18 +00:00
block-i18n.json
block-patterns.php Editor: Deprecate "Social links with a shared background color" pattern. 2024-09-13 05:37:16 +00:00
block-template-utils.php Block Hooks: `apply_block_hooks_to_content` in Patterns, Templates. 2024-09-27 09:20:18 +00:00
block-template.php Editor: Add plugin template registration API and improve theme overrides for plugin-registered templates 2024-09-20 02:07:12 +00:00
blocks.php Block Hooks: `apply_block_hooks_to_content` in Patterns, Templates. 2024-09-27 09:20:18 +00:00
bookmark-template.php Date/Time, PHP Compat: Prevent type errors using GMT offset option. 2024-09-18 22:37:15 +00:00
bookmark.php
cache-compat.php
cache.php
canonical.php Docs: Correct inline comment formatting in `redirect_canonical()`. 2024-08-22 23:47:15 +00:00
capabilities.php Coding Standards: Use strict comparison in `wp-includes/capabilities.php`. 2024-09-08 19:18:17 +00:00
category-template.php
category.php
class-IXR.php
class-avif-info.php
class-feed.php
class-http.php
class-json.php
class-oembed.php
class-phpass.php External Libraries: Update PHPass library. 2024-09-17 21:08:16 +00:00
class-phpmailer.php
class-pop3.php Bootstrap/Load: Ensure uses of set_time_limit are documented why. 2024-09-17 22:41:13 +00:00
class-requests.php
class-simplepie.php
class-smtp.php
class-snoopy.php
class-walker-category-dropdown.php
class-walker-category.php
class-walker-comment.php
class-walker-nav-menu.php
class-walker-page-dropdown.php
class-walker-page.php
class-wp-admin-bar.php Toolbar: Move user and recovery menus to a higher priority. 2024-07-18 00:52:17 +00:00
class-wp-ajax-response.php
class-wp-application-passwords.php App Passwords: Don't prevent non-unique App Password names. 2024-09-24 16:40:17 +00:00
class-wp-block-bindings-registry.php Block Bindings: Adds context needed by sources during its processing 2024-09-23 12:35:15 +00:00
class-wp-block-bindings-source.php Block bindings: Adds a filter to customize the output of a block bindings source. 2024-09-03 16:33:15 +00:00
class-wp-block-editor-context.php
class-wp-block-list.php
class-wp-block-parser-block.php
class-wp-block-parser-frame.php Editor: Update packages for 6.7 Beta 1. 2024-09-20 01:55:35 +00:00
class-wp-block-parser.php
class-wp-block-pattern-categories-registry.php
class-wp-block-patterns-registry.php Block Hooks: `apply_block_hooks_to_content` in Patterns, Templates. 2024-09-27 09:20:18 +00:00
class-wp-block-styles-registry.php Editor: Improve types in docblock after [58246]. 2024-05-30 08:54:07 +00:00
class-wp-block-supports.php Editor: Default attribute value not used with `get_block_wrapper_attributes` 2024-09-26 12:47:16 +00:00
class-wp-block-template.php Editor: Add plugin template registration API and improve theme overrides for plugin-registered templates 2024-09-20 02:07:12 +00:00
class-wp-block-templates-registry.php Editor: Add plugin template registration API and improve theme overrides for plugin-registered templates 2024-09-20 02:07:12 +00:00
class-wp-block-type-registry.php
class-wp-block-type.php
class-wp-block.php Block bindings: Ensure block receives __default bindings when render. 2024-09-26 14:51:18 +00:00
class-wp-classic-to-block-menu-converter.php
class-wp-comment-query.php Docs: Document `$clauses` associative array in `*-clauses` filters. 2024-06-21 17:26:14 +00:00
class-wp-comment.php
class-wp-customize-control.php Administration: A11y: Replace placeholders with visible labels. 2024-05-14 16:49:09 +00:00
class-wp-customize-manager.php Editor: Respect `show_avatars` option in block editor and Customizer. 2024-09-22 22:50:18 +00:00
class-wp-customize-nav-menus.php Menus: Accessibility: Improve screen reader text for edit button. 2024-06-03 20:35:13 +00:00
class-wp-customize-panel.php
class-wp-customize-section.php
class-wp-customize-setting.php
class-wp-customize-widgets.php Administration: A11y: Replace placeholders with visible labels. 2024-05-14 16:49:09 +00:00
class-wp-date-query.php
class-wp-dependencies.php Script Loader: Refactor Etag generation for concatenated assets. 2024-08-25 23:48:13 +00:00
class-wp-dependency.php
class-wp-duotone.php Docs: Add missing full stop in `WP_Duotone` class method DocBlocks. 2024-06-14 12:18:11 +00:00
class-wp-editor.php Editor: A11y: Set ARIA attributes for Classic Editor link inserter. 2024-06-20 20:27:11 +00:00
class-wp-embed.php
class-wp-error.php
class-wp-exception.php Code Modernization: Fix trigger_error() with E_USER_ERROR deprecation in wp_trigger_error(). 2024-09-27 19:28:14 +00:00
class-wp-fatal-error-handler.php
class-wp-feed-cache-transient.php
class-wp-feed-cache.php
class-wp-hook.php
class-wp-http-cookie.php
class-wp-http-curl.php
class-wp-http-encoding.php
class-wp-http-ixr-client.php
class-wp-http-proxy.php
class-wp-http-requests-hooks.php
class-wp-http-requests-response.php
class-wp-http-response.php
class-wp-http-streams.php
class-wp-http.php Docs: Various docblock improvements and corrections. 2024-09-11 12:08:19 +00:00
class-wp-image-editor-gd.php Media: improve GD support detection for AVIF. 2024-06-03 20:27:12 +00:00
class-wp-image-editor-imagick.php Media: improve speed of AVIF image generation. 2024-09-17 23:29:29 +00:00
class-wp-image-editor.php Media: Automatically convert HEIC images to JPEG 2024-08-05 04:13:15 +00:00
class-wp-list-util.php
class-wp-locale-switcher.php
class-wp-locale.php Docs: Correct the placement of `@global` tags in various files. 2024-05-26 20:51:13 +00:00
class-wp-matchesmapregex.php
class-wp-meta-query.php
class-wp-metadata-lazyloader.php
class-wp-navigation-fallback.php
class-wp-network-query.php Docs: Document `$clauses` associative array in `*-clauses` filters. 2024-06-21 17:26:14 +00:00
class-wp-network.php Networks and Sites: Set `WP_Network` properties via setters upon creation. 2024-09-13 22:12:15 +00:00
class-wp-object-cache.php Coding Standards: Remove unused return value for `WP_Object_Cache::__set()`. 2024-09-19 12:12:16 +00:00
class-wp-oembed-controller.php
class-wp-oembed.php Embeds: Remove SlideShare embed block variation. 2024-06-07 23:15:16 +00:00
class-wp-paused-extensions-storage.php Options, Meta APIs: Explicitly pass `$autoload` parameter to when potentially adding new options. 2024-09-03 18:19:14 +00:00
class-wp-plugin-dependencies.php Plugin Dependencies: Ensure dependency detection for newly installed plugins. 2024-05-30 15:15:10 +00:00
class-wp-post-type.php Posts, Post Types: Remove now obsolete hardcoded `attachment` check for autosave support. 2024-05-27 15:24:13 +00:00
class-wp-post.php
class-wp-query.php Query: Add more context to the split_the_query filter. 2024-05-20 21:21:16 +00:00
class-wp-recovery-mode-cookie-service.php
class-wp-recovery-mode-email-service.php
class-wp-recovery-mode-key-service.php Options, Meta APIs: Explicitly pass `$autoload` parameter to when potentially adding new options. 2024-09-03 18:19:14 +00:00
class-wp-recovery-mode-link-service.php
class-wp-recovery-mode.php
class-wp-rewrite.php
class-wp-role.php
class-wp-roles.php Options, Meta APIs: Explicitly pass `$autoload` parameter to when potentially adding new options. 2024-09-03 18:19:14 +00:00
class-wp-script-modules.php Script Loader: Add `@wordpress/a11y` as a Script Module. 2024-09-25 16:51:16 +00:00
class-wp-scripts.php Code Quality: Clarify variable names in dependency classes. 2024-08-10 23:00:14 +00:00
class-wp-session-tokens.php
class-wp-simplepie-file.php
class-wp-simplepie-sanitize-kses.php
class-wp-site-query.php Docs: Various docblock improvements and corrections. 2024-09-11 12:08:19 +00:00
class-wp-site.php
class-wp-styles.php Code Quality: Clarify variable names in dependency classes. 2024-08-10 23:00:14 +00:00
class-wp-tax-query.php
class-wp-taxonomy.php
class-wp-term-query.php Taxonomy: Remove redundant `$taxonomies` value from cache keys used for `WP_Term_Query`. 2024-09-17 17:00:14 +00:00
class-wp-term.php
class-wp-text-diff-renderer-inline.php
class-wp-text-diff-renderer-table.php
class-wp-textdomain-registry.php Docs: Fix docblock alignment for `pre_get_language_files_from_path` filter. 2024-06-28 08:51:16 +00:00
class-wp-theme-json-data.php Editor: Add theme.json v3 migrations. 2024-06-04 11:55:14 +00:00
class-wp-theme-json-resolver.php Block themes: Enable block-level background image styles 2024-07-24 00:26:14 +00:00
class-wp-theme-json-schema.php Editor: code quality improvements for theme.json migrate API 2024-06-06 08:02:16 +00:00
class-wp-theme-json.php Background images: resolve theme.json dynamic ref values and ensure appropriate style default values 2024-08-26 05:40:16 +00:00
class-wp-theme.php Options, Meta APIs: Explicitly pass `$autoload` parameter to when potentially adding new options. 2024-09-03 18:19:14 +00:00
class-wp-token-map.php HTML API: Add PHP type annotations. 2024-07-19 23:44:16 +00:00
class-wp-user-meta-session-tokens.php
class-wp-user-query.php Docs: Add a note that the `who` parameter in `WP_User_Query` is deprecated. 2024-05-19 19:53:19 +00:00
class-wp-user-request.php
class-wp-user.php
class-wp-walker.php General: Cast `$max_depth` and `$depth` to an integer in the `Walker` class. 2024-07-26 07:56:13 +00:00
class-wp-widget-factory.php
class-wp-widget.php
class-wp-xmlrpc-server.php
class-wp.php Canonical: Redirect when front page's paginated states not found. 2024-09-25 19:37:19 +00:00
class-wpdb.php Code Modernization: handle mysqli_ping() deprecation in wpdb::check_connection(). 2024-09-19 18:56:16 +00:00
class.wp-dependencies.php
class.wp-scripts.php
class.wp-styles.php
comment-template.php Comments: Only type cast a scalar `$comment_id` in `get_comment_author_link()`. 2024-07-25 22:38:16 +00:00
comment.php Bootstrap/Load: Ensure uses of set_time_limit are documented why. 2024-09-17 22:41:13 +00:00
compat.php Bootstrap/Load: Give more context and warning about editing compat.php. 2024-09-17 23:50:12 +00:00
cron.php Options, Meta APIs: Explicitly pass `$autoload` parameter to when potentially adding new options. 2024-09-03 18:19:14 +00:00
date.php
default-constants.php Coding Standards: Use a human-readable constant in the check for max memory limit. 2024-08-26 20:57:13 +00:00
default-filters.php Build: Prepare for more Script Modules 2024-09-24 07:35:17 +00:00
default-widgets.php
deprecated.php Bootstrap/Load: Ensure uses of set_time_limit are documented why. 2024-09-17 22:41:13 +00:00
embed-template.php
embed.php Embeds: Add titles to alternate resource links for oEmbed and REST API. 2024-06-02 22:02:16 +00:00
error-protection.php
feed-atom-comments.php
feed-atom.php
feed-rdf.php
feed-rss.php
feed-rss2-comments.php
feed-rss2.php
feed.php Code Modernization: Use wp_trigger_error() instead of trigger_error(). 2024-06-13 20:50:14 +00:00
fonts.php Editor (Font Library): Store font subdirectory in post meta. 2024-06-05 23:19:17 +00:00
formatting.php Coding Standards: Replace an empty `foreach` loop in `wp_replace_in_html_tags()`. 2024-08-13 16:29:18 +00:00
functions.php Code Modernization: Fix trigger_error() with E_USER_ERROR deprecation in wp_trigger_error(). 2024-09-27 19:28:14 +00:00
functions.wp-scripts.php Docs: Correct the placement of `@global` tags in various files. 2024-05-26 20:51:13 +00:00
functions.wp-styles.php Docs: Correct the placement of `@global` tags in various files. 2024-05-26 20:51:13 +00:00
general-template.php Docs: Remove the `@ignore` tag for `_wp_render_title_tag()`. 2024-09-11 13:27:12 +00:00
global-styles-and-settings.php Block themes: Enable block-level background image styles 2024-07-24 00:26:14 +00:00
http.php Docs: Various docblock improvements and corrections. 2024-09-11 12:08:19 +00:00
https-detection.php
https-migration.php
kses.php KSES: Add `opacity` to the list of safe CSS properties. 2024-07-12 03:36:15 +00:00
l10n.php I18N: Add a new way to determine whether a translation is available. 2024-09-17 20:58:15 +00:00
link-template.php Comments: Pass $page as argument to comments functions 2024-09-23 12:50:15 +00:00
load.php Code Modernization: Simplify a conditional in `wp_is_ini_value_changeable()`. 2024-07-06 15:07:08 +00:00
locale.php
media-template.php Media: Implement fallback to full-size thumbnails for PDFs in Media Library. 2024-08-28 17:01:13 +00:00
media.php Media: Add auto sizes for lazy-loaded images. 2024-09-11 00:01:23 +00:00
meta.php Meta: Add label argument to register_meta function 2024-09-16 11:33:38 +00:00
ms-blogs.php
ms-default-constants.php Code Modernization: Use wp_trigger_error() instead of trigger_error(). 2024-06-13 20:50:14 +00:00
ms-default-filters.php
ms-deprecated.php
ms-files.php
ms-functions.php Options, Meta APIs: Explicitly pass `$autoload` parameter to when potentially adding new options. 2024-09-03 18:19:14 +00:00
ms-load.php
ms-network.php
ms-settings.php
ms-site.php Docs: Various docblock improvements and corrections. 2024-09-11 12:08:19 +00:00
nav-menu-template.php Coding Standards: Use strict comparison in `wp-includes/nav-menu-template.php`. 2024-05-09 15:16:14 +00:00
nav-menu.php Menus: Check if taxonomy term exists in `wp_update_nav_menu_item()`. 2024-08-05 19:00:19 +00:00
option.php Docs: Correct the first parameter name for the `pre_site_option_{$option}` filter. 2024-09-04 21:10:14 +00:00
pluggable-deprecated.php
pluggable.php Docs: Various docblock improvements and corrections. 2024-09-11 12:08:19 +00:00
plugin.php
post-formats.php Docs: Improve documentation for a few functions accepting a `WP_Post` object. 2024-05-27 16:29:16 +00:00
post-template.php Docs: Correct documentation for `the_password_form` hook. 2024-08-03 18:32:14 +00:00
post-thumbnail-template.php
post.php Docs: Add missing @since and @param annotations for the `edit_post_{$field}` hook doc. 2024-09-18 06:04:10 +00:00
query.php
registration-functions.php
registration.php
rest-api.php REST API: Allow posts to be published with a publication date of midnight 1970-01-01. 2024-09-17 23:24:12 +00:00
revision.php Docs: Correct documentation for `_wp_preview_meta_filter()`. 2024-07-15 01:59:16 +00:00
rewrite.php Docs: The `$feedname` parameter in `add_feed()` should not start with an underscore. 2024-09-18 19:08:11 +00:00
robots-template.php
rss-functions.php
rss.php Code Modernization: Remove xml_set_object() in MagpieRSS::__construct(). 2024-09-18 21:40:12 +00:00
script-loader.php Editor: Restore the merging of TinyMCE settings in `wp_tinymce_inline_scripts()`. 2024-09-20 14:09:18 +00:00
script-modules.php Build: Prepare for more Script Modules 2024-09-24 07:35:17 +00:00
session.php
shortcodes.php Docs: Update `pre_do_shortcode_tag` and `do_shortcode_tag` filter DocBlocks. 2024-05-25 03:04:12 +00:00
sitemaps.php
spl-autoload-compat.php
style-engine.php
taxonomy.php Docs: Further clarify return results for a non-existing ID in metadata functions. 2024-09-01 18:30:16 +00:00
template-canvas.php
template-loader.php
template.php
theme-i18n.json Themes: add "description" key to i18n schema 2024-07-02 23:25:18 +00:00
theme-previews.php
theme-templates.php
theme.json Editor: Fix specificity of core block style variations. 2024-06-12 06:11:13 +00:00
theme.php Options, Meta APIs: Explicitly pass `$autoload` parameter to when potentially adding new options. 2024-09-03 18:19:14 +00:00
update.php Upgrade/Install: Indicate HEIC support when checking upgrades. 2024-09-13 05:23:22 +00:00
user.php Docs: Further clarify return results for a non-existing ID in metadata functions. 2024-09-01 18:30:16 +00:00
vars.php
version.php Code Modernization: Fix trigger_error() with E_USER_ERROR deprecation in wp_trigger_error(). 2024-09-27 19:28:14 +00:00
widgets.php Docs: Correct the placement of `@global` tags in various files. 2024-05-26 20:51:13 +00:00
wp-db.php
wp-diff.php Code Modernization: Fix trigger_error() with E_USER_ERROR deprecation in Text_Diff::_check(). 2024-09-27 17:53:19 +00:00