YARPP и REST API: как добавить связанные записи в ответы API WordPress

Плагин 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 покрывают типовые задачи.

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Оптимизация кода YARPP для улучшения производительности WordPress
07.01.2026
Как создать свой шорткод в WordPress: практическое руководство с примерами PHP и JavaScript
13.11.2025
Как создать собственный блок связанных записей с использованием YARPP и AJAX
21.03.2026
Оптимизация обработки данных в YARPP для крупных сайтов на WordPress
28.02.2026
Как настроить автоматическое создание связанных записей на основе таксономий в WordPress
14.02.2026
×
WordPress
дай сайту суперсилу!

Скидки на топовые темы и плагины

Активировать суперсилу ⋙