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

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

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

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

Создание собственных REST API эндпоинтов полезно, когда нужно:

  • Предоставить доступ к кастомным данным или бизнес-логике сайта.
  • Интегрировать WordPress с внешними сервисами, CRM, мобильными приложениями.
  • Создать SPA (Single Page Application) на React, Vue и других фронтенд-технологиях, используя WordPress как backend.

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

Для создания собственного REST API эндпоинта нужно использовать функцию register_rest_route(), которая вызывается в хук rest_api_init. Рассмотрим пример создания простого эндпоинта, который возвращает JSON с приветствием.

add_action('rest_api_init', 'wpma_register_hello_endpoint');
function wpma_register_hello_endpoint() {
  register_rest_route('wpma/v1', '/hello', [
    'methods' => 'GET',
    'callback' => 'wpma_hello_callback',
    'permission_callback' => '__return_true', // доступ открыт всем
  ]);
}

function wpma_hello_callback() {
  return [
    'message' => 'Привет от WPMA REST API!'
  ];
}

В этом примере мы зарегистрировали маршрут /wp-json/wpma/v1/hello, который при GET-запросе возвращает JSON с сообщением. Параметр permission_callback позволяет управлять доступом к эндпоинту, здесь мы открыли его всем.

Поддержка параметров и валидация запросов

Для расширения функционала эндпоинта можно принимать параметры из URL и валидировать их. Например, добавим параметр name, чтобы персонализировать приветствие.

add_action('rest_api_init', 'wpma_register_hello_endpoint');
function wpma_register_hello_endpoint() {
  register_rest_route('wpma/v1', '/hello', [
    'methods' => 'GET',
    'callback' => 'wpma_hello_callback',
    'permission_callback' => '__return_true',
    'args' => [
      'name' => [
        'validate_callback' => function($param, $request, $key) {
          return is_string($param) && !empty($param);
        },
        'sanitize_callback' => 'sanitize_text_field'
      ],
    ],
  ]);
}

function wpma_hello_callback($request) {
  $name = $request->get_param('name') ?: 'гость';
  return [
    'message' => 'Привет, ' . $name . '! Добро пожаловать в WPMA REST API.'
  ];
}

Теперь запрос /wp-json/wpma/v1/hello?name=Иван вернёт персонализированное приветствие.

Создание REST API для кастомного пост типа

Если на сайте зарегистрирован собственный тип записи (custom post type), можно создать REST API эндпоинты для него, чтобы управлять этими записями через API. Рассмотрим пример с CPT «Книги».

Сначала регистрируем CPT с поддержкой REST API:

add_action('init', 'wpma_register_books_cpt');
function wpma_register_books_cpt() {
  register_post_type('book', [
    'label' => 'Книги',
    'public' => true,
    'show_in_rest' => true, // Важно для REST API
    'supports' => ['title', 'editor', 'custom-fields'],
    'rest_base' => 'books',
  ]);
}

После этого стандартные REST API методы для CPT будут доступны по адресу /wp-json/wp/v2/books. Можно получить список книг, создать новую, обновить или удалить.

Создание кастомного эндпоинта для поиска книг

Можно зарегистрировать отдельный эндпоинт для поиска книг по автору или жанру. Пример:

add_action('rest_api_init', 'wpma_register_books_search_endpoint');
function wpma_register_books_search_endpoint() {
  register_rest_route('wpma/v1', '/books/search', [
    'methods' => 'GET',
    'callback' => 'wpma_books_search_callback',
    'permission_callback' => '__return_true',
    'args' => [
      'author' => [
        'sanitize_callback' => 'sanitize_text_field'
      ],
      'genre' => [
        'sanitize_callback' => 'sanitize_text_field'
      ],
    ],
  ]);
}

function wpma_books_search_callback($request) {
  $author = $request->get_param('author');
  $genre = $request->get_param('genre');

  $args = [
    'post_type' => 'book',
    'posts_per_page' => 10,
    'meta_query' => [],
  ];

  if ($author) {
    $args['meta_query'][] = [
      'key' => 'author',
      'value' => $author,
      'compare' => 'LIKE',
    ];
  }

  if ($genre) {
    $args['meta_query'][] = [
      'key' => 'genre',
      'value' => $genre,
      'compare' => 'LIKE',
    ];
  }

  $query = new WP_Query($args);
  $results = [];

  if ($query->have_posts()) {
    while ($query->have_posts()) {
      $query->the_post();
      $results[] = [
        'id' => get_the_ID(),
        'title' => get_the_title(),
        'author' => get_post_meta(get_the_ID(), 'author', true),
        'genre' => get_post_meta(get_the_ID(), 'genre', true),
      ];
    }
    wp_reset_postdata();
  }

  return $results;
}

Данный эндпоинт позволяет искать книги по параметрам author и genre, передаваемым в URL.

Аутентификация и безопасность REST API в WordPress

По умолчанию публичные эндпоинты доступны всем, а для работы с приватными данными нужна аутентификация. В WordPress можно использовать несколько способов:

  • Куки и nonce — для запросов с фронтенда сайта, где пользователь авторизован.
  • Basic Auth — простой способ для внешних клиентов, требует передавать логин и пароль.
  • OAuth — более сложный, безопасный протокол для авторизации.
  • JWT (JSON Web Token) — популярный метод, можно реализовать с помощью плагинов.

Для реализации аутентификации с JWT можно использовать плагин JWT Authentication for WP REST API. Он позволяет безопасно получать токены и использовать их в заголовках запросов.

Пример ограничения доступа к эндпоинту

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

function wpma_permission_check() {
  return is_user_logged_in();
}

register_rest_route('wpma/v1', '/private-data', [
  'methods' => 'GET',
  'callback' => 'wpma_private_data_callback',
  'permission_callback' => 'wpma_permission_check',
]);

Такой эндпоинт будет возвращать данные только для авторизованных пользователей.

Использование готовых плагинов для расширения REST API

Существует несколько полезных плагинов, которые упрощают работу с REST API в WordPress:

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

Использование этих плагинов помогает быстро расширить функциональность API без необходимости писать много кода.

Пример интеграции REST API WordPress с внешним приложением на JavaScript

Давайте рассмотрим простой пример, как получить список постов с помощью REST API и вывести их на страницу с помощью JavaScript:

fetch('https://wpma.ru/wp-json/wp/v2/posts')
  .then(response => response.json())
  .then(posts => {
    const container = document.getElementById('posts');
    posts.forEach(post => {
      const postEl = document.createElement('div');
      postEl.innerHTML = `<h3>${post.title.rendered}</h3><p>${post.excerpt.rendered}</p>`;
      container.appendChild(postEl);
    });
  })
  .catch(error => console.error('Ошибка загрузки постов:', error));

Этот код можно вставить в любой HTML-документ, заменив URL на свой сайт. Так вы получите динамическое отображение контента WordPress на внешнем сайте или в SPA.

Как автоматически удалять старые изображения в WordPress
06.02.2026
Как создать автоматический импорт из CSV в WordPress
18.01.2026
Создать динамические формы в WordPress на AJAX без плагинов
04.01.2026
Как использовать WPRemark для автоматизации отзывов в WordPress
10.03.2026
Как автоматически удалять неиспользуемые термины таксономий в WordPress
08.04.2026