Как создать собственный REST API endpoint в WordPress

WordPress уже включает мощный REST API, который позволяет взаимодействовать с сайтом извне. Но иногда стандартных эндпоинтов недостаточно, и возникает необходимость создать собственный REST API endpoint для решения конкретных задач. В этой статье расскажу, как это сделать правильно, с примерами кода, учетом безопасности и полезными советами.

Что такое REST API endpoint в WordPress и зачем он нужен

REST API endpoint — это точка доступа, к которой можно отправлять HTTP-запросы (GET, POST, PUT, DELETE) для получения или изменения данных. Создание собственного endpoint полезно для интеграции с внешними сервисами, создания мобильных приложений, кастомных админ-панелей и интерактивных фронтенд-решений.

Стандартный REST API WordPress предоставляет множество эндпоинтов для работы с постами, пользователями, комментариями, но если вам нужна нестандартная логика — придется создавать свой.

Создание собственного REST API endpoint в WordPress: шаг за шагом

Регистрация маршрута (route) и обработчика

Для начала нужно зарегистрировать новый route с помощью функции register_rest_route(). Регистрировать маршруты нужно в хуке rest_api_init. Пример регистрации:

add_action('rest_api_init', 'wppartner_register_custom_endpoint');
function wppartner_register_custom_endpoint() {
    register_rest_route('wppartner/v1', '/data/', array(
        'methods' => 'GET',
        'callback' => 'wppartner_get_custom_data',
        'permission_callback' => '__return_true', // пока без проверки прав
    ));
}

Здесь мы создаем endpoint по адресу /wp-json/wppartner/v1/data/, который принимает запросы GET и вызывает функцию wppartner_get_custom_data.

Создание обработчика запроса

Обработчик должен возвращать данные в формате, поддерживаемом REST API (массивы или объекты, которые WordPress преобразует в JSON). Пример простой функции:

function wppartner_get_custom_data(WP_REST_Request $request) {
    $data = array(
        'message' => 'Привет от собственного REST API!',
        'time' => current_time('mysql'),
    );
    return rest_ensure_response($data);
}

Функция получает объект запроса, откуда можно взять параметры, заголовки и пр.

Обработка параметров и валидация

Часто нужно принимать параметры запроса, например фильтры или id. Для этого в register_rest_route указывается args с описанием параметров и их валидацией:

register_rest_route('wppartner/v1', '/posts/', array(
    'methods' => 'GET',
    'callback' => 'wppartner_get_posts',
    'args' => array(
        'category' => array(
            'required' => false,
            'validate_callback' => function($param, $request, $key) {
                return is_string($param);
            }
        ),
        'limit' => array(
            'required' => false,
            'default' => 5,
            'sanitize_callback' => 'absint',
        ),
    ),
    'permission_callback' => '__return_true',
));

В обработчике можно получить параметры так:

function wppartner_get_posts(WP_REST_Request $request) {
    $category = $request->get_param('category');
    $limit = $request->get_param('limit');
    // Логика выборки постов с учетом параметров
}

Обеспечение безопасности REST API endpoint

Очень важно ограничить доступ к вашему endpoint, если там чувствительные данные. Для этого в permission_callback можно указать функцию проверки прав, например:

function wppartner_check_permission() {
    return current_user_can('edit_posts');
}

register_rest_route('wppartner/v1', '/private-data/', array(
    'methods' => 'GET',
    'callback' => 'wppartner_get_private_data',
    'permission_callback' => 'wppartner_check_permission',
));

Также можно проверить nonce или API ключи в заголовках.

Пример: собственный endpoint для получения списка постов по категории

Регистрация маршрута:

add_action('rest_api_init', function() {
    register_rest_route('wppartner/v1', '/posts-by-category/', array(
        'methods' => 'GET',
        'callback' => 'wppartner_get_posts_by_category',
        'args' => array(
            'category' => array(
                'required' => true,
                'validate_callback' => function($param) {
                    return is_string($param) && !empty($param);
                }
            ),
            'limit' => array(
                'required' => false,
                'default' => 10,
                'sanitize_callback' => 'absint',
            ),
        ),
        'permission_callback' => '__return_true',
    ));
});

Обработчик:

function wppartner_get_posts_by_category(WP_REST_Request $request) {
    $category_slug = $request->get_param('category');
    $limit = $request->get_param('limit');

    $args = array(
        'post_type' => 'post',
        'posts_per_page' => $limit,
        'category_name' => $category_slug,
        'post_status' => 'publish',
    );

    $query = new WP_Query($args);
    $posts = array();

    foreach ($query->posts as $post) {
        $posts[] = array(
            'id' => $post->ID,
            'title' => get_the_title($post),
            'excerpt' => get_the_excerpt($post),
            'link' => get_permalink($post),
        );
    }

    return rest_ensure_response($posts);
}

Полезные плагины для работы с REST API в WordPress

Хотя создание собственных endpoint несложно, бывают ситуации, когда полезны плагины для расширения возможностей:

  • Clearfy Pro — улучшает безопасность и оптимизацию сайта, в том числе для REST API.
  • ABC Pagination — удобная пагинация для REST API запросов с постами.
  • WPCommunity — если нужно расширять API для соцсетевых функций внутри WordPress.

Отладка и тестирование собственного REST API endpoint

Для проверки работы endpoint используйте:

  • Postman или аналогичные REST клиенты — удобно отправлять запросы и смотреть ответы.
  • Встроенный в браузер инструментарий разработчика — вкладка Network.
  • Плагин WPRemark — позволяет добавлять комментарии и заметки по API прямо в админке.

При отладке обращайте внимание на HTTP коды ответа, структуру JSON, и сообщения об ошибках.

Советы по производительности и безопасности

Создавая собственные endpoint, старайтесь:

  • Минимизировать объем возвращаемых данных — отдавайте только то, что реально нужно.
  • Кэшировать результаты сложных запросов, например с помощью Transients API.
  • Использовать nonce и проверки прав пользователя в permission_callback.
  • Ограничивать количество запросов с одного IP, чтобы избежать DDoS.

Это позволит сделать API быстрым и надежным.

Вам также может быть интересно:

Как найти и убрать дубли страниц в WordPress без потери индексации
15.08.2026
Как создать собственный REST API endpoint в WordPress: практическое руководство
02.01.2026
Как использовать мета-запросы для фильтрации постов в WordPress
21.03.2026
Как создать движущийся фон в WordPress: практическое руководство
28.03.2026
Как удалить неиспользуемые метаданные в WordPress для оптимизации базы данных
26.12.2025
×
Quizle
Получите больше лидов и увеличьте продажи!
-15%

на премиум плагин WordPress

Получить скидку ⋙