Плагин Yet Another Related Posts Plugin (YARPP) — один из самых популярных инструментов для вывода связанных записей в WordPress. Несмотря на удобный интерфейс и готовые настройки, часто возникает необходимость глубже кастомизировать алгоритм подбора и отображения связанных материалов. Для этого YARPP предоставляет набор фильтров и хуков, которые позволяют изменять логику работы плагина без правки исходного кода.
Что такое фильтры и хуки в YARPP и зачем они нужны
В WordPress фильтры (filters) и действия (actions/hooks) — это механизмы расширения и модификации поведения плагинов и темы без изменения их исходников. YARPP реализует множество таких точек расширения, благодаря которым можно:
- изменять SQL-запрос, который выбирает связанные записи;
- фильтровать список найденных записей перед выводом;
- настраивать HTML-разметку вывода;
- управлять кэшированием и прочими внутренними процессами.
Это очень удобно, когда стандартные настройки не дают нужного результата, а менять базовые файлы плагина опасно из-за возможных обновлений.
Основные фильтры YARPP для изменения выбора связанных записей
Рассмотрим ключевые фильтры, которые помогают влиять на подбор похожих материалов.
yarpp_pre_get_related — изменение SQL-запроса
Этот фильтр позволяет полностью заменить SQL-запрос, который YARPP использует для поиска связанных записей. Используйте его, если хотите реализовать свою логику подбора.
function yarpp_custom_pre_get_related($query, $post_id, $args) {
global $wpdb;
// Пример: выводим 5 последних записей из той же категории
$sql = $wpdb->prepare(
"SELECT ID, post_title FROM $wpdb->posts p
INNER JOIN $wpdb->term_relationships tr ON (p.ID = tr.object_id)
WHERE p.post_status = 'publish'
AND p.ID != %d
AND tr.term_taxonomy_id IN (SELECT term_taxonomy_id FROM $wpdb->term_relationships WHERE object_id = %d)
ORDER BY post_date DESC
LIMIT 5",
$post_id, $post_id
);
return $sql;
}
add_filter('yarpp_pre_get_related', 'yarpp_custom_pre_get_related', 10, 3);
В данном примере мы выводим 5 последних записей из тех же категорий, что и текущая запись, игнорируя стандартный алгоритм YARPP.
yarpp_related — фильтрация массива связанных записей
Если SQL-запрос устраивает, но нужно отфильтровать или дополнительно обработать массив найденных записей, используйте этот фильтр.
function yarpp_custom_related_filter($related_posts, $post_id, $args) {
// Например, исключаем записи с определённым ID
return array_filter($related_posts, function($post) {
return $post->ID !== 42;
});
}
add_filter('yarpp_related', 'yarpp_custom_related_filter', 10, 3);
Кастомизация вывода: изменение шаблонов и HTML с помощью хуков
YARPP позволяет не только выбирать связанные записи, но и настраивать их вывод. Для этого предусмотрены фильтры, меняющие HTML-разметку.
yarpp_template_vars — добавление своих переменных в шаблон
С помощью этого фильтра можно передать дополнительные данные в шаблон вывода.
function yarpp_custom_template_vars($vars, $post_id, $args) {
$vars['custom_message'] = 'Похожие записи, подобранные специально для вас';
return $vars;
}
add_filter('yarpp_template_vars', 'yarpp_custom_template_vars', 10, 3);
yarpp_template — выбор собственного шаблона вывода
Если вас не устраивают стандартные шаблоны, можно создать свой и подключить его через этот фильтр.
function yarpp_custom_template($template, $args) {
// Путь к кастомному шаблону в теме
$custom_template = get_stylesheet_directory() . '/yarpp-custom-template.php';
if (file_exists($custom_template)) {
return $custom_template;
}
return $template;
}
add_filter('yarpp_template', 'yarpp_custom_template', 10, 2);
Практические советы по работе с фильтрами YARPP
При работе с хуками и фильтрами плагина YARPP стоит учесть несколько важных моментов:
- Всегда тестируйте изменения на локальной копии сайта, чтобы избежать сбоев на живом ресурсе.
- Используйте child-тему или отдельный плагин для добавления кастомного кода, чтобы не потерять изменения при обновлениях.
- Применяйте дебаг и логирование для отладки SQL-запросов и фильтрованных данных.
- Оптимизируйте запросы, чтобы не ухудшать производительность сайта — YARPP может вызывать нагрузку при большом количестве записей.
Дополнительные плагины для расширения возможностей YARPP
Для более гибкого управления связанными записями можно использовать дополнения к YARPP или альтернативные плагины.
- YARPP Cache: улучшает производительность за счёт кэширования результатов.
- YARPP Template Editor: удобный визуальный редактор шаблонов вывода.
- Contextual Related Posts: альтернативный плагин с другим алгоритмом подбора.
Выбирая инструмент, ориентируйтесь на задачи сайта и возможности хостинга.
Заключение
Фильтры и хуки YARPP — мощный инструмент для разработчиков, позволяющий максимально тонко настраивать подбор и вывод связанных записей в WordPress. Используя приведённые примеры и рекомендации, вы сможете адаптировать работу плагина под любые требования проекта, улучшить релевантность подборки и повысить вовлечённость пользователей.