В этой статье разберём, как создать на сайте WordPress автоматический раздел, который будет выводить релевантные записи на основе выбранных меток или категорий. Такой функционал часто требуется для улучшения навигации по сайту и повышения вовлечённости пользователей. Мы рассмотрим как реализовать это с помощью кода, а также какие плагины помогут упростить задачу.
Почему важно создавать автоматические разделы с релевантным контентом
Автоматические разделы с постами по определённым тематическим признакам позволяют:
- Поддерживать интерес посетителей, предлагая им похожие материалы.
- Улучшить внутреннюю перелинковку, что положительно сказывается на SEO.
- Снизить рутинную работу по ручному созданию и обновлению разделов.
Реализовать это можно разными способами — от простых виджетов до сложных кастомных шаблонов. Ниже мы подробно рассмотрим практические варианты.
Создание кастомного запроса для вывода релевантных постов
Для начала рассмотрим, как на PHP уровне реализовать вывод постов, которые имеют общие метки или категории с текущей записью. Это позволит динамически показывать похожие материалы.
Основной код для вывода похожих постов по меткам
Добавьте следующий код в файл functions.php вашей темы или в кастомный плагин:
function wpbloger_get_related_posts_by_tags($post_id, $number = 5) {
$tags = wp_get_post_tags($post_id);
if (!$tags) return [];
$tag_ids = array_map(function($tag) { return $tag->term_id; }, $tags);
$args = [
'tag__in' => $tag_ids,
'post__not_in' => [$post_id],
'posts_per_page' => $number,
'ignore_sticky_posts' => true
];
$query = new WP_Query($args);
return $query->posts;
}Этот метод возвращает массив постов с похожими тегами, исключая текущий пост. Можно вывести их в любом месте шаблона. Например:
$related_posts = wpbloger_get_related_posts_by_tags(get_the_ID());
if ($related_posts) {
echo '<ul>';
foreach ($related_posts as $post) {
echo '<li><a href="' . get_permalink($post) . '">' . esc_html(get_the_title($post)) . '</a></li>';
}
echo '</ul>';
}Вывод похожих постов по категориям
Аналогично можно сделать вывод по категориям:
function wpbloger_get_related_posts_by_categories($post_id, $number = 5) {
$categories = wp_get_post_categories($post_id);
if (!$categories) return [];
$args = [
'category__in' => $categories,
'post__not_in' => [$post_id],
'posts_per_page' => $number,
'ignore_sticky_posts' => true
];
$query = new WP_Query($args);
return $query->posts;
}Такой подход гибкий, и вы можете комбинировать запросы или расширять их дополнительные параметры.
Использование плагинов для автоматизации создания разделов с релевантными постами
Если не хочется писать код, можно воспользоваться надёжными плагинами, которые позволяют выводить похожие посты:
- Contextual Related Posts — бесплатный и популярный плагин, который выводит похожие записи на основе содержимого и таксономий.
- Related Posts for WordPress — простой в настройке плагин с возможностью кеширования запросов.
- WPGPT — если у вас есть интерес к AI-тематике, этот плагин позволяет создавать умные рекомендации и автоматизировать подбор релевантного контента, используя искусственный интеллект. Подробнее на официальном сайте.
Эти плагины можно настроить через панель администратора, задавая условия вывода, количество постов, шаблоны отображения и прочее.
Пример создания виджета с автоматическим выводом релевантных постов
Рассмотрим, как создать простой виджет, который будет показывать релевантные по тегам посты текущей записи.
class WPBloger_Related_Posts_Widget extends WP_Widget {
public function __construct() {
parent::__construct('wpbloger_related_posts', 'Релевантные посты WPBloger');
}
public function widget($args, $instance) {
if (!is_single()) return;
$post_id = get_the_ID();
$posts = wpbloger_get_related_posts_by_tags($post_id, 5);
if (!$posts) return;
echo $args['before_widget'];
echo $args['before_title'] . 'Похожие записи' . $args['after_title'];
echo '<ul>';
foreach ($posts as $post) {
echo '<li><a href="' . get_permalink($post) . '">' . esc_html(get_the_title($post)) . '</a></li>';
}
echo '</ul>';
echo $args['after_widget'];
}
}
function wpbloger_register_related_posts_widget() {
register_widget('WPBloger_Related_Posts_Widget');
}
add_action('widgets_init', 'wpbloger_register_related_posts_widget');После добавления виджета вы сможете разместить его в сайдбаре или футере, и он будет автоматически показывать релевантные посты.
Оптимизация и кеширование запросов для автоматических разделов
При динамическом выводе связанных записей важно учитывать нагрузку на сервер. Для этого рекомендуем:
- Использовать встроенное кеширование WP_Query с помощью Transients API.
- Применять плагины кеширования страниц и объектов.
- Ограничивать количество выводимых постов.
Пример кеширования результатов функции:
function wpbloger_get_related_posts_by_tags_cached($post_id, $number = 5) {
$cache_key = 'wpbloger_related_posts_' . $post_id;
$cached = get_transient($cache_key);
if ($cached !== false) {
return $cached;
}
$posts = wpbloger_get_related_posts_by_tags($post_id, $number);
set_transient($cache_key, $posts, 12 * HOUR_IN_SECONDS);
return $posts;
}Это значительно снизит количество запросов к базе данных и ускорит загрузку страниц.
Итоги и рекомендации
Создание автоматических разделов с соответствующими постами в WordPress — полезный приём для улучшения UX и SEO. Реализовать его можно как на уровне кода, так и с помощью готовых плагинов. Важно учитывать нагрузку и оптимизировать запросы.
Рекомендуем внимательно тестировать вывод, чтобы показывать действительно релевантный контент и не перегружать интерфейс.