wpfind.ru wordpress wpfind.ru

Как использовать WP REST API для создания пользовательских endpoint’ов в WordPress

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

Что такое пользовательские REST API endpoint’ы в WordPress

По умолчанию WordPress предоставляет множество REST API маршрутов для работы с постами, пользователями, таксономиями и другими сущностями. Однако часто возникает необходимость добавить свои собственные endpoint’ы, которые будут возвращать или принимать данные в формате JSON для специфических задач вашего сайта.

Пользовательские endpoint’ы позволяют:

  • Создавать API для нестандартных типов записей или данных.
  • Обеспечивать интеграцию с внешними сервисами.
  • Реализовывать специальные методы обработки данных.

Для регистрации своих маршрутов используется функция register_rest_route(), которую нужно вызвать в хуке rest_api_init.

Регистрация простого пользовательского endpoint’a

Рассмотрим пример создания простого endpoint’a, который будет возвращать приветствие.

add_action('rest_api_init', 'wpfind_register_hello_endpoint');
function wpfind_register_hello_endpoint() {
    register_rest_route('wpfind/v1', '/hello/', [
        'methods' => 'GET',
        'callback' => 'wpfind_hello_callback',
    ]);
}

function wpfind_hello_callback() {
    return ['message' => 'Привет от WPFind!'];
}

Здесь мы создаём маршрут /wp-json/wpfind/v1/hello/, который при GET-запросе возвращает JSON с приветственным сообщением. Это базовый пример, который можно расширять.

Создание endpoint’а для получения кастомных данных

Предположим, у вас есть кастомный тип записи product, и вы хотите через API получить список товаров с определённым набором полей.

Пример регистрации endpoint’а:

add_action('rest_api_init', 'wpfind_register_products_endpoint');
function wpfind_register_products_endpoint() {
    register_rest_route('wpfind/v1', '/products/', [
        'methods' => 'GET',
        'callback' => 'wpfind_get_products',
        'permission_callback' => '__return_true',
    ]);
}

function wpfind_get_products(WP_REST_Request $request) {
    $args = [
        'post_type' => 'product',
        'posts_per_page' => 10,
    ];
    $query = new WP_Query($args);
    $products = [];
    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            $products[] = [
                'id' => get_the_ID(),
                'title' => get_the_title(),
                'price' => get_post_meta(get_the_ID(), '_price', true),
                'link' => get_permalink(),
            ];
        }
        wp_reset_postdata();
    }
    return $products;
}

Этот endpoint вернёт JSON-массив из 10 товаров с их основными данными. Обратите внимание, что для публичных данных можно использовать 'permission_callback' => '__return_true', но для чувствительной информации лучше реализовать проверку прав.

Обработка POST запросов и создание новых записей через API

REST API позволяет не только получать данные, но и создавать их. Пример endpoint’a для создания новой записи типа product через POST запрос:

add_action('rest_api_init', 'wpfind_register_create_product_endpoint');
function wpfind_register_create_product_endpoint() {
    register_rest_route('wpfind/v1', '/products/create/', [
        'methods' => 'POST',
        'callback' => 'wpfind_create_product',
        'permission_callback' => 'wpfind_permission_check',
        'args' => [
            'title' => [
                'required' => true,
                'type' => 'string',
            ],
            'price' => [
                'required' => true,
                'type' => 'number',
            ],
        ],
    ]);
}

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

function wpfind_create_product(WP_REST_Request $request) {
    $params = $request->get_params();
    $post_id = wp_insert_post([
        'post_title' => sanitize_text_field($params['title']),
        'post_type' => 'product',
        'post_status' => 'publish',
    ]);
    if (is_wp_error($post_id)) {
        return new WP_Error('cant-create', 'Не удалось создать товар', ['status' => 500]);
    }
    update_post_meta($post_id, '_price', floatval($params['price']));
    return ['success' => true, 'product_id' => $post_id];
}

В этом примере добавлена проверка прав пользователя через permission_callback, что важно для безопасности. Новый товар создаётся с заголовком и ценой, переданными в теле POST-запроса.

Безопасность и аутентификация в пользовательских endpoint’ах

При создании REST API endpoint’ов важно учитывать безопасность. Публичные данные можно отдавать без проверки, но для создания, редактирования и удаления данных необходима аутентификация и проверка прав.

WordPress поддерживает несколько методов аутентификации:

  • Куки и сессии (для запросов из браузера, когда пользователь залогинен)
  • Basic Auth (для тестов и внешних приложений)
  • OAuth или JWT (для сложных интеграций)

Для большинства задач достаточно проверить права пользователя через функции current_user_can() или реализовать собственный permission_callback.

Использование плагина Clearfy Pro для управления REST API

Если вы хотите гибко управлять доступом к REST API, можно использовать Clearfy Pro. Этот плагин позволяет отключать ненужные endpoint’ы, управлять правами и повышать безопасность сайта без дополнительных настроек кода.

Полезные советы и рекомендации при работе с WP REST API

  • Всегда фильтруйте и валидируйте входящие данные.
  • Используйте permission_callback для контроля доступа.
  • Документируйте свои endpoint’ы для удобства разработчиков.
  • Для сложных данных используйте кастомные контроллеры и схемы.
  • Тестируйте API с помощью инструментов Postman или curl.

Заключение

Создание пользовательских REST API endpoint’ов в WordPress — это мощный способ расширить возможности сайта и интегрировать его с внешними сервисами. С помощью нескольких функций и правильного подхода можно быстро организовать обмен данными, улучшить UX и автоматизировать процессы. Если хотите упростить управление API и безопасность, рекомендуем обратить внимание на Clearfy Pro.

×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше