https://github.com/morning-train/wp-async
Async Task handling for WordPress
https://github.com/morning-train/wp-async
async php wordpress wp
Last synced: over 1 year ago
JSON representation
Async Task handling for WordPress
- Host: GitHub
- URL: https://github.com/morning-train/wp-async
- Owner: Morning-Train
- Created: 2023-03-30T09:03:10.000Z (about 3 years ago)
- Default Branch: master
- Last Pushed: 2023-09-15T12:11:27.000Z (almost 3 years ago)
- Last Synced: 2025-02-09T01:16:11.458Z (over 1 year ago)
- Topics: async, php, wordpress, wp
- Language: PHP
- Size: 8.79 KB
- Stars: 0
- Watchers: 4
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Morningtrain\WP\Async
Async task handler for WordPress
## Table of Contents
- [Introduction](#introduction)
- [Getting Started](#getting-started)
- [Installation](#installation)
- [Usage](#usage)
- [Register Worker](#register-worker)
- [Create a Task](#create-a-task)
- [Dispatch Async Task](#dispatch-async-task)
- [Dispatch Blocking Task](#dispatch-blocking-task)
- [Contributing](#contributing)
- [Contributors](#contributors)
- [Testing](#testing)
- [License](#license)
## Introduction
This package is made to dispatch task asyncronely to a new thread.
## Getting started
To get started install the package as described below in [Installation](#installation).
To use the package have a look at [Usage](#usage)
### Installation
Install with composer.
```composer require morningtrain/wp-async```
## Usage
### Register Worker
To get started with the module simply register a worker `\Morningtrain\WP\Async\Async::registerWorker()`.
```php
\Morningtrain\WP\Async\Async::registerWorker();
```
### Create a Task
Jobs can be created by extending `Morningtrain\WP\Async\Abstracts\AbstractAsyncTask` and create a static `handle` method.
```php
use Morningtrain\WP\Async\Abstracts\AbstractAsyncTask;
class TestTask extends AbstractAsyncTask {
public static function handle($arg1, $arg2) {
// Do something;
return "$arg1 $arg2";
}
}
```
### Dispatch Async Task
You can dispatch a async task by caling the static method `dispatch` on your task class.
This will run the task asyncronely whitout waiting for response.
```php
TestTask::dispatch('arg1', 'arg2');
```
### Dispatch Blocking Task
You can dispatch a blocking task by caling the static method `dispatchBlocking` on your task class.
This will run the task in a new thread, and wait for response.
```php
TestTask::dispatchBlocking('arg1', 'arg2');
```
#### Timeout
There will be a timout after 5 seconds on blocking task.
If you need more time to handle your blocking task, you should overwrite the `dispatchBlocking` method on your task class.
You can call the `dispatchBlockingTask` method on the worker with timeout in second as third parameter.
```php
public static function dispatchBlocking(mixed ...$params) :array|WP_Error
{
return static::getWorker()->dispatchBlockingTask(static::getCallback(), $params, 30);
}
```
#### Error handling
You can return a `WP_Error` object from your task, and it will be returned as status 400 with the wp error info.
```php
use Morningtrain\WP\Async\Abstracts\AbstractAsyncTask;
class TestTask extends AbstractAsyncTask {
public static function handle($arg1, $arg2) {
// Do something;
$somethingWentWrong = true;
if ($somethingWentWrong) {
return new \WP_Error('something_went_wrong', 'Something went wrong');
}
return "$arg1 $arg2";
}
}
```
You can also throw a Throwable (Exception), and it will be returned as status 500 with the exception message.
```php
use Morningtrain\WP\Async\Abstracts\AbstractAsyncTask;
use Exception;
class TestTask extends AbstractAsyncTask {
public static function handle($arg1, $arg2) {
// Do something;
$somethingWentWrong = true;
if ($somethingWentWrong) {
throw new Exception('Something went wrong');
}
return "$arg1 $arg2";
}
}
```
Alternatively you can return your own json response, if you need another response code.
```php
use Morningtrain\WP\Async\Abstracts\AbstractAsyncTask;
class TestTask extends AbstractAsyncTask {
public static function handle($arg1, $arg2) {
if (!current_user_can('manage_options')) {
wp_send_json_error('You are not allowed to do this!', 401);
exit;
}
// Do something;
return "$arg1 $arg2";
}
}
```
## Contributing
Thank you for your interest in contributing to the project.
### Bug Report
If you found a bug, we encourage you to make a pull request.
To add a bug report, create a new issue. Please remember to add a telling title, detailed description and how to reproduce the problem.
### Support Questions
We do not provide support for this package.
### Pull Requests
1. Fork the Project
2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
3. Commit your Changes (git commit -m 'Add some AmazingFeature')
4. Push to the Branch (git push origin feature/AmazingFeature)
5. Open a Pull Request
## Contributors
- [Martin Schadegg Brønniche](https://github.com/mschadegg)
- [All Contributors](../../contributors)
## License
The MIT License (MIT). Please see [License File](LICENSE) for more information.
---
Developed by