Как создать собственный фильтр для YARPP в WordPress

YARPP — один из самых популярных плагинов для вывода связанных записей в WordPress. Его гибкость достигается за счет системы фильтров и хуков, позволяющих кастомизировать логику подбора связанных материалов. В этой статье мы подробно рассмотрим, как создать собственный фильтр для YARPP, чтобы улучшить релевантность связанных записей под ваши задачи.

Почему нужен собственный фильтр для YARPP

Стандартная логика YARPP основывается на заголовках, содержимом и таксономиях, но в ряде случаев этого недостаточно. Например, вам требуется учитывать дополнительные метаданные записи или интегрировать кастомные критерии релевантности. Собственный фильтр позволит:

  • Добавлять дополнительные условия отбора записей.
  • Изменять порядок сортировки связанных материалов.
  • Исключать определённые записи из результатов.
  • Реализовывать сложные алгоритмы подбора, которые не поддерживаются стандартным функционалом.

В итоге вы получите более точный подбор, что улучшит пользовательский опыт и SEO сайта.

Как работает фильтр в YARPP: основные хуки

Для создания собственного фильтра в YARPP используются PHP-фильтры WordPress. Основные точки расширения:

  • yarpp_related — фильтр, который позволяет изменять массив связанных записей перед выводом.
  • yarpp_query — фильтр для изменения SQL-запроса, который строит подбор связанных записей.
  • yarpp_results — фильтр для модификации результатов после выполнения запроса.

В большинстве случаев для тонкой настройки логики достаточно использовать yarpp_query, который позволяет изменять параметры запроса.

Пример: создание фильтра для исключения записей по мета-ключу

Допустим, у вас есть мета-ключ exclude_from_related, и вы хотите, чтобы записи с этим ключом и значением 1 не попадали в список связанных.

Добавьте в файл functions.php вашей темы или в кастомный плагин следующий код:

add_filter('yarpp_query', 'yarppru_exclude_by_meta', 10, 2);
function yarppru_exclude_by_meta($query, $args) {
    global $wpdb;
    // Добавляем условие для исключения записей с мета-ключом exclude_from_related=1
    $query .= " AND {$wpdb->posts}.ID NOT IN (
        SELECT post_id FROM {$wpdb->postmeta}
        WHERE meta_key = 'exclude_from_related' AND meta_value = '1'
    ) ";
    return $query;
}

Этот фильтр добавляет в SQL-запрос условие, исключающее нужные записи. Благодаря этому YARPP не будет выводить их в блоке связанных материалов.

Разбор кода

Мы использовали глобальный объект $wpdb для правильного построения запроса. Подзапрос выбирает ID записей, у которых установлен мета-ключ с нужным значением, а основной запрос исключает их из результатов.

Оптимизация производительности фильтра YARPP

Добавление сложных условий в SQL-запрос может привести к замедлению выборки. Чтобы избежать проблем с производительностью, рекомендуем:

  • Создавать индексы на мета-таблицах для часто используемых ключей.
  • Кэшировать результаты с помощью Transients API или плагинов кэширования.
  • Ограничивать число связанных записей, выводимых на странице. В настройках YARPP можно задать лимит.

Также можно использовать плагин Clearfy Pro, который помогает оптимизировать запросы и ускорять работу сайта.

Расширение: сортировка связанных записей по пользовательскому критерию

Часто требуется изменить порядок вывода связанных записей. Допустим, мы хотим сортировать связи по значению мета-поля popularity_score.

Для этого добавляем фильтр:

add_filter('yarpp_query', 'yarppru_sort_by_popularity', 20, 2);
function yarppru_sort_by_popularity($query, $args) {
    global $wpdb;
    // Добавляем JOIN для мета-поля popularity_score
    $query = str_replace('WHERE 1=1', "
        INNER JOIN {$wpdb->postmeta} pm ON pm.post_id = {$wpdb->posts}.ID AND pm.meta_key = 'popularity_score'
        WHERE 1=1", $query);
    // Сортируем по числовому значению popularity_score по убыванию
    $query .= ' ORDER BY CAST(pm.meta_value AS UNSIGNED) DESC';
    return $query;
}

Этот код вставляет JOIN с таблицей метаданных и сортирует результаты по мета-значению.

Пояснения

Важно использовать CAST для правильного числового сравнения и избегать сортировки как по строкам. Такой подход позволяет задавать более релевантный порядок вывода, учитывая популярность записи.

Использование фильтра yarpp_related для дополнительной фильтрации результатов

Если вам нужно программно изменить массив связанных записей после выборки, используйте фильтр yarpp_related. Например, исключим записи с определённым ID:

add_filter('yarpp_related', 'yarppru_filter_related_array', 10, 2);
function yarppru_filter_related_array($related, $args) {
    foreach ($related as $key => $post) {
        if (in_array($post->ID, [42, 99])) { // Замените ID на нужные
            unset($related[$key]);
        }
    }
    return $related;
}

Такой способ удобен, если условия сложные и не хочется изменять SQL-запрос напрямую.

Советы по тестированию и отладке фильтров YARPP

Для отладки используйте функцию error_log или плагины, например, Query Monitor, чтобы отслеживать изменённые запросы и время их выполнения.

Рекомендуется делать резервные копии сайта перед внесением изменений и тестировать на staging-сервере.

Также можно интегрировать YARPP с AJAX для динамической подгрузки связанных записей, что повышает интерактивность сайта, подробнее об этом читайте в других статьях.

Заключение

Создание собственного фильтра для YARPP открывает широкие возможности по кастомизации подбора связанных записей. Используйте фильтры yarpp_query и yarpp_related для изменения логики выборки, учитывайте производительность и кэшируйте результаты. Приведённые примеры помогут быстро начать и настроить функционал под ваши задачи.

Для оптимизации и управления плагинами рекомендуем посетить Clearfy Pro — мощный инструмент для ускорения и настройки WordPress.

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
WooCommerce: как исключить товары по метаданным из списка связанных товаров
30.06.2026
Как создать автоматические связи между записями по тегам в WordPress
07.02.2026
YARPP интеграция своими хуками и фильтрами для кастомизации связанных записей
12.12.2025
YARPP настройка и оптимизация подбора связанных записей в WordPress
10.11.2025
Как избежать конфликтов между YARPP и WooCommerce при подборе связанных товаров
27.04.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее