Как настроить автоматическое создание связанных записей на основе таксономий в WordPress

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

Почему стоит использовать автоматическое создание связанных записей по таксономиям

Ручное связывание записей требует много времени и не всегда масштабируемо. Автоматизация позволяет:

  • Обеспечить релевантность связанных записей за счёт общих таксономий.
  • Экономить время на поддержку контента.
  • Улучшить поведенческие факторы сайта, увеличив время на страницах.
  • Повысить SEO благодаря внутренним ссылкам.

При этом важно правильно реализовать выборку, чтобы не показывать слишком много или нерелевантных записей, и оптимизировать запросы к базе.

Основы создания функции автоматического подбора связанных записей

Для начала создадим функцию yarpp_get_related_posts_by_taxonomy(), которая будет принимать ID текущей записи, таксономию для сравнения и количество записей для вывода. Функция будет возвращать список ID связанных записей.

function yarpp_get_related_posts_by_taxonomy($post_id, $taxonomy = 'category', $limit = 5) {
    if (!taxonomy_exists($taxonomy)) {
        return [];
    }

    $terms = wp_get_post_terms($post_id, $taxonomy, ['fields' => 'ids']);
    if (empty($terms) || is_wp_error($terms)) {
        return [];
    }

    $args = [
        'post_type' => get_post_type($post_id),
        'posts_per_page' => $limit,
        'post__not_in' => [$post_id],
        'tax_query' => [
            [
                'taxonomy' => $taxonomy,
                'field' => 'term_id',
                'terms' => $terms,
            ],
        ],
        'ignore_sticky_posts' => true,
        'orderby' => 'rand',
    ];

    $query = new WP_Query($args);
    if (!$query->have_posts()) {
        return [];
    }

    return wp_list_pluck($query->posts, 'ID');
}

Эта функция делает запрос к базе, ищет записи того же типа, что и текущая, которые имеют общие термины в заданной таксономии, исключая саму запись. Результат — массив ID связанных записей.

Особенности и рекомендации

  • Используем orderby=rand для случайного показа связей, чтобы разнообразить контент.
  • Ограничиваем количество выводимых записей параметром $limit.
  • Фильтруем тип записи — полезно, если на сайте есть кастомные типы.

Вывод связанных записей с кастомным шаблоном

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

function yarpp_display_related_posts($post_id, $taxonomy = 'category', $limit = 5) {
    $related_ids = yarpp_get_related_posts_by_taxonomy($post_id, $taxonomy, $limit);
    if (empty($related_ids)) {
        echo '<p>Связанных записей не найдено.</p>';
        return;
    }

    echo '<div class="yarpp-related-posts"><h3>Похожие записи</h3><ul>';
    foreach ($related_ids as $related_id) {
        $title = get_the_title($related_id);
        $url = get_permalink($related_id);
        $thumbnail = get_the_post_thumbnail($related_id, 'thumbnail');

        echo '<li><a href="' . esc_url($url) . '" title="' . esc_attr($title) . '">';
        if ($thumbnail) {
            echo $thumbnail;
        } else {
            echo '<span class="no-thumbnail">Без изображения</span>';
        }
        echo '<span class="title">' . esc_html($title) . '</span></a></li>';
    }
    echo '</ul></div>';
}

Вы можете вызвать yarpp_display_related_posts(get_the_ID()); в файле single.php или в другом месте шаблона, где хотите показать связанные записи.

Использование фильтров и хуков для расширения функционала

Если вашему сайту нужны более сложные правила выбора связанных записей, можно добавить фильтры для изменения аргументов запроса или обработать результаты. Например, добавим фильтр yarpp_related_posts_args:

function yarpp_modify_related_posts_args($args, $post_id, $taxonomy) {
    // Пример: исключить записи с кастомным мета-полем 'exclude_from_related'
    $args['meta_query'] = [
        [
            'key' => 'exclude_from_related',
            'compare' => 'NOT EXISTS',
        ],
    ];
    return $args;
}
add_filter('yarpp_related_posts_args', 'yarpp_modify_related_posts_args', 10, 3);

// В функции yarpp_get_related_posts_by_taxonomy изменить вызов WP_Query:
$args = apply_filters('yarpp_related_posts_args', $args, $post_id, $taxonomy);
<

Это позволит гибко настраивать выборку, не меняя базовый код.

Популярные плагины для создания связанных записей и их особенности

Если вы не хотите писать код, есть готовые решения. Например:

  • YARPP (Yet Another Related Posts Plugin) — классика с гибкими настройками, но иногда сложная в кастомизации.
  • Clearfy Pro — оптимизационный плагин с функцией улучшения связанных записей и кеширования.
  • Contextual Related Posts — простой и эффективный плагин для показа связанных записей по содержимому и таксономиям.

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

Оптимизация производительности: кеширование и минимизация нагрузки

Выборка связанных записей может создавать дополнительную нагрузку на базу данных, особенно при большом количестве просмотров. Рекомендуется:

  • Кешировать результаты запроса, используя Transients API. Например:
function yarpp_get_related_posts_by_taxonomy_cached($post_id, $taxonomy = 'category', $limit = 5) {
    $cache_key = 'yarpp_related_' . $post_id . '_' . $taxonomy;
    $cached = get_transient($cache_key);
    if ($cached !== false) {
        return $cached;
    }

    $related = yarpp_get_related_posts_by_taxonomy($post_id, $taxonomy, $limit);
    set_transient($cache_key, $related, HOUR_IN_SECONDS);
    return $related;
}
  • Использовать индексы на таксономиях и мета-полях.
  • Сокращать количество выводимых записей.
  • При необходимости применять пагинацию или динамическую подгрузку через AJAX.

Заключение и рекомендации

Автоматическое создание связанных записей на основе таксономий — мощный инструмент повышения вовлечённости пользователей и улучшения SEO. Используйте приведённый код как основу, адаптируя под свои задачи и особенности сайта. Для профессиональных проектов рекомендуем дополнительно установить Clearfy Pro для оптимизации и кеширования.

Если нужна помощь с интеграцией или кастомизацией, на wpshop.ru вы найдёте полезные инструменты и поддержку сообщества.

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

⭐⭐⭐⭐⭐
Как избежать конфликтов между YARPP и WooCommerce при подборе связанных товаров
27.04.2026
YARPP и пагинация: как правильно настроить вывод связанных записей с разбивкой на страницы
30.12.2025
Как создать автоматические связи между записями по тегам в WordPress
07.02.2026
Как создать собственный виджет в WordPress: пошаговое руководство
03.11.2025
YARPP и WooCommerce: как сделать подбор связанных товаров в интернет-магазине
22.01.2026
×
WordPress
дай сайту суперсилу!

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

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