An open API service indexing awesome lists of open source software.

https://github.com/attributes-php/wp-exceptions

Don't feel sorry to interrupt. WordPress exceptions made simple.
https://github.com/attributes-php/wp-exceptions

Last synced: 5 months ago
JSON representation

Don't feel sorry to interrupt. WordPress exceptions made simple.

Awesome Lists containing this project

README

          

# WP Exceptions

Throw exceptions instead of returning WP_Error


GitHub Actions Workflow Status (main)
Code Coverage
Latest Version
Supported WordPress Versions
Software License

------
*WP_Error* was a cool feature in 2007 but today we should throw exceptions.

## Features

- Handles *HttpExceptions* like WP_Error's
- Supports custom handlers for custom exceptions
- Compatible with other exception handlers (e.g. [Whoops](https://github.com/filp/whoops))

## Requirements

- PHP 8.1+
- WordPress 6.x

We aim to support versions that haven't reached their end-of-life.

## Installation

```bash
composer require attributes-php/wp-exceptions
```

## How it works?

Once the ExceptionHandler is registered, you can start throwing exceptions

```php
use Attributes\Wp\Exceptions\ExceptionHandler;

ExceptionHandler::register();
```

How HttpExceptions are displayed?

WordPress itself handles how an HttpException
is displayed to the user. In a nutshell, those exceptions are converted into a WP_Error
which is then handled by WordPress via wp_die function.

This means, that the following types of requests are supported:

- ✅ Ajax
- ✅ JSON
- ✅ JSONP
- ✅ XMLRPC
- ✅ XML
- ✅ All other types e.g. HTML

How to send custom HTTP headers?

```php
throw new HttpException(headers: ['My-Header' => 'Value 123']);
```

How to add custom handlers?

```php
$exceptionHandler = ExceptionHandler::getOrCreate();
$exceptionHandler->onException(CustomException::class, fn($ex) => echo "A custom exception has been raised");
```

Ensure to add handlers which supports all types of possible requests e.g. JSON, XML, etc

Sage theme support

If you are using Sage theme, you would need to register or re-register
this exception handler after the application is configured. Otherwise, this exception handler might be overrided.

```php
// themes/sage/functions.php

Application::configure()
->withProviders([
App\Providers\ThemeServiceProvider::class,
])
->boot();

ExceptionHandler::register(force: true); // We are using force true in case the ExceptionHandler has been registered before e.g. in a plugin
```

WP Exceptions was created by **[André Gil](https://www.linkedin.com/in/andre-gil/)** and is open-sourced software licensed under the **[MIT license](https://opensource.org/licenses/MIT)**.