wpmake.ru wordpress WPMake

Создание своего REST API endpoint в WordPress

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

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

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

Но бывает, что нужно создать кастомный endpoint, который будет возвращать или принимать данные, специфичные для вашего проекта — например, список товаров с дополнительными метаполями, статистику, пользовательские данные или интеграция с внешними сервисами.

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

  • Реализовать API для мобильных приложений и SPA;
  • Организовать обмен данными с внешними системами;
  • Создавать кастомные интерфейсы управления;
  • Выделять бизнес-логику и данные отдельно от шаблонов сайта.

Регистрация собственного REST API endpoint в WordPress

Чтобы создать новый endpoint, нужно зарегистрировать маршрут (route) с помощью функции register_rest_route(), которую вызывают на хук rest_api_init. Рассмотрим пример создания endpoint, который возвращает список последних 5 постов с кастомным полем.

Добавьте следующий код в файл functions.php вашей темы или в свой плагин:

add_action('rest_api_init', 'wpmake_register_custom_endpoint');
function wpmake_register_custom_endpoint() {
    register_rest_route('wpmake/v1', '/latest-posts/', [
        'methods' => 'GET',
        'callback' => 'wpmake_get_latest_posts',
        'permission_callback' => '__return_true', // публичный endpoint
    ]);
}

function wpmake_get_latest_posts(WP_REST_Request $request) {
    $args = [
        'numberposts' => 5,
        'post_status' => 'publish',
    ];
    $posts = get_posts($args);
    $data = [];

    foreach ($posts as $post) {
        $data[] = [
            'id' => $post->ID,
            'title' => $post->post_title,
            'date' => $post->post_date,
            'custom_field' => get_post_meta($post->ID, 'wpmake_custom_field', true),
        ];
    }
    return rest_ensure_response($data);
}

В этом примере мы регистрируем endpoint /wp-json/wpmake/v1/latest-posts/, который возвращает JSON с последними пятью постами и значением кастомного поля wpmake_custom_field. Параметр permission_callback установлен в __return_true, что означает публичный доступ без авторизации. В реальных проектах стоит использовать проверки прав доступа.

Аргументы и методы запроса: расширяем функциональность

Часто нужно, чтобы endpoint принимал параметры: например, количество постов, категории или фильтры. Рассмотрим, как добавить параметр count для задания количества постов.

add_action('rest_api_init', 'wpmake_register_custom_endpoint_with_params');
function wpmake_register_custom_endpoint_with_params() {
    register_rest_route('wpmake/v1', '/latest-posts/', [
        'methods' => 'GET',
        'callback' => 'wpmake_get_latest_posts_with_params',
        'permission_callback' => '__return_true',
        'args' => [
            'count' => [
                'required' => false,
                'default' => 5,
                'validate_callback' => function($param, $request, $key) {
                    return is_numeric($param) && $param > 0 && $param <= 20;
                },
            ],
        ],
    ]);
}

function wpmake_get_latest_posts_with_params(WP_REST_Request $request) {
    $count = (int) $request->get_param('count');
    $args = [
        'numberposts' => $count,
        'post_status' => 'publish',
    ];
    $posts = get_posts($args);
    $data = [];

    foreach ($posts as $post) {
        $data[] = [
            'id' => $post->ID,
            'title' => $post->post_title,
            'date' => $post->post_date,
        ];
    }
    return rest_ensure_response($data);
}

Теперь можно вызывать endpoint с параметром count, например: /wp-json/wpmake/v1/latest-posts/?count=10, чтобы получить 10 постов. Валидация параметров помогает избежать ошибок и защититься от некорректных значений.

Обработка POST-запросов и безопасность

Для создания или изменения данных через REST API часто используются POST или PUT-запросы. В этом случае крайне важно проверять права пользователя и применять nonce или OAuth для аутентификации.

Пример регистрации POST endpoint для создания простого отзыва с проверкой прав:

add_action('rest_api_init', 'wpmake_register_create_review_endpoint');
function wpmake_register_create_review_endpoint() {
    register_rest_route('wpmake/v1', '/reviews/', [
        'methods' => 'POST',
        'callback' => 'wpmake_create_review',
        'permission_callback' => function() {
            return current_user_can('edit_posts');
        },
        'args' => [
            'title' => [
                'required' => true,
                'sanitize_callback' => 'sanitize_text_field',
            ],
            'content' => [
                'required' => true,
                'sanitize_callback' => 'sanitize_textarea_field',
            ],
        ],
    ]);
}

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

    $new_post = [
        'post_title' => $title,
        'post_content' => $content,
        'post_status' => 'pending',
        'post_type' => 'review',
    ];

    $post_id = wp_insert_post($new_post);

    if (is_wp_error($post_id)) {
        return new WP_Error('post_creation_failed', 'Ошибка создания отзыва', ['status' => 500]);
    }

    return rest_ensure_response(['message' => 'Отзыв создан', 'id' => $post_id]);
}

В этом примере endpoint /wp-json/wpmake/v1/reviews/ принимает POST-запрос с параметрами title и content, создает новый отзыв (предполагается, что у вас зарегистрирован тип записи review) и возвращает статус. Права проверяются через current_user_can('edit_posts'), что ограничивает создание отзывов авторизованными пользователями с соответствующими правами.

Тестирование и отладка REST API endpoint

Для тестирования собственного REST API endpoint можно использовать инструменты:

  • Postman — удобный клиент для отправки запросов и просмотра ответов;
  • curl — командная строка для HTTP-запросов;
  • WP-CLI — некоторые команды для тестирования API;
  • Браузер — для GET-запросов.

Пример запроса с помощью curl:

curl -X GET https://wpmake.ru/wp-json/wpmake/v1/latest-posts/

При возникновении ошибок полезно включить логирование ошибок и использовать функции error_log() или плагины для дебага, например Query Monitor.

Рекомендации по безопасности и оптимизации

При создании собственных endpoint стоит учитывать:

  • Проверку прав доступа. Всегда используйте permission_callback, чтобы ограничить доступ к чувствительной информации.
  • Валидацию и санитацию данных. Не доверяйте пользовательскому вводу, валидируйте и очищайте все параметры.
  • Кэширование. Для часто запрашиваемых данных используйте кэширование, чтобы снизить нагрузку на сервер.
  • Обработка ошибок. Возвращайте понятные сообщения об ошибках с правильными HTTP-кодами.

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

Хотя создание собственного endpoint обычно пишется вручную, есть плагины, которые упрощают работу с REST API:

  • WP REST API Controller — позволяет управлять стандартными endpoint и правами через интерфейс;
  • Advanced Custom Fields (ACF) to REST API — добавляет в REST API данные из полей ACF;
  • Custom Post Type UI — помогает создавать типы записей, которые автоматически доступны в REST API;
  • JWT Authentication for WP REST API — добавляет аутентификацию через токены.

Используйте эти инструменты для ускорения разработки и повышения безопасности.

Выводы и лучшие практики

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

Обязательно тестируйте все endpoint, документируйте их для команды и следите за производительностью.

Таким образом, вы сможете создавать гибкие и мощные решения на базе WordPress, которые будут легко масштабироваться и поддерживаться.

×
Сделай свой сайт крутым!

Скидка -20% на премиум плагины WordPress

Выбрать плагин сейчас ⋙