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

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

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

REST API (Representational State Transfer Application Programming Interface) — это набор правил и стандартов, позволяющих клиенту (например, мобильному приложению или внешнему сайту) взаимодействовать с сервером через HTTP-запросы. В WordPress REST API встроен из коробки начиная с версии 4.7, что даёт разработчикам простой механизм для работы с контентом и настройками сайта.

Основные возможности REST API в WordPress:

  • Получение данных: записи, страницы, таксономии, пользователи и т.д.;
  • Создание, обновление и удаление контента через API;
  • Создание собственных REST-эндпоинтов для работы с кастомными данными;
  • Интеграция с внешними сервисами и приложениями.

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

Создание собственного REST API эндпоинта в плагине

Рассмотрим пошагово, как в плагине wplesson зарегистрировать новый REST эндпоинт, который будет возвращать список последних пяти записей с определённой категорией.

Регистрация маршрута и обработчика запроса

Добавьте в основной файл плагина следующий код:

add_action('rest_api_init', 'wplesson_register_custom_route');

function wplesson_register_custom_route() {
    register_rest_route('wplesson/v1', '/latest-posts/', array(
        'methods' => 'GET',
        'callback' => 'wplesson_get_latest_posts',
        'permission_callback' => '__return_true',
    ));
}

Здесь мы создаём маршрут /wp-json/wplesson/v1/latest-posts/, который отвечает на GET-запросы и вызывает функцию wplesson_get_latest_posts.

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

Теперь реализуем функцию, которая будет отдавать JSON с нужными данными:

function wplesson_get_latest_posts(WP_REST_Request $request) {
    $args = array(
        'numberposts' => 5,
        'category_name' => 'news', // замените на вашу категорию
        'post_status' => 'publish',
    );
    $posts = get_posts($args);
    $data = array();
    foreach ($posts as $post) {
        $data[] = array(
            'id' => $post->ID,
            'title' => get_the_title($post),
            'date' => get_the_date('', $post),
            'link' => get_permalink($post),
        );
    }
    return rest_ensure_response($data);
}

Эта функция получает последние 5 опубликованных записей из категории "news" и возвращает их в удобном формате.

Добавление параметров для фильтрации и пагинации

Чтобы API был более гибким, добавим возможность задавать параметры запроса — например, категорию и количество записей через URL.

Изменим регистрацию маршрута, добавив схему параметров:

register_rest_route('wplesson/v1', '/latest-posts/', array(
    'methods' => 'GET',
    'callback' => 'wplesson_get_latest_posts',
    'permission_callback' => '__return_true',
    'args' => array(
        'category' => array(
            'required' => false,
            'type' => 'string',
        ),
        'count' => array(
            'required' => false,
            'type' => 'integer',
            'default' => 5,
        ),
    ),
));

И доработаем функцию, чтобы учитывать эти параметры:

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

    $args = array(
        'numberposts' => $count,
        'category_name' => sanitize_text_field($category),
        'post_status' => 'publish',
    );
    $posts = get_posts($args);
    $data = array();
    foreach ($posts as $post) {
        $data[] = array(
            'id' => $post->ID,
            'title' => get_the_title($post),
            'date' => get_the_date('', $post),
            'link' => get_permalink($post),
        );
    }
    return rest_ensure_response($data);
}

Теперь можно сделать запрос, например: /wp-json/wplesson/v1/latest-posts/?category=technology&count=3

Пример использования REST API в фронтенде

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

fetch('/wp-json/wplesson/v1/latest-posts/?category=news&count=5')
    .then(response => response.json())
    .then(data => {
        const container = document.getElementById('wplesson-posts');
        data.forEach(post => {
            const div = document.createElement('div');
            div.innerHTML = `<a href="${post.link}">${post.title}</a> <span>(${post.date})</span>`;
            container.appendChild(div);
        });
    })
    .catch(err => console.error(err));

Для вывода создайте на странице элемент с id wplesson-posts. Такой подход позволяет динамически подгружать контент без перезагрузки.

Плагины для расширения возможностей REST API в WordPress

Если вы хотите упростить работу или добавить функциональность, существуют проверенные плагины:

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

Использование этих плагинов поможет вам создавать более гибкие и защищённые решения на базе REST API.

Безопасность и права доступа при работе с REST API

При создании своих эндпоинтов важно задуматься о безопасности. По умолчанию наш пример использует 'permission_callback' => '__return_true', что открывает доступ всем. В реальном проекте стоит проверять права пользователя:

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

register_rest_route('wplesson/v1', '/latest-posts/', array(
    'methods' => 'GET',
    'callback' => 'wplesson_get_latest_posts',
    'permission_callback' => 'wplesson_permission_check',
));

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

Выводы и рекомендации по использованию REST API в WordPress

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

Главные рекомендации:

  • Всегда проверяйте права доступа в permission_callback;
  • Соблюдайте безопасность — фильтруйте и валидируйте входящие данные;
  • Используйте возможности WordPress: функции get_posts, rest_ensure_response, WP_REST_Request;
  • Тестируйте эндпоинты при помощи инструментов Postman или curl;
  • Расширяйте API через плагины для удобства и безопасности.

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

Как изменить URL товара WooCommerce без потери SEO
22.04.2026
Как создать автоматический sitemap в WordPress с помощью кода и плагина
04.03.2026
Как добавить несколько обложек для записи в WordPress
13.01.2026
Как удалить пустые meta данные в WordPress для ускорения сайта
09.04.2026
Как создать автоматическое отправление email в WordPress с помощью WP-Cron
01.04.2026