Создание динамического сайта на WordPress с использованием REST API

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

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

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

Основные преимущества использования REST API:

  • Асинхронная загрузка данных без перезагрузки страницы
  • Возможность создавать SPA (single page application) на базе WordPress
  • Расширяемость и гибкость за счет кастомных эндпоинтов

WordPress имеет встроенный REST API, который изначально поддерживает основные типы данных: посты, страницы, комментарии, пользователи и т.д.

Как включить и использовать REST API в WordPress

REST API включен по умолчанию в WordPress начиная с версии 4.7. Его базовый адрес выглядит так:

https://example.com/wp-json/wp/v2/posts

Этот запрос вернет список постов в формате JSON.

Для получения данных можно использовать стандартные HTTP-запросы с помощью fetch в JavaScript:

fetch('https://example.com/wp-json/wp/v2/posts')
  .then(response => response.json())
  .then(data => console.log(data));

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

Пример: создание динамического списка постов с подгрузкой через REST API

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

HTML-разметка:

<div id="wpin-posts"></div>
<button id="wpin-load-more">Загрузить ещё</button>

JavaScript-код для подгрузки постов:

let page = 1;
const container = document.getElementById('wpin-posts');
const button = document.getElementById('wpin-load-more');

function wpinLoadPosts() {
  fetch(`https://example.com/wp-json/wp/v2/posts?page=${page}&per_page=5`)
    .then(response => {
      if (!response.ok) throw new Error('Нет данных');
      return response.json();
    })
    .then(posts => {
      posts.forEach(post => {
        const div = document.createElement('div');
        div.innerHTML = `<h3>${post.title.rendered}</h3><p>${post.excerpt.rendered}</p>`;
        container.appendChild(div);
      });
      page++;
    })
    .catch(error => {
      button.disabled = true;
      button.textContent = 'Больше постов нет';
    });
}

button.addEventListener('click', wpinLoadPosts);

// Загрузка первых постов при загрузке страницы
wpinLoadPosts();

Такой простой код позволит динамически подгружать посты по 5 штук на страницу при клике на кнопку.

Создание кастомного эндпоинта REST API в WordPress

Стандартных эндпоинтов может быть недостаточно, если нужно возвращать данные в специальном формате или получать данные из кастомных таблиц. Для этого можно создать свой собственный эндпоинт с помощью хука rest_api_init.

Пример создания эндпоинта, который возвращает список постов с дополнительным полем:

add_action('rest_api_init', function () {
  register_rest_route('wpin/v1', '/custom-posts', array(
    'methods' => 'GET',
    'callback' => 'wpin_custom_posts_endpoint',
  ));
});

function wpin_custom_posts_endpoint($request) {
  $args = array(
    'post_type' => 'post',
    'posts_per_page' => 10,
  );
  $query = new WP_Query($args);
  $posts = array();
  while ($query->have_posts()) {
    $query->the_post();
    $posts[] = array(
      'id' => get_the_ID(),
      'title' => get_the_title(),
      'custom_field' => get_post_meta(get_the_ID(), 'custom_field_key', true),
    );
  }
  wp_reset_postdata();
  return rest_ensure_response($posts);
}

После добавления этого кода в файл плагина или functions.php темы, эндпоинт будет доступен по адресу:

https://example.com/wp-json/wpin/v1/custom-posts

Это позволит получить данные постов с дополнительным кастомным полем.

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

1. WP REST API Controller

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

2. JWT Authentication for WP REST API

Добавляет поддержку JWT-токенов для аутентификации в REST API, что упрощает защиту и управление доступом.

3. WPGraphQL

Альтернатива REST API, предоставляющая мощный GraphQL интерфейс для запросов данных WordPress.

Как интегрировать REST API с современным фронтендом

Для создания динамичных интерфейсов можно использовать JavaScript-фреймворки. Рассмотрим пример на React:

import React, { useEffect, useState } from 'react';

function WpinPosts() {
  const [posts, setPosts] = useState([]);
  const [page, setPage] = useState(1);

  useEffect(() => {
    fetch(`https://example.com/wp-json/wp/v2/posts?page=${page}&per_page=5`)
      .then(response => response.json())
      .then(data => setPosts(prev => [...prev, ...data]))
      .catch(() => alert('Ошибка загрузки постов'));
  }, [page]);

  return (
    <div>
      {posts.map(post => (
        <div key={post.id}>
          <h3 dangerouslySetInnerHTML={{ __html: post.title.rendered }} />
          <div dangerouslySetInnerHTML={{ __html: post.excerpt.rendered }} />
        </div>
      ))}
      <button onClick={() => setPage(page + 1)}>Загрузить ещё</button>
    </div>
  );
}

export default WpinPosts;

Такой компонент подгружает посты и отображает их без перезагрузки.

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

При работе с REST API важно учитывать:

  • Авторизация и права доступа. Запросы на изменение данных должны быть защищены, используйте nonce, JWT или OAuth.
  • Кэширование. Для снижения нагрузки на сервер используйте плагин Clearfy Pro, который умеет оптимизировать REST API запросы и управлять кэшем.
  • Ограничение объема данных. Используйте пагинацию и фильтры, чтобы не возвращать слишком много записей за один запрос.

Итог

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

Для более глубокой оптимизации и управления отзывами можно использовать плагины, например, Clearfy Pro.

Автоматическое удаление товаров из корзины WooCommerce при отсутствии на складе
29.04.2026
Как удалить записи со старым мета-полем даты в WordPress
08.12.2025
Как удалить старые посты из очереди кронов в WordPress
08.02.2026
Как отключить Gutenberg только для определённых типов записей в WordPress
20.02.2026
Как добавить уникальный фильтр на таксономии WordPress с примерами кода
03.03.2026