Плагин YARPP (Yet Another Related Posts Plugin) — один из самых популярных инструментов для вывода связанных записей в WordPress. Несмотря на обширный набор настроек, часто возникает необходимость глубокой кастомизации логики подбора связанных материалов. В этой статье рассмотрим, как использовать встроенные хуки и фильтры YARPP для индивидуальной настройки результатов, а также приведём примеры собственного кода для интеграции.
Что такое хуки и фильтры в YARPP и почему они важны
WordPress изначально построен на системе хуков (actions) и фильтров (filters), которые позволяют вмешиваться в процессы без изменения ядра. YARPP наследует эту архитектуру, предоставляя разработчикам возможность:
- Изменять SQL-запросы, которые выбирают связанные записи
- Фильтровать массив результатов перед выводом
- Добавлять свои критерии отбора и сортировки
- Внедрять дополнительную логику по отображению
Это критично, если вы хотите учитывать в подборе уникальные параметры, например, метаданные, кастомные поля или исключать определённые категории.
Основные фильтры YARPP для кастомизации выборки связанных записей
Рассмотрим ключевые фильтры, которые помогут изменить поведение плагина.
yarpp_related_filter — фильтр выборки SQL
Этот фильтр позволяет изменить SQL-запрос, который формирует список связанных записей. Например, можно добавить условие по метаполям или исключить записи из определённой категории.
add_filter('yarpp_related_filter', 'yarppru_filter_related_sql', 10, 2);
function yarppru_filter_related_sql($query, $post) {
// Исключаем записи из категории с ID 5
$query .= " AND ID NOT IN (SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id = 5)";
return $query;
}В этом примере SQL дополняется условием исключения записей из категории 5. Такой подход позволяет гибко управлять выборкой.
yarpp_related_query_args — фильтрация аргументов WP_Query
Если вы предпочитаете работать через WP_Query, этот фильтр позволяет изменить параметры запроса. Например, добавить сортировку по дате или метаданным.
add_filter('yarpp_related_query_args', 'yarppru_modify_query_args', 10, 2);
function yarppru_modify_query_args($args, $post) {
// Сортируем связанные записи по дате публикации по убыванию
$args['orderby'] = 'date';
$args['order'] = 'DESC';
return $args;
}Это удобно, если вы хотите вывести самые свежие связанные материалы.
yarpp_related — фильтр массива связанных записей перед выводом
Если необходимо изменить уже выбранный список, например, убрать дубли или добавить собственные элементы, используйте этот фильтр.
add_filter('yarpp_related', 'yarppru_filter_related_array', 10, 2);
function yarppru_filter_related_array($related_posts, $post) {
// Удаляем записи с заголовком длиной меньше 10 символов
foreach ($related_posts as $key => $related) {
if (strlen($related->post_title) < 10) {
unset($related_posts[$key]);
}
}
return $related_posts;
}Пример: добавляем фильтрацию по кастомному полю в YARPP
Предположим, в записях есть кастомное поле related_group, и мы хотим показывать только записи с таким же значением поля, что и у текущей записи.
add_filter('yarpp_related_filter', 'yarppru_filter_by_custom_field', 10, 2);
function yarppru_filter_by_custom_field($query, $post) {
global $wpdb;
$meta_key = 'related_group';
$meta_value = get_post_meta($post->ID, $meta_key, true);
if (!$meta_value) {
return $query; // если поле пустое, не меняем запрос
}
$query .= $wpdb->prepare(
" AND ID IN (
SELECT post_id FROM {$wpdb->postmeta}
WHERE meta_key = %s AND meta_value = %s
)",
$meta_key,
$meta_value
);
return $query;
}Этот код расширяет SQL запрос YARPP, чтобы показывать только записи из той же группы, что и текущая, по значению кастомного поля.
Оптимизация производительности YARPP при кастомизации
Добавление сложных условий в запросы может замедлять сайт, особенно при большом объёме записей. Вот несколько советов, как минимизировать нагрузку:
- Используйте индексацию в базе данных для кастомных полей, которые применяете в запросах
- Кэшируйте результаты выборки, например, с помощью Transient API WordPress
- Ограничивайте количество связанных записей, выводимых на странице
- Проверяйте запросы через инструменты профилирования, чтобы выявить узкие места
Пример кэширования результатов YARPP:
add_filter('yarpp_related', 'yarppru_cache_related_results', 10, 2);
function yarppru_cache_related_results($related_posts, $post) {
$cache_key = 'yarpp_related_' . $post->ID;
set_transient($cache_key, $related_posts, 12 * HOUR_IN_SECONDS);
return $related_posts;
}
// В функции получения связанных записей сначала пытаемся получить из кэша
function yarppru_get_related_cached($post_id) {
$cache_key = 'yarpp_related_' . $post_id;
$related = get_transient($cache_key);
if (false === $related) {
// Здесь вызываем стандартный вывод YARPP или получаем данные
$related = yarpp_get_related($post_id);
set_transient($cache_key, $related, 12 * HOUR_IN_SECONDS);
}
return $related;
}Полезные плагины для работы с YARPP и связанной выборкой
Кроме базового функционала YARPP, можно использовать дополнительные плагины для расширения возможностей:
- Clearfy Pro — оптимизация и очистка WordPress, совместим с YARPP, помогает ускорить работу связанных записей
- Expert Review — позволяет добавить рейтинги и отзывы к связанным материалам, что улучшает вовлечённость
- WPCommunity — расширяет возможности пользовательского взаимодействия, включая рекомендации связанных тем
Использование этих плагинов в связке с кастомными хуками YARPP позволяет создавать мощные и удобные системы рекомендаций для пользователей.
Заключение
Кастомизация YARPP с помощью собственных фильтров и хуков — это эффективный способ получить максимально релевантные связанные записи под нужды вашего проекта. Приведённые примеры кода и советы по оптимизации помогут вам избежать типичных ошибок и сделать работу сайта быстрой и удобной.
Если хотите скачать плагин YARPP или другие полезные инструменты, рекомендуем посетить WPSHOP.ru — здесь собраны проверенные решения для вашего WordPress.