WordPress REST API — мощный инструмент для создания современных веб-приложений и интеграций. Часто возникает задача не просто получить записи или данные, а сделать это с учетом определённых фильтров и параметров. В этой статье разберём, как создавать собственные REST API маршруты с поддержкой фильтров, параметров запроса и как безопасно обрабатывать такие запросы.
Основы создания пользовательского REST API маршрута в WordPress
Для начала нужно зарегистрировать свой REST API маршрут через хук rest_api_init. В функции регистрации мы определим путь, метод и callback-функцию, которая будет отвечать на запрос.
Пример регистрации маршрута с фильтрами:
add_action('rest_api_init', function() {
register_rest_route('wpblock/v1', '/posts/', [
'methods' => 'GET',
'callback' => 'wpblock_get_filtered_posts',
'args' => [
'category' => [
'required' => false,
'validate_callback' => 'is_string',
],
'author' => [
'required' => false,
'validate_callback' => 'is_numeric',
],
'per_page' => [
'required' => false,
'default' => 10,
'validate_callback' => function($param) {
return is_numeric($param) && $param > 0 && $param <= 100;
},
],
],
]);
});Здесь мы создаём маршрут /wpblock/v1/posts/, который принимает параметры фильтрации: category, author, per_page. Параметры валидируются для безопасности.
Обработка запроса и фильтрация данных
Функция-обработчик принимает объект WP_REST_Request, из которого удобно получать параметры и работать с ними.
function wpblock_get_filtered_posts(WP_REST_Request $request) {
$category = $request->get_param('category');
$author = $request->get_param('author');
$per_page = $request->get_param('per_page');
$args = [
'post_type' => 'post',
'posts_per_page' => $per_page,
];
if ($category) {
$args['category_name'] = sanitize_text_field($category);
}
if ($author) {
$args['author'] = intval($author);
}
$query = new WP_Query($args);
$posts = [];
foreach ($query->posts as $post) {
$posts[] = [
'id' => $post->ID,
'title' => get_the_title($post),
'date' => get_the_date('', $post),
'link' => get_permalink($post),
];
}
return rest_ensure_response($posts);
}В этом примере мы собираем параметры запроса, формируем аргументы для WP_Query и возвращаем простой массив с нужной информацией о постах.
Добавление пользовательских фильтров и параметров
Вы можете расширять список параметров, добавляя фильтры по метаданным, таксономиям или любым другим критериям. Например, фильтрация по произвольному полю:
add_action('rest_api_init', function() {
register_rest_route('wpblock/v1', '/posts/', [
'methods' => 'GET',
'callback' => 'wpblock_get_filtered_posts',
'args' => [
'meta_key' => [
'required' => false,
'validate_callback' => 'is_string',
],
'meta_value' => [
'required' => false,
'validate_callback' => 'is_string',
],
],
]);
});
function wpblock_get_filtered_posts(WP_REST_Request $request) {
$args = [
'post_type' => 'post',
'posts_per_page' => $request->get_param('per_page') ?: 10,
];
$meta_key = $request->get_param('meta_key');
$meta_value = $request->get_param('meta_value');
if ($meta_key && $meta_value) {
$args['meta_query'] = [
[
'key' => sanitize_text_field($meta_key),
'value' => sanitize_text_field($meta_value),
'compare' => '=',
],
];
}
$query = new WP_Query($args);
// обработка результата...
}Такой подход позволяет гибко создавать фильтры под любые задачи.
Обеспечение безопасности REST API запросов
При работе с REST API крайне важно валидировать и санитизировать все входящие данные. В параметрах маршрута можно использовать validate_callback и santize_callback для автоматической проверки. Кроме того, если API предполагает доступ к приватным данным, добавьте проверку прав пользователя через параметр permission_callback.
Пример с проверкой прав:
register_rest_route('wpblock/v1', '/private-data/', [
'methods' => 'GET',
'callback' => 'wpblock_get_private_data',
'permission_callback' => function() {
return current_user_can('edit_posts');
}
]);Таким образом вы ограничите доступ только авторизованным пользователям с нужными правами.
Примеры полезных плагинов для работы с REST API и фильтрами в WordPress
Если хотите расширить возможности REST API без написания кода, обратите внимание на плагины:
- Clearfy Pro — оптимизация и расширение безопасности REST API, управление доступом.
- WPGPT — интеграция с ИИ, позволяет создавать динамические запросы и получать ответы через API.
- Expert Review — для создания отзывов и их вывода через REST API с фильтрами.
Выводы и рекомендации
Создание собственных REST API маршрутов с фильтрами в WordPress — это мощный способ сделать ваш сайт более гибким и интегрируемым. Всегда тщательно валидируйте входные данные, используйте возможности register_rest_route для описания параметров и прав доступа. При необходимости расширьте функциональность с помощью специализированных плагинов из каталога WPSHOP.