Похожие записи в теме Kadence
Тема Kadence под WordPress поставляется со встроенными настройками похожих записей для одиночных постов через Кастомайзер. Давайте посмотрим, что у неё под капотом.
Для начала откроем файл-шаблон для одиночной записи /kadence/template-parts/content/single-entry.php
:
<?php if ( is_singular( get_post_type() ) ) { ... if ( 'post' === get_post_type() && kadence()->option( 'post_related' ) ) { get_template_part( 'template-parts/content/entry_related', get_post_type() ); } ... }
Здесь мы видим проверку, что текущая страница — это одиночная запись, что в настройках Кастомайзера (Внешний вид -> Настройки -> Записи блога -> Макет одиночной записи) включены похожие записи и загружается шаблон template-parts/content/entry_related.php
.
И в этом файле находим нужный нам фильтр:
$bpc = new WP_Query( apply_filters( 'kadence_related_posts_carousel_args', $args ) );
Теперь ищем вхождение фильтра kadence_related_posts_carousel_args
по всей теме Kadence и находим его в файле inc/template-functions/single-functions.php
:
/** * Get the related posts args. * * @param number $post_id the post id. * @return array query args. */ function get_related_posts_args( $post_id ) { if ( apply_filters( 'kadence_related_posts_use_tags', true ) ) { // Get categories. $categories = get_the_terms( $post_id, 'category' ); if ( empty( $categories ) || is_wp_error( $categories ) ) { $categories = array(); } $category_list = wp_list_pluck( $categories, 'slug' ); // Get Tags. $tags = get_the_terms( $post_id, 'post_tag' ); if ( empty( $tags ) || is_wp_error( $tags ) ) { $tags = array(); } $tag_list = wp_list_pluck( $tags, 'slug' ); $related_args = array( 'post_type' => 'post', 'posts_per_page' => 6, 'no_found_rows' => true, 'post_status' => 'publish', // 'update_post_meta_cache' => false, // 'update_post_term_cache' => false, 'post__not_in' => array( $post_id ), 'orderby' => 'rand', 'tax_query' => array( 'relation' => 'OR', array( 'taxonomy' => 'category', 'field' => 'slug', 'terms' => $category_list, ), array( 'taxonomy' => 'post_tag', 'field' => 'slug', 'terms' => $tag_list, ), ), ); } else { $categories = get_the_terms( $post_id, 'category' ); if ( empty( $categories ) || is_wp_error( $categories ) ) { $categories = array(); } $category_list = wp_list_pluck( $categories, 'term_id' ); $related_args = array( 'post_type' => 'post', 'posts_per_page' => 6, 'no_found_rows' => true, 'post_status' => 'publish', // 'update_post_meta_cache' => false, // 'update_post_term_cache' => false, 'post__not_in' => array( $post_id ), 'orderby' => 'rand', 'category__in' => $category_list, ); } return apply_filters( 'kadence_related_posts_args', $related_args ); }
Изначально код внутри блока if
выполняется, поскольку фильтр kadence_related_posts_use_tags
по умолчанию возвращает значение true
, если он не переопределен в вашей теме.
Код выше извлекает 6 последних записей из базы данных, имеющих те же теги или категории, что и текущий пост, и показывает их в случайном порядке, исключая текущую запись.
Если вы хотите, чтобы похожие записи подбирались, основываясь только на текущей рубрике, то просто верните false
в фильтре kadence_related_posts_use_tags
:
add_filter( 'kadence_related_posts_use_tags', '__return_false' );