Как использовать REST API в WordPress для создания простого плагина

|

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

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

REST API — это интерфейс для взаимодействия с WordPress через стандартные HTTP-запросы. Он позволяет выполнять операции чтения, создания, обновления и удаления (CRUD) данных сайта с помощью JSON-формата. Это открывает большие возможности для разработчиков, например:

В WordPress REST API уже встроен, начиная с версии 4.7, и предоставляет набор стандартных маршрутов для работы с постами, пользователями, таксономиями и другими объектами. Также вы можете создавать свои собственные маршруты API для специфичных задач.

Создаем простой плагин с собственным REST API маршрутом

Давайте пошагово создадим плагин, который добавит новый маршрут в REST API. Он будет возвращать список последних новостей, хранящихся в специальном типе записи.

Шаг 1. Создаем тип записи «новости»

Для начала зарегистрируем кастомный тип записи news. Добавьте следующий код в основной файл плагина wpzoom-rest-api.php:

function wpzoom_register_news_post_type() {
    $args = array(
        'labels' => array(
            'name' => 'Новости',
            'singular_name' => 'Новость'
        ),
        'public' => true,
        'has_archive' => true,
        'show_in_rest' => true, // Важно для поддержки REST API
        'supports' => array('title', 'editor', 'thumbnail')
    );
    register_post_type('news', $args);
}
add_action('init', 'wpzoom_register_news_post_type');

Параметр show_in_rest разрешает использовать записи этого типа через REST API.

Шаг 2. Регистрируем собственный маршрут REST API

Теперь создадим новый маршрут /wpzoom/v1/latest-news, который будет возвращать последние 5 новостей. Добавьте в плагин следующий код:

function wpzoom_register_rest_route() {
    register_rest_route('wpzoom/v1', '/latest-news', array(
        'methods' => 'GET',
        'callback' => 'wpzoom_get_latest_news',
        'permission_callback' => '__return_true' // открытый доступ
    ));
}
add_action('rest_api_init', 'wpzoom_register_rest_route');

function wpzoom_get_latest_news(WP_REST_Request $request) {
    $args = array(
        'post_type' => 'news',
        'posts_per_page' => 5,
        'post_status' => 'publish'
    );
    $query = new WP_Query($args);
    $news = array();

    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            $news[] = array(
                'id' => get_the_ID(),
                'title' => get_the_title(),
                'content' => get_the_content(),
                'date' => get_the_date('c'),
                'link' => get_permalink()
            );
        }
        wp_reset_postdata();
    }

    return rest_ensure_response($news);
}

Этот код создает маршрут, который при GET-запросе возвращает JSON с последними 5 новостями.

Тестирование нового REST API маршрута

Для проверки работы маршрута можно использовать браузер или инструменты типа Postman, curl:

curl https://ваш-сайт.ru/wp-json/wpzoom/v1/latest-news

Вы получите JSON-массив с новостями, которые можно использовать в фронтенде или приложениях.

Расширение функционала: добавление параметров и фильтров

Мы можем добавить параметры к маршруту, например, чтобы вернуть новости по категории или по количеству.

Добавляем параметр «category»

Изменим функцию регистрации маршрута и колбэк:

function wpzoom_register_rest_route() {
    register_rest_route('wpzoom/v1', '/latest-news', array(
        'methods' => 'GET',
        'callback' => 'wpzoom_get_latest_news',
        'permission_callback' => '__return_true',
        'args' => array(
            'category' => array(
                'required' => false,
                'validate_callback' => 'is_numeric'
            ),
            'count' => array(
                'required' => false,
                'default' => 5,
                'validate_callback' => function($param) {
                    return is_numeric($param) && $param > 0 && $param <= 20;
                }
            )
        )
    ));
}

function wpzoom_get_latest_news(WP_REST_Request $request) {
    $category = $request->get_param('category');
    $count = $request->get_param('count') ?: 5;

    $args = array(
        'post_type' => 'news',
        'posts_per_page' => $count,
        'post_status' => 'publish'
    );

    if ($category) {
        $args['tax_query'] = array(
            array(
                'taxonomy' => 'category',
                'field' => 'term_id',
                'terms' => intval($category)
            )
        );
    }

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

    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            $news[] = array(
                'id' => get_the_ID(),
                'title' => get_the_title(),
                'content' => get_the_content(),
                'date' => get_the_date('c'),
                'link' => get_permalink()
            );
        }
        wp_reset_postdata();
    }

    return rest_ensure_response($news);
}

Теперь вы можете делать запросы вида /wp-json/wpzoom/v1/latest-news?category=3&count=10.

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

Хотя мы сделали маршрут открытым (permission_callback возвращает true), в реальных условиях нужно учитывать безопасность:

Например, если нужно ограничить доступ только для авторизованных пользователей с правом редактирования новостей, замените permission_callback на:

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

И в регистрации маршрута используйте:

'permission_callback' => 'wpzoom_permission_callback'

Заключение

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

Как использовать AJAX в WordPress для обновления контента без перезагрузки страницы
05.12.2025
WooCommerce: автоматическое изменение стоимости товаров при акциях без плагинов
22.06.2026
Как использовать хуки в WordPress для расширения функциональности
11.11.2025
Как избежать конфликтов между плагинами WordPress: практические решения и примеры кода
24.01.2026
Как избежать проблем при масштабном экспорте и импорте продуктов в WooCommerce
17.04.2026
×

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

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

пишет статьи

готовит SEO

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

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