Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/anatolykulikov/wp-custom-router
Класс для создания кастомного роутинга для WordPress
https://github.com/anatolykulikov/wp-custom-router
wordpress wordpress-development
Last synced: about 1 month ago
JSON representation
Класс для создания кастомного роутинга для WordPress
- Host: GitHub
- URL: https://github.com/anatolykulikov/wp-custom-router
- Owner: anatolykulikov
- Created: 2024-03-04T08:52:54.000Z (9 months ago)
- Default Branch: main
- Last Pushed: 2024-03-04T09:25:40.000Z (9 months ago)
- Last Synced: 2024-09-27T14:24:30.944Z (about 2 months ago)
- Topics: wordpress, wordpress-development
- Language: PHP
- Homepage:
- Size: 3.91 KB
- Stars: 4
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# WordPress CustomRoute
Класс для создания кастомного роутинга для различных задач:
- создания полноценных html-страниц без необходимости добавлять их в административной панели
- REST-like ответов в формате JSON
- имеет возможность проверять наличие авторизованного пользователя и возвращать объект данного пользователяВ классе `CustomRoute` имеются 3 функции:
- `parseRoute` - основная функция, которая проверяет текущий адрес запроса на вхождение и поддерживает указание переменных; возвращает пустой массив, если путь не удовлетворяет условию, или массив с параметрами, если данный путь прошёл проверку.
- `responseHtml` - возвращает ответ в формате html
- `responseJson` - возвращает ответ в формате jsonВ настоящее время `parseRoute` может работать только с латинскими строками (кириллическое написание пока не поддерживается).
Функции `responseHtml` и `responseJson` также устанавливают `http_response_code === 200` для того, чтобы ответ воспринимался как существующий адрес.
## Пример использования
Роуты указываются в файле `core.php`. Необходимо задать проверяемый путь (с указанием нужных переменных) и функцию-обработчик:
```php
add_action('wp', 'customRouter');
function customRouter()
{
global $wp;
switch (true) {case ($request = CustomRoute::parseRoute('magic-page/{value1}/{value2}', $wp->request)): {
CustomRoute::responseHtml(otherHandler($request['value1'], $request['value2']));
}case ($request = CustomRoute::parseRoute('any-action/{filter1}/{filter2}', $wp->request)): {
CustomRoute::responseJson(anotherHandler($request['filter1'], $request['filter2']));
}default: return null;
}
}
```Дополним пример функциями-обработчиками:
```phpfunction otherHandler(string $filter1, string $filter2): string
{
$user = wp_get_current_user();return(
'login: '. $user->user_login .'
' .
'filter1: '. $filter1 .'
' .
'filter2: '. $filter2 .'
'
);
}function anotherHandler(string $filter1, string $filter2): array
{
if(!is_user_logged_in()) return accessDeniedJson();$user = wp_get_current_user();
return [
'user' => [
'login' => $user->user_login,
'nicename' => $user->user_nicename,
'role' => current($user->roles)
],
'filter1' => $filter1,
'filter2' => $filter2
];
}function accessDeniedJson(): array
{
return [
'code' => 401,
'message' => 'access denied'
];
}
```Не забудьте подключить файл `core.php` в `functions.php`.