Если YARPP нужен не везде, а только на части сайта, не стоит держать один и тот же вывод для всех типов контента. На практике чаще всего проблема не в самом плагине, а в том, что на архивных страницах, в посадочных, в служебных записях или в отдельных рубриках блок похожих материалов либо ломает верстку, либо дублирует уже существующие рекомендации, либо просто забивает страницу лишними запросами.
Нормальный сценарий здесь такой: в одних местах YARPP отключаем, в других оставляем, а где нужно — подменяем вывод своим шаблоном или вообще своим запросом через стандартные функции WordPress. Это проще сопровождать, чем пытаться править плагин напрямую.
Когда YARPP лучше отключить точечно
Точечное отключение имеет смысл, если блок похожих записей не должен появляться:
- в конкретных рубриках, где уже есть ручная навигация;
- на страницах с коротким контентом, где блок только растягивает шаблон;
- в записях с уникальной структурой, например в документации или лендингах;
- в типах записей, где похожие материалы должны считаться по своим правилам;
- на страницах, где важна скорость и лишний SQL-запрос не нужен.
Если задача именно такая, не надо отключать плагин целиком. Достаточно определить, где он должен молчать, а где — работать по умолчанию.
Диагностика: что именно мешает
Перед правкой кода проверьте три вещи. Во-первых, где именно подключается блок YARPP: в шаблоне темы, через хук или через виджет. Во-вторых, какой у страницы тип записи и рубрика. В-третьих, не выводится ли похожий контент уже другим плагином или вручную в single.php, content-single.php или через блоки редактора.
Быстрый способ понять источник — временно посмотреть шаблон темы и поискать вызовы вроде yarpp_related() или вставку через виджет. Если блок появляется без явного вызова в теме, значит он подключен настройками плагина или через автоматическую вставку YARPP.
Еще один практический тест: откройте проблемную запись в режиме инкогнито и сравните HTML до и после отключения блока. Если в разметке остается контейнер YARPP, но без контента, значит нужно править не только шаблон, но и условие вывода.
Способ 1: отключить YARPP через шаблон темы
Если у вас есть доступ к теме или дочерней теме, самый прозрачный вариант — обернуть вызов YARPP в условие. Это не зависит от внутренней логики плагина и легко читается через полгода.
<?php
if ( function_exists( 'yarpp_related' ) ) {
$post_id = get_the_ID();
$post_type = get_post_type( $post_id );
// Не показываем блок в служебных страницах и в рубрике 'news'.
$skip_categories = array( 'news' );
$post_categories = wp_get_post_terms( $post_id, 'category', array( 'fields' => 'slugs' ) );
$should_show_yarpp = true;
if ( is_page() ) {
$should_show_yarpp = false;
}
if ( 'post' === $post_type && array_intersect( $skip_categories, $post_categories ) ) {
$should_show_yarpp = false;
}
if ( $should_show_yarpp ) {
yarpp_related();
}
}
?>Такой подход удобен, если вы контролируете шаблон и хотите явно видеть логику. Для дочерней темы это обычно лучший вариант: без магии, без скрытых фильтров, без риска сломать обновление плагина.
Когда этот способ не подходит
Если YARPP подключается не из шаблона, а через автоматическую вставку в настройках плагина, один только код в теме проблему не решит. Тогда нужно либо отключить автопоказ в настройках YARPP, либо использовать фильтр плагина, если он вам доступен в конкретной версии.
Способ 2: подменить вывод через фильтр и условия WordPress
Если нужно оставить YARPP включенным глобально, но запретить его в отдельных сценариях, удобнее использовать фильтрацию на уровне плагина. У YARPP есть фильтры, но их набор и поведение зависят от версии, поэтому безопаснее опираться на стандартные условные теги WordPress и проверку текущей записи.
Ниже пример, который можно положить в functions.php дочерней темы или в небольшой mu-plugin. Он отключает вывод на страницах и в указанной рубрике, а для остальных записей позволяет плагину работать как обычно.
<?php
add_filter( 'the_content', 'my_disable_yarpp_in_specific_cases', 20 );
function my_disable_yarpp_in_specific_cases( $content ) {
if ( is_admin() || ! is_singular() ) {
return $content;
}
if ( is_page() ) {
return $content;
}
if ( is_single() ) {
$post_id = get_the_ID();
$categories = wp_get_post_terms( $post_id, 'category', array( 'fields' => 'slugs' ) );
if ( is_array( $categories ) && in_array( 'news', $categories, true ) ) {
remove_filter( 'the_content', 'yarpp_related', 99 );
}
}
return $content;
}Здесь есть важная оговорка: имя функции yarpp_related и приоритет могут отличаться в зависимости от того, как именно плагин вставляет блок. Поэтому перед внедрением проверьте, каким способом YARPP добавляет контент в вашей установке. Если блок вставлен через шаблон, фильтр на the_content может вообще не понадобиться.
Способ 3: вывести свой список похожих записей вместо YARPP
Иногда правильнее не отключать блок совсем, а заменить его на собственный список. Например, если вам нужен более предсказуемый результат: только из той же рубрики, только за последние 90 дней, без страниц и без вложений.
Ниже пример простого запроса через WP_Query. Он не пытается повторить алгоритм YARPP, зато дает понятные правила и легко отлаживается.
<?php
function my_related_posts_block( $post_id ) {
$categories = wp_get_post_terms( $post_id, 'category', array( 'fields' => 'ids' ) );
if ( empty( $categories ) || is_wp_error( $categories ) ) {
return '';
}
$query = new WP_Query( array(
'post_type' => 'post',
'posts_per_page' => 4,
'post__not_in' => array( $post_id ),
'ignore_sticky_posts' => true,
'category__in' => $categories,
'date_query' => array(
array(
'after' => '90 days ago',
),
),
) );
if ( ! $query->have_posts() ) {
return '';
}
ob_start();
echo '<section class="related-posts">';
echo '<h2>Похожие записи</h2>';
echo '<ul>';
while ( $query->have_posts() ) {
$query->the_post();
printf(
'<li><a href="%s">%s</a></li>',
esc_url( get_permalink() ),
esc_html( get_the_title() )
);
}
echo '</ul>';
echo '</section>';
wp_reset_postdata();
return ob_get_clean();
}Такой блок можно вставить в шаблон вместо вызова YARPP или подставлять только там, где YARPP отключен. Это особенно удобно, если вы хотите одинаковую структуру карточек, но разную логику подбора.
Сравнение подходов
| Подход | Когда использовать | Плюсы | Минусы |
|---|---|---|---|
| Условие в шаблоне | Если тема под вашим контролем | Прозрачно, легко сопровождать | Нужно править шаблон |
| Фильтр/хуки | Если YARPP вставляется автоматически | Меньше правок в теме | Зависит от версии и способа вставки |
| Свой WP_Query | Если нужен предсказуемый список | Полный контроль над логикой | Нужно поддерживать свой код |
Проверка результата после внедрения
После правки не ограничивайтесь визуальной проверкой. Смотрите и HTML, и поведение на уровне запросов.
- Откройте запись из рубрики, где блок должен быть скрыт, и убедитесь, что секция YARPP не выводится.
- Проверьте страницу, где блок должен остаться, и сравните заголовок, количество ссылок и структуру разметки.
- Посмотрите исходный код страницы: нет ли пустого контейнера или дублирующего блока.
- Если используете кеш, очистите его и проверьте страницу в режиме инкогнито.
- Если есть серверный кеш или CDN, убедитесь, что старая версия HTML не отдается из кеша.
Для более точной проверки можно временно включить логирование в wp-config.php и посмотреть, вызывается ли ваш код на нужных страницах. Но в продакшене это делайте аккуратно и не оставляйте отладку включенной надолго.
Частые ошибки и как их исправить
Блок исчезает везде, а не только в нужной рубрике
Обычно причина в слишком широком условии. Например, вы проверяете только is_single() и забываете добавить проверку рубрики или типа записи. Сужайте условие до конкретного сценария и проверяйте get_post_type(), is_page() и термины так, как они реально используются на сайте.
После правки YARPP все равно показывается
Значит, блок подключается не тем способом, который вы правили. Проверьте шаблон темы, настройки автопоказа в плагине и наличие второго блока похожих записей от другого плагина. На сайтах с кастомной темой это встречается чаще, чем кажется.
Появились дубли внизу записи
Это типичный случай, когда YARPP выводится и плагином, и вручную в шаблоне. Оставьте только один источник вывода. Если нужен ручной контроль, отключите автопоказ в настройках YARPP и оставьте вызов в теме.
Сломалась верстка после замены на свой список
Проблема обычно не в запросе, а в HTML-обертке. Сравните старую и новую структуру блока: классы, списки, заголовки, контейнеры. Если тема ожидает определенный класс для сетки, сохраните его или адаптируйте стили.
Что учесть по безопасности и производительности
Если вы выводите свой список похожих записей, не подставляйте в HTML сырые данные без экранирования. Для ссылок используйте esc_url(), для заголовков — esc_html(). Это базовая защита, но именно она чаще всего пропускается в самописных блоках.
По производительности не делайте лишних запросов на каждой странице без необходимости. Если блок нужен только на части сайта, оборачивайте его в строгие условия. Если список одинаковый для группы страниц, имеет смысл кэшировать результат через transient, но только если вы понимаете, как и когда его сбрасывать.
Если вам важна именно техническая чистка сайта и удаление дублей, иногда проще закрыть часть задач через инструменты вроде Clearfy Pro, но это не заменяет логику темы. Плагин может помочь с отдельными SEO- и техническими настройками, а точечное поведение YARPP все равно лучше держать в коде, где оно прозрачно и проверяемо.
Мини-чек-лист перед публикацией
- Поняли, где именно подключается YARPP: шаблон, хук или автопоказ.
- Определили точные условия отключения: рубрика, тип записи, шаблон страницы.
- Проверили, не дублируется ли блок другим плагином или ручной вставкой.
- Протестировали страницу в инкогнито и после очистки кеша.
- Убедились, что HTML блока не ломает сетку и стили темы.
- Если использовали свой запрос, экранировали вывод и не оставили лишние запросы.
Если задача сводится к тому, чтобы YARPP работал не везде, а только там, где он действительно полезен, лучше сразу зафиксировать это в шаблоне или в небольшом плагине для сайта. Тогда поведение будет предсказуемым, а при смене темы не придется заново искать, почему похожие записи внезапно появились на страницах, где их быть не должно.