Как создать и использовать REST API Endpoint в WordPress

WordPress изначально поддерживает REST API, который позволяет взаимодействовать с сайтом через HTTP-запросы. Однако часто возникает необходимость создать собственный REST API endpoint для решения специфичных задач — например, получения или изменения данных, которые не доступны через стандартные маршруты API. В этой статье мы подробно разберем, как создать и использовать кастомный REST API endpoint в WordPress с примерами кода, которые можно легко адаптировать под свои нужды.

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

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

Создание собственного endpoint позволяет:

  • Обеспечить доступ к кастомным данным сайта.
  • Автоматизировать обмен данными с внешними сервисами.
  • Упростить работу мобильных приложений или SPA (Single Page Application), которые используют WordPress как бекенд.

В итоге, REST API — мощный инструмент для интеграции и расширения функционала WordPress.

Создаем первый кастомный REST API endpoint на wpbono

Для начала создадим простой endpoint, который будет возвращать приветственное сообщение. Для этого добавим код в файл functions.php вашей темы или в отдельный плагин.

add_action('rest_api_init', 'wpbono_register_hello_endpoint');
function wpbono_register_hello_endpoint() {
    register_rest_route('wpbono/v1', '/hello', array(
        'methods' => 'GET',
        'callback' => 'wpbono_hello_callback',
        'permission_callback' => '__return_true',
    ));
}

function wpbono_hello_callback() {
    return array('message' => 'Привет от wpbono REST API!');
}

Объяснение кода:

  • rest_api_init — хук для регистрации новых маршрутов API.
  • register_rest_route — функция для создания маршрута. В нашем случае маршрут будет /wp-json/wpbono/v1/hello.
  • methods — HTTP-метод, который поддерживает endpoint, здесь GET.
  • callback — функция-обработчик запроса.
  • permission_callback — проверка прав доступа. Здесь разрешаем всем.

Теперь, если вы перейдете по адресу https://ваш-сайт.ru/wp-json/wpbono/v1/hello, получите JSON с сообщением.

Принимаем параметры в REST API endpoint и фильтрация данных

Обычно API-запросы требуют передачи параметров, например, ID записи или фильтров. Добавим пример, где endpoint принимает параметр post_id и возвращает заголовок и содержание поста.

add_action('rest_api_init', 'wpbono_register_post_data_endpoint');
function wpbono_register_post_data_endpoint() {
    register_rest_route('wpbono/v1', '/post-data', array(
        'methods' => 'GET',
        'callback' => 'wpbono_post_data_callback',
        'args' => array(
            'post_id' => array(
                'required' => true,
                'validate_callback' => 'is_numeric'
            ),
        ),
        'permission_callback' => '__return_true',
    ));
}

function wpbono_post_data_callback(WP_REST_Request $request) {
    $post_id = intval($request->get_param('post_id'));
    $post = get_post($post_id);

    if (!$post) {
        return new WP_Error('not_found', 'Пост не найден', array('status' => 404));
    }

    return array(
        'ID' => $post->ID,
        'title' => get_the_title($post),
        'content' => apply_filters('the_content', $post->post_content),
    );
}

Здесь:

  • args — описывает ожидаемые параметры с их валидацией.
  • В функции-обработчике проверяем, существует ли пост с переданным ID и возвращаем ошибку, если нет.

Такой подход позволяет гибко принимать параметры и безопасно обрабатывать запросы.

Добавление и обновление данных через POST-запросы

REST API позволяет не только получать данные, но и создавать или обновлять их. Рассмотрим пример создания новой записи через POST-запрос.

add_action('rest_api_init', 'wpbono_register_create_post_endpoint');
function wpbono_register_create_post_endpoint() {
    register_rest_route('wpbono/v1', '/create-post', array(
        'methods' => 'POST',
        'callback' => 'wpbono_create_post_callback',
        'permission_callback' => function () {
            return current_user_can('edit_posts');
        },
        'args' => array(
            'title' => array(
                'required' => true,
                'sanitize_callback' => 'sanitize_text_field'
            ),
            'content' => array(
                'required' => true,
                'sanitize_callback' => 'wp_kses_post'
            ),
        ),
    ));
}

function wpbono_create_post_callback(WP_REST_Request $request) {
    $title = $request->get_param('title');
    $content = $request->get_param('content');

    $post_id = wp_insert_post(array(
        'post_title' => $title,
        'post_content' => $content,
        'post_status' => 'draft',
        'post_type' => 'post',
        'post_author' => get_current_user_id(),
    ));

    if (is_wp_error($post_id)) {
        return new WP_Error('insert_failed', 'Ошибка создания поста', array('status' => 500));
    }

    return array('success' => true, 'post_id' => $post_id);
}

Ключевые моменты:

  • Метод запроса — POST.
  • Проверка прав — только авторизованные пользователи с правом edit_posts могут создавать записи.
  • Обработка и очистка входящих данных для предотвращения уязвимостей.
  • Возвращается ID созданного поста или ошибка.

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

Хотя WordPress предоставляет мощный встроенный REST API, некоторые задачи проще решить с помощью специализированных плагинов:

  • WP REST API Controller — позволяет настраивать доступность полей, маршрутов и прав без написания кода.
  • Advanced Custom Fields (ACF) to REST API — расширяет стандартный API, добавляя поля ACF в ответы.
  • JWT Authentication for WP REST API — добавляет авторизацию через JSON Web Tokens, что удобно для мобильных приложений и SPA.

Использование этих плагинов может значительно упростить настройку и безопасность REST API.

Советы по безопасности при работе с REST API

REST API открывает ворота для внешнего взаимодействия с сайтом, поэтому важно соблюдать меры безопасности:

  • Всегда проверяйте права доступа в permission_callback. Не делайте endpoint доступным для всех, если он изменяет данные.
  • Валидация и санитизация входящих данных — обязательны для защиты от инъекций и XSS.
  • Используйте аутентификацию: OAuth, JWT или cookie-based, чтобы убедиться, что запрос делает авторизованный пользователь.
  • Ограничивайте количество запросов с помощью rate limiting или внешних сервисов, чтобы избежать DDoS.

Пример комплексного кастомного REST API endpoint для wpbono

Допустим, нужно создать endpoint, который возвращает список последних 5 опубликованных постов с определенным пользовательским полем _wpbono_custom_flag равным true. Такой endpoint может выглядеть так:

add_action('rest_api_init', 'wpbono_register_flagged_posts_endpoint');
function wpbono_register_flagged_posts_endpoint() {
    register_rest_route('wpbono/v1', '/flagged-posts', array(
        'methods' => 'GET',
        'callback' => 'wpbono_flagged_posts_callback',
        'permission_callback' => '__return_true',
    ));
}

function wpbono_flagged_posts_callback(WP_REST_Request $request) {
    $args = array(
        'post_type' => 'post',
        'posts_per_page' => 5,
        'meta_query' => array(
            array(
                'key' => '_wpbono_custom_flag',
                'value' => '1',
                'compare' => '=',
            ),
        ),
        'post_status' => 'publish',
    );

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

    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            $posts[] = array(
                'ID' => get_the_ID(),
                'title' => get_the_title(),
                'excerpt' => get_the_excerpt(),
                'link' => get_permalink(),
            );
        }
        wp_reset_postdata();
    }

    return $posts;
}

Такой endpoint полезен для получения специфичных данных с сайта по REST API без лишней нагрузки и с удобным форматом вывода.

Как создать и использовать REST API Endpoint в WordPress
28.11.2025
Как создать собственный шорткод в WordPress
08.11.2025
WooCommerce: как настроить отправку уведомлений о заказах в Telegram
30.04.2026
Как создать динамические таблицы в WordPress с помощью шорткода и AJAX
11.03.2026
Как создать автоматические переадресации в WordPress без плагинов
25.02.2026