WordPress — одна из самых популярных систем управления контентом (CMS) в мире, которая помогает малому и крупному бизнесу создавать разнообразный веб-контент. Но WordPress вышел за рамки поддержки только блогов, во многом благодаря REST API. В этом руководстве мы узнаем как создать REST API endpoints для получения данных из базы не заходя на сам сайт или Админ-панель.
Введение
Преимущества WordPress REST API
WordPress REST API соединяет WordPress с внешними веб-приложениями, облегчая коммуникацию и помогая создавать интерактивные и захватывающие опции, которые легко интегрируются с CMS-платформой. Этот API использует endpoints для получения и управления контентом WordPress в формате JSON. С помощью этих endpoints можно создавать, читать, обновлять и удалять (CRUD) контент WordPress удаленно, не заходя в админ-панель WordPress, что добавляет гибкость и расширяет функциональность WordPress за пределы его базовых возможностей.
Понимание WordPress REST API
WordPress REST API — это мощный интерфейс, который позволяет взаимодействовать с сайтами WordPress программно, используя стандартные HTTP-методы. По умолчанию он позволяет получать и изменять различные типы данных WordPress, такие как записи, страницы, комментарии, пользователи и таксономии, в структурированном формате JSON. Также можно удаленно выполнять действия CRUD с контентом.
Расширение возможностей WordPress REST API
Истинная ценность WordPress REST API заключается в его расширяемости через пользовательские endpoints. Вы можете создавать пользовательские endpoints, чтобы адаптировать API к конкретным потребностям, таким как интеграция дополнительных функций, сторонних сервисов или уникальных структур данных. Эта гибкость позволяет создавать высоко настроенные и функциональные приложения на базе WordPress.
Планирование вашего пользовательского API endpoint
Планирование структуры и цели ваших пользовательских endpoints является ключом к эффективной разработке API. Пользовательские endpoints, адаптированные к вашим конкретным потребностям, требуют тщательного рассмотрения для обеспечения оптимальной функциональности. Стратегическое планирование способствует масштабируемости и адаптируемости, обеспечивая готовность endpoints к изменяющимся требованиям бизнеса.
Преимущества планирования:
- Ясность функции endpoints — Планирование позволяет четко определить функцию endpoints, ожидаемые типы данных и их использование.
- Последовательность и эффективность разработки — Планирование обеспечивает последовательность использования endpoints, типов ответов и форматирования, что улучшает взаимодействие с API.
- Масштабируемость и адаптируемость — Определение потребностей endpoints помогает подготовить их к изменяющимся требованиям бизнеса без необходимости полного редизайна.
- Безопасность — Правильное планирование endpoints помогает определить необходимость аутентификации для доступа или управления данными. Для контента, содержащего конфиденциальные данные, необходимо определить требования безопасности и внедрить меры, такие как авторизация и контроль доступа.
Создание пользовательского типа записи для вашего endpoints
Для начала вам нужно создать пользовательский тип записи.
Откройте файл function.php
вашей темы и добавьте следующий код:
function create_custom_testimonial_type() {
register_post_type('testimonials', array(
'labels' => array(
'name' => 'Testimonials',
'singular_name' => 'Testimonial',
),
'public' => true,
'has_archive' => true,
'show_in_rest' => true, // Включает поддержку REST API
));
}
add_action('init', 'create_custom_testimonial_type');
Этот код создает пользовательский тип записи «testimonials» и включает поддержку WordPress REST API (‘show_in_rest’ => true). Хук add_action вызывает функцию create_custom_testimonial_type и запускает ее во время выполнения.
Регистрация пользовательского endpoints в WordPress
Регистрация пользовательского endpoints делает его доступным для использования через REST API. Это включает использование функции register_rest_route
, вызов её на хуке rest_api_init
и предоставление метода обратного вызова, который будет вызван при обращении к маршруту.
Добавьте следующий код в файл function.php
вашей темы:
add_action('rest_api_init', 'register_testimonial_rest_route');
function register_testimonial_rest_route(){
register_rest_route(
'custom/v2',
'/testimonials',
array(
'methods' => 'GET',
'callback' => 'get_testimonials',
)
);
}
Эта функция register_rest_route()
принимает три параметра:
- Пространство имен маршрута (
$route_namespace
) — это первая часть URL и должна следовать шаблону vendor/version number. Пространство имен помогает различать endpoints и позволяет пользователям обращаться за поддержкой для вашего пользовательского endpoints. В этом руководстве используется пространство именcustom/v2
. - Базовый URL (
$route
) — это часть URL после пространства имен и указывает на маршрут, который вы хотите зарегистрировать. В данном случае, используется маршрут/testimonials
, который указывает endpoints на получение отзывов. - Параметры endpoints (
$args
) — это массив, содержащий HTTP-метод, используемый при вызове маршрута, и функцию обратного вызова, которая будет вызвана при отправке запроса.
После регистрации вашего маршрута, адрес endpoints будет иметь формат site-address/wp-json/namespace/route
. В нашем примере это будет https://ваш-сайт/wp-json/custom/v2/testimonials
.
Реализация функции callback для endpoints
После создания пользовательского типа записи и регистрации вашего пользовательского endpoints, следующим шагом будет написание функции обратного вызова (callback). Эта функция будет вызываться каждый раз, когда к endpoints будет обращаться запрос.
function get_testimonials() {
$testimonials = array();
$args = array(
'post_type' => 'testimonials',
'nopaging' => true,
);
$query = new WP_Query($args);
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
$testimonial_data = array(
'title' => get_the_title(),
'content' => get_the_content(),
// Добавьте другие поля по необходимости
);
$testimonials[] = $testimonial_data;
}
wp_reset_postdata();
}
return rest_ensure_response($testimonials);
}
- Инициализация массива отзывов: создайте пустой массив
$testimonials
, чтобы хранить данные отзывов, полученные из WordPress. - Настройка параметров запроса: создайте массив
$args
с параметрами запроса для вызоваWP_Query
. - Создание экземпляра
WP_Query
: создайте экземпляр классаWP_Query
, передав в него массив$args
, чтобы выполнить запрос на основе заданных параметров и сохранить результаты в переменной$query
. - Условная проверка и цикл: проверьте, есть ли записи отзывов. Затем создайте цикл
while
, чтобы перебрать записи и вернуть заголовок и содержание каждого отзыва. - Сброс постданных: используйте функцию
wp_reset_postdata()
, чтобы восстановить глобальную переменную$post
до текущей записи для предотвращения конфликтов в последующих запросах. - Возвращение ответа: верните массив
$testimonials
с помощью функцииrest_ensure_response()
для обеспечения корректного формата ответа.
Тестирование endpoints
Для тестирования созданного выше эндпоинта можно воспользоваться методами ниже:
- Использование Postman: вы можете использовать Postman для проверки доступности вашего endpoints и данных. Отправьте GET-запрос на
https://ваш-сайт/wp-json/custom/v2/testimonials
.
- Использование браузера: вы также можете проверить ваш endpoints в браузере, введя URL-адрес
https://ваш-сайт/wp-json/custom/v2/testimonials
в адресную строку.
Заключение
В этом руководстве мы реализовали пользовательский маршрут для WordPress API. Чтобы пользователи могли получать доступ к данным вашей базы данных WordPress и взаимодействовать с ними, вам просто нужно зарегистрировать маршрут, который реализует функцию обратного вызова. Эти опции могут быть вам полезны при разработке headless проектов: