Skip to content

Всё для WordPress, веб-разработки — и не только

🔗 Связанные записи в Elementor через кастомный фильтр запросов

🔗 Связанные записи в Elementor через кастомный фильтр запросов

Штатный виджет «Посты» в Elementor Pro умеет три вещи: последние записи, по категории и ручной список. Но когда под статьёй нужен блок «Похожие записи», совпадающие по тегам и рубрикам с текущей, ни одной встроенной опции нет. Да, в выпадающем списке Source есть пункт «Related» с версии 2.5, но логика примитивная: посты из тех же категорий без учёта веса совпадений. Результат предсказуем, блок выглядит как случайная подборка, а не как осмысленная рекомендация.

Задача: сохранить дизайн карточек Elementor, но отдать запрос стороннему плагину, который считает релевантность по всем привязанным таксономиям одновременно. На выходе, блок «Похожие записи», в котором каждый следующий пост действительно ближе к тому, что читатель смотрит сейчас, а не просто наполняет сетку.

Метод работает на чистом PHP, без лишних аддонов и без правки шаблонов. Elementor рисует карточку, плагин Related Posts By Taxonomy вычисляет ID, а хук elementor/query/{$query_id} скрещивает одно с другим. 10 минут настройки, и блок живёт.

💡 Быстрый обзор:

  • Устанавливаете бесплатный плагин Related Posts By Taxonomy: он ищет связанные записи по общим категориям, тегам и пользовательским таксономиям, без нагрузки на фронтенд.
  • В виджете Posts Elementor Pro задаёте уникальный Query ID, эта строка превратится в имя хука для перехвата WP_Query.
  • Добавляете PHP-фрагмент на сайт: функция получает массив ID от плагина и передаёт его в запрос Elementor через post__in.
  • Донастраиваете количество, сортировку, шаблон вывода и кеширование через фильтры плагина под свою задачу.

Плагин Related Posts By Taxonomy живёт в официальном репозитории WordPress.org с 2014 года. На июнь 2026, версия 2.7.9, протестирована вплоть до WordPress 7.0, 10 000+ активных установок. Автор, Kees Meijer, поддерживает плагин стабильно: последний релиз вышел за несколько дней до этой публикации.

Главная фишка, минимальный footprint. Никакой админ-панели в консоли, никаких лишних скриптов на фронтенд, никакой писанины в базу. Вся настройка, через фильтры и атрибуты шорткода. Для разработчика это плюс: чистая установка, предсказуемое поведение, ноль мусора.

Алгоритм ранжирует посты по количеству общих терминов таксономий. Пост, набравший больше всего совпадений по категориям и тегам с текущей статьёй, получает высший приоритет. Плагин работает не только со стандартными рубриками и метками, подхватывает пользовательские таксономии, зарегистрированные через WooCommerce, ACF или CPT UI. А раз дружит с произвольными типами записей, блок «Похожие записи» выводится и на страницах портфолио, и в кастомных разделах.

Настройка виджета Posts в Elementor

Добавьте на страницу Single Post Template виджет Posts из библиотеки Elementor Pro. Настройте скин, Cards или Classic, и добейтесь нужного дизайна: обложка, заголовок, дата, excerpt. На этом этапе виджет показывает последние записи блога, и это нормально.

Теперь ключевой шаг. В боковой панели редактирования откройте вкладку Query. Найдите поле Query ID и впишите уникальный идентификатор, например related_posts_by_tax. Именно эта строка превратится в имя хука elementor/query/related_posts_by_tax, через который мы перехватим запрос.

Поле Query ID в настройках виджета Posts Elementor Pro

Параметр Query ID появился в Elementor Pro начиная с версии 2.0. Он спроектирован специально для разработчиков: вы задаёте строку-идентификатор, а затем вешаете на хук elementor/query/{ваш_id} свою callback-функцию. Подробная документация, на портале разработчиков Elementor.

Остальные настройки Query, Post Type, Taxonomies, Order By, оставьте как есть. Они продолжают применяться, а наш фильтр добавляется поверх. Например, если в виджете выбран Post Type «Posts», плагин Related Posts By Taxonomy будет искать связанные записи только среди постов блога.

PHP-фрагмент: соединяем два плагина

Код состоит из одного вызова add_action и короткой функции. Она дёргает метод km_rpbt_get_related_posts() из плагина, получает массив ID релевантных постов и передаёт его в WP_Query через параметр post__in.

Добавьте фрагмент в functions.php дочерней темы или через плагин Code Snippets:

1/**
2 * Подменяет запрос виджета Posts Elementor на связанные записи.
3 * Использует плагин Related Posts By Taxonomy.
4 *
5 * @param \WP_Query $query Объект запроса Elementor.
6 */
7add_action( 'elementor/query/related_posts_by_tax', 'sdstudio_related_posts' );
8function sdstudio_related_posts( $query ) {
9 global $post;
10
11 $related_ids = km_rpbt_get_related_posts(
12 $post->ID,
13 array( 'fields' => 'ids' )
14 );
15
16 if ( ! empty( $related_ids ) ) {
17 $query->set( 'post__in', $related_ids );
18 $query->set( 'orderby', 'post__in' );
19 }
20}

Разбор построчно:

  • elementor/query/related_posts_by_tax, хук, имя которого совпадает с Query ID в виджете. Если вы указали другой ID, замените строку.
  • global $post даёт доступ к текущему посту, от которого пляшем.
  • km_rpbt_get_related_posts(), функция плагина, возвращает массив ID связанных записей. Параметр 'fields' => 'ids' ускоряет запрос: плагин не тянет полные объекты.
  • $query->set( 'post__in', $related_ids ) жёстко ограничивает WP_Query только найденными постами.
  • $query->set( 'orderby', 'post__in' ) сохраняет порядок, который вернул плагин, от наиболее релевантного к наименее.

Формально выполняются два запроса: сначала плагин ищет ID, затем Elementor собирает по ним полные объекты. На практике при 3-5 связанных записях нагрузка незаметна. Для максимальной производительности включите в плагине опцию persistent cache, она кеширует результаты на заданное время.

Тонкая настройка вывода

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

Ограничение количества. По умолчанию плагин возвращает до 5 постов. Чтобы изменить лимит, передайте параметр posts_per_page:

1$related_ids = km_rpbt_get_related_posts(
2 $post->ID,
3 array(
4 'fields' => 'ids',
5 'posts_per_page' => 3,
6 )
7);

Исключение текущего поста. Плагин делает это автоматически, но если перестраховываетесь, добавьте $query->set( 'post__not_in', array( $post->ID ) ).

Ограничение по дате. Показывать только посты за последние 12 месяцев:

1$related_ids = km_rpbt_get_related_posts(
2 $post->ID,
3 array(
4 'fields' => 'ids',
5 'limit_month' => 12,
6 )
7);

Смена шаблона вывода. Плагин поддерживает кастомные HTML-шаблоны через фильтр rpbt_template. Положите файл related-posts-by-taxonomy.php в папку темы, и вёрстка полностью ваша. Документация с примерами лежит на сайте автора, для бесплатного плагина она впечатляюще подробная.

Режим Ajax. Если блок связанных записей находится глубоко под сгибом экрана, включите ленивую загрузку через фильтр rpbt_ajax_load, плагин подтянет посты асинхронно, не влияя на First Contentful Paint.

Видео от команды Elementor показывает продвинутое управление запросами в действии, включая подбор связанных записей и фильтрацию по дате:

⁉️🤔 Частые вопросы

Нужен ли Elementor Pro для этого метода?

Да, кастомный фильтр запросов elementor/query/{$query_id} доступен только в Elementor Pro. В бесплатной версии нет виджета Posts с полем Query ID.

Что делать, если плагин не находит связанных записей?

Проверьте, что у постов есть общие таксономии. Плагин ищет совпадения по всем публичным таксономиям, привязанным к типу записи. Если посты разбросаны по непересекающимся категориям, связанных записей не будет. Задайте fallback: например, покажите последние записи из той же рубрики.

Можно ли использовать подход для произвольных типов записей?

Да. Укажите нужный Post Type в настройках Query виджета Elementor, плагин Related Posts By Taxonomy автоматически подхватит таксономии, зарегистрированные для этого типа. Метод работает с портфолио, товарами WooCommerce и любыми CPT.

Работает ли метод с блочной темой (Full Site Editing)?

Виджет Posts Elementor Pro не зависит от темы, он работает и в классических, и в блочных темах. Главное, чтобы шаблон Single Post управлялся через Theme Builder Elementor.

Чем этот метод лучше встроенной опции «Related» в Elementor?

Встроенная опция просто фильтрует посты по тем же категориям, без учёта количества совпадений и без поддержки пользовательских таксономий. Related Posts By Taxonomy ранжирует посты по всем привязанным таксономиям одновременно и отдаёт наиболее релевантные, а не просто «из той же рубрики».

Стоит ли заморачиваться с ручным фильтром

На небольших блогах с десятком рубрик встроенной опции «Related» в Elementor Pro хватит за глаза. Но как только появляются пользовательские таксономии, несколько типов записей или потребность точно настроить логику подбора, ручной фильтр через elementor/query/{$query_id} становится единственным чистым решением. Без покупки дополнительных аддонов.

Плагин Related Posts By Taxonomy закрывает задачу за ноль долларов и не добавляет лишнего кода на фронтенд. Настройка занимает 10 минут, а результат, релевантный блок «Похожие записи», который удерживает посетителя на сайте дольше, чем случайная подборка последних публикаций.

Попробуйте на тестовом окружении: поднимите локальный WordPress, поставьте плагин и Elementor Pro, добавьте фрагмент, и убедитесь, что метод работает именно так, как нужно вам.