Связанные записи — отличный способ удержать посетителей на сайте, предлагая им релевантный контент. Если вы хотите автоматизировать процесс создания таких связей в 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 вы найдёте полезные инструменты и поддержку сообщества.