Плагин YARPP (Yet Another Related Posts Plugin) — один из самых популярных решений для вывода связанных записей в WordPress. Однако стандартная настройка часто не позволяет гибко фильтровать связанные записи по определённым категориям, что важно для многих проектов с чёткой тематической структурой.
Почему важно выводить связанные записи по категориям
По умолчанию YARPP подбирает связанные записи, основываясь на релевантности контента, но без жёсткого ограничения по категориям. В результате в блоке «Похожие записи» могут появляться материалы из других разделов сайта, что снижает релевантность и пользовательский опыт.
Например, если у вас новостной сайт с категориями «Технологии», «Спорт» и «Культура», то при чтении статьи из раздела «Технологии» логично показывать только связанные материалы из этой же категории, чтобы удержать пользователя именно на тематически близких публикациях.
Реализовать это можно через кастомизацию фильтров YARPP с помощью PHP-кода, что мы и рассмотрим ниже.
Настройка вывода связанных записей по категориям через фильтр yarpp_related
Основной способ кастомизации результатов YARPP — использование фильтра yarpp_related, который позволяет изменить массив связанных записей перед выводом. Мы напишем функцию, которая отфильтрует записи, чтобы в результате остались только те, что относятся к категориям текущей записи.
function yarppru_filter_related_by_category($related_posts, $post_id) {
// Получаем категории текущей записи
$categories = wp_get_post_categories($post_id);
if (empty($categories)) {
return $related_posts; // Если нет категорий, возвращаем без изменений
}
// Фильтруем связанные записи
$filtered = array_filter($related_posts, function($post) use ($categories) {
$post_cats = wp_get_post_categories($post->ID);
return (bool) array_intersect($categories, $post_cats);
});
return $filtered;
}
add_filter('yarpp_related', 'yarppru_filter_related_by_category', 10, 2);Эта функция берёт массив связанных записей, полученных YARPP, и оставляет только те, у которых есть хотя бы одна категория из набора категорий текущей записи. Таким образом, в блоке «Похожие записи» будут выводиться только материалы из тех же категорий.
Разбор кода и особенности
Функция использует стандартные WordPress функции wp_get_post_categories() для получения ID категорий записи. Фильтрация происходит на PHP уровне после получения всех связанных записей YARPP, что может повлиять на производительность на очень больших сайтах, но для большинства проектов этот подход оптимален и прост в реализации.
Если нужно более производительное решение, можно рассмотреть изменение самого запроса YARPP через фильтр yarpp_get_related_sql, но это более сложная задача и требует глубокого понимания SQL и структуры данных YARPP.
Дополнительные советы по оптимизации и расширению
1. Кэширование результатов: Чтобы уменьшить нагрузку на базу данных, можно включить кэширование YARPP и дополнительно кэшировать результаты после фильтрации по категориям с помощью Transients API.
2. Вывод в шаблоне: При необходимости можно создать кастомный шаблон вывода связанных записей, чтобы визуально выделять категорию или добавлять другие метаданные.
3. Расширение фильтрации: Аналогично можно фильтровать по таксономиям, тегам или пользовательским полям, расширяя логику по своему усмотрению.
Пример кастомного шаблона для связанных записей с категориями
Создайте файл yarpp-template-category-filter.php в папке вашей темы и добавьте туда следующий код:
<ul class="yarpp-related-list">
<?php foreach ($related_posts as $post) : setup_postdata($post); ?>
<li>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
<span class="yarpp-category"><?php echo get_the_category_list(', '); ?></span>
</li>
<?php endforeach; wp_reset_postdata(); ?>
</ul>Для подключения шаблона добавьте в functions.php или в плагин код:
function yarppru_use_category_template($template, $post_id) {
return locate_template('yarpp-template-category-filter.php');
}
add_filter('yarpp_related_output_template', 'yarppru_use_category_template', 10, 2);Использование плагинов для расширения функционала YARPP
Если вы хотите более продвинутый функционал без программирования, обратите внимание на следующие плагины:
- Clearfy Pro — плагин для оптимизации WordPress, с возможностями для управления связями между записями и их кэшированием.
- Expert Review — инструмент для улучшения пользовательского взаимодействия, может помочь в дополнительной фильтрации и выводе связанных материалов.
Использование этих плагинов в связке с YARPP позволит повысить релевантность и производительность связанных записей.
Заключение
Фильтрация связанных записей по категориям в YARPP — распространённая задача, которую можно решить простым и эффективным способом с помощью PHP-фильтра yarpp_related. Такой подход улучшает пользовательский опыт, увеличивает время нахождения на сайте и повышает релевантность контента.
При необходимости можно расширять логику фильтрации, создавать кастомные шаблоны вывода и интегрировать дополнительные плагины для оптимизации и расширения функционала.