Плагин Yet Another Related Posts Plugin (YARPP) — один из самых популярных инструментов для вывода связанных записей в WordPress. Однако из коробки YARPP работает только в темах, выводя связанные записи в шаблонах PHP. Если вы создаёте SPA, мобильное приложение или просто хотите расширить функциональность своего REST API, то полезно научиться добавлять связанные записи YARPP непосредственно в REST API WordPress.
Зачем добавлять связанные записи YARPP в REST API WordPress
REST API стал стандартом для взаимодействия WordPress с внешними системами: фронтендами на React, мобильными приложениями, другим сайтом. Однако по умолчанию в ответах API нет связанных записей, которые формирует YARPP. Добавляя их, вы автоматически повышаете качество пользовательского опыта на клиенте — можно динамически показывать релевантный контент без лишних запросов.
Возможности расширения REST API с помощью YARPP:
- Вывод связанных записей прямо в ответах /wp-json/wp/v2/posts;
- Кастомизация данных связанных постов — вывод миниатюр, ссылок, даты;
- Оптимизация количества запросов к серверу на клиенте;
- Использование преимуществ кэширования YARPP в API;
- Гибкая настройка логики подбора связанных записей через фильтры YARPP.
Как добавить связанные записи YARPP в REST API: пошаговое руководство
Для вывода связанных записей YARPP в REST API нам нужно расширить стандартный REST API маршрут для постов, добавив новое поле с результатами YARPP. Сделаем это с помощью хука rest_api_init и функции register_rest_field.
1. Регистрируем новое поле в REST API
Добавим в файл functions.php вашей темы или в отдельный плагин следующий код:
add_action('rest_api_init', function() {
register_rest_field('post', 'yarpp_related_posts', [
'get_callback' => 'yarpp_ru_get_related_posts',
'schema' => null,
]);
});
Здесь мы добавляем поле yarpp_related_posts к типу записи post. Теперь нужно реализовать функцию yarpp_ru_get_related_posts, которая будет возвращать связанные записи.
2. Получаем связанные записи через YARPP
Для получения связанных записей используем функцию get_related из YARPP. Она возвращает массив объектов WP_Post.
function yarpp_ru_get_related_posts($object, $field_name, $request) {
if (!function_exists('get_related')) {
return [];
}
$post_id = $object['id'];
$related_posts = get_related($post_id, 'posts', ['limit' => 5]);
if (empty($related_posts)) {
return [];
}
$result = [];
foreach ($related_posts as $post) {
$result[] = [
'id' => $post->ID,
'title' => get_the_title($post->ID),
'excerpt' => get_the_excerpt($post->ID),
'permalink' => get_permalink($post->ID),
'thumbnail' => get_the_post_thumbnail_url($post->ID, 'thumbnail'),
'date' => get_the_date('', $post->ID),
];
}
return $result;
}
В этом примере мы возвращаем ID, заголовок, краткое описание, ссылку, миниатюру и дату публикации связанных записей. Это достаточно для большинства случаев использования на фронтенде.
Оптимизация и кэширование связанных записей в REST API
YARPP по умолчанию использует кэширование запросов связанных записей, что помогает снизить нагрузку на базу данных. Важно не отключать кэш и при необходимости обновлять его после изменений.
Если ваш сайт высоконагруженный, рекомендуем дополнительно использовать сторонние кэш-плагины или решения, чтобы кешировать ответы REST API. Например, плагин Clearfy Pro умеет оптимизировать работу WordPress и REST API.
Пример использования расширенного REST API на фронтенде
Допустим, у вас React-приложение, и вы хотите вывести список связанных записей под основным постом. Запрос будет выглядеть так:
fetch('https://example.com/wp-json/wp/v2/posts/123')
.then(response => response.json())
.then(post => {
console.log(post.yarpp_related_posts); // массив связанных записей
});
Теперь можно легко отобразить связанные записи, используя данные из поля yarpp_related_posts, без дополнительных запросов к базе данных.
Дополнительные настройки и фильтры YARPP для REST API
Вы можете использовать фильтры YARPP для настройки логики подбора связанных записей. Например, ограничить подбор по таксономиям, типам записей или мета-данным. Это делается через хуки yarpp_related и yarpp_related_where.
Пример фильтрации по категории:
add_filter('yarpp_related_where', function($where, $args) {
global $wpdb;
$category_id = 5; // ID нужной категории
$where .= $wpdb->prepare(" AND EXISTS (SELECT 1 FROM {$wpdb->term_relationships} tr WHERE tr.object_id = p.ID AND tr.term_taxonomy_id = %d)", $category_id);
return $where;
}, 10, 2);
Это позволит выводить только связанные записи из конкретной категории, что удобно при интеграции с REST API.
Альтернативные плагины и инструменты для связанных записей в REST API
Если вам нужна более глубокая интеграция с REST API и расширенная логика, можно рассмотреть плагины, которые изначально поддерживают REST API, например:
- Expert Review — для отзывов и связанных материалов;
- плагин ABC Pagination — для удобной пагинации связанных записей;
- WPCommunity или JournalX — темы с расширенными возможностями работы с контентом и API.
Но в большинстве случаев YARPP + кастомное расширение REST API покрывают типовые задачи.