Make WordPress Core

Opened 16 months ago

Last modified 16 months ago

#57842 new enhancement

Add a new independent WP_Exception class, compatible with WP_Error

Reported by: junaidbhura's profile junaidbhura Owned by:
Milestone: Awaiting Review Priority: normal
Severity: normal Version:
Component: General Keywords: has-patch
Focuses: Cc:


Exceptions offer a better way of working with errors. Whilst we all appreciate WP_Error and how deeply integrated into WordPress it is, we should at least start to think about introducing an independent and official WP_Exception class.

I don't think I will need to elaborate the benefits Exceptions bring into modern development on this ticket.

Instead, perhaps we could use this ticket to discuss a way to officially introduce an Exception as a starting point.

Once this is accepted, we could then discuss the pros and cons of updating existing code to use this new exception in other tickets. But we should, at the very least, offer a standard Exception for developers to start implementing in their custom code bases and plugins.

I've created a super simple WP_Exception class which is compatible with WP_Error as a starting point. Happy to have a serious discussion on how best to improve this and get something like this merged into core.

Sample usage:

// Normal Exception.
try {
	throw new WP_Exception( 'error_code', 'Error message', $error_data );
} catch ( WP_Exception $e ) {

// To WP Error.
try {
} catch ( WP_Exception $e ) {
	return $e->to_wp_error(); // Returns a WP_Error based on the exception.

// From WP Error.
if ( is_wp_error( $thing ) ) {
	$exception = new WP_Exception();
	throw $exception->from_wp_error( $thing );

Attachments (1)

57842.patch (2.5 KB) - added by junaidbhura 16 months ago.

Download all attachments as: .zip

Change History (3)

16 months ago

#2 @benjgrolleau
16 months ago

That could be a great improvement. We need to modernize things that can be modernized into the core. I think this is a great way to start.

By doing it, we can use agnostics errors handlers (for example).
Thanks for your work 👌

Note: See TracTickets for help on using tickets.