wpupgrade.ru wordpress WP Upgrade

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

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

Что такое REST API endpoint в WordPress

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

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

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

Для создания собственного endpoint необходимо зарегистрировать маршрут и обработчик в хуке rest_api_init. Ниже пример базового кода, который регистрирует endpoint /wpupgrade/v1/message, возвращающий простой JSON с сообщением.

add_action('rest_api_init', function () {
    register_rest_route('wpupgrade/v1', '/message', [
        'methods' => 'GET',
        'callback' => 'wpupgrade_rest_api_message_handler',
    ]);
});

function wpupgrade_rest_api_message_handler(WP_REST_Request $request) {
    return [
        'message' => 'Привет, это кастомный REST API endpoint от wpupgrade.ru!'
    ];
}

После добавления этого кода в файл functions.php вашей темы или в плагин, вы сможете обратиться по адресу https://ваш-сайт.ru/wp-json/wpupgrade/v1/message и получить ответ в формате JSON.

Обработка параметров запроса в REST API endpoint

Часто требуется принимать параметры от клиента, например, ID записи или фильтры. В REST API это делается через объект WP_REST_Request, который передаётся в функцию-обработчик.

Вот пример endpoint-а, который принимает параметр name и возвращает персонализированное приветствие:

add_action('rest_api_init', function () {
    register_rest_route('wpupgrade/v1', '/greet', [
        'methods' => 'GET',
        'callback' => 'wpupgrade_rest_api_greet_handler',
        'args' => [
            'name' => [
                'required' => true,
                'validate_callback' => function($param) {
                    return is_string($param) && !empty($param);
                }
            ]
        ]
    ]);
});

function wpupgrade_rest_api_greet_handler(WP_REST_Request $request) {
    $name = sanitize_text_field($request->get_param('name'));
    return [
        'greeting' => "Привет, {$name}! Добро пожаловать на wpupgrade.ru"
    ];
}

Теперь запрос https://ваш-сайт.ru/wp-json/wpupgrade/v1/greet?name=Андрей вернёт:

{
  "greeting": "Привет, Андрей! Добро пожаловать на wpupgrade.ru"
}

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

REST API позволяет обрабатывать не только GET, но и POST, PUT, DELETE запросы. Это полезно для создания кастомных форм, сохранения настроек и прочего.

Пример endpoint-а, который принимает POST-запрос с параметром feedback и сохраняет его в опцию WordPress:

add_action('rest_api_init', function () {
    register_rest_route('wpupgrade/v1', '/feedback', [
        'methods' => 'POST',
        'callback' => 'wpupgrade_rest_api_feedback_handler',
        'permission_callback' => function () {
            return current_user_can('edit_posts');
        },
        'args' => [
            'feedback' => [
                'required' => true,
                'sanitize_callback' => 'sanitize_textarea_field',
            ],
        ],
    ]);
});

function wpupgrade_rest_api_feedback_handler(WP_REST_Request $request) {
    $feedback = $request->get_param('feedback');
    // Допустим, сохраняем в опцию
    update_option('wpupgrade_feedback', $feedback);
    return [
        'status' => 'success',
        'message' => 'Спасибо за ваш отзыв!'
    ];
}

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

Обеспечение безопасности и валидация данных

При создании собственных endpoint-ов важно учитывать безопасность и валидировать входящие данные, чтобы избежать уязвимостей типа SQL-инъекций, XSS и прочих.

Основные рекомендации:

  • Используйте встроенные функции санитизации: sanitize_text_field, sanitize_email, sanitize_textarea_field и т.д.
  • Проверяйте права доступа через permission_callback.
  • Валидация параметров через опцию args при регистрации маршрута.

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

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

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

Пример реального использования кастомного REST API endpoint

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

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

add_action('rest_api_init', function () {
    register_rest_route('wpupgrade/v1', '/reviews', [
        'methods' => 'GET',
        'callback' => 'wpupgrade_rest_api_get_reviews',
    ]);
});

function wpupgrade_rest_api_get_reviews() {
    $args = [
        'post_type' => 'review',
        'post_status' => 'publish',
        'numberposts' => 10,
    ];
    $reviews = get_posts($args);

    $data = [];
    foreach ($reviews as $review) {
        $data[] = [
            'id' => $review->ID,
            'title' => get_the_title($review->ID),
            'content' => get_the_content(null, false, $review->ID),
            'date' => get_the_date('', $review->ID),
        ];
    }
    return $data;
}

Этот endpoint вернёт JSON-массив с последними 10 отзывами, которые можно использовать в приложении или на другом сайте.

Заключение

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

×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее