Похожие записи в теме Kadence

Похожие записи в теме Kadence

Тема Kadence  под WordPress поставляется со встроенными параметрами похожих записей для одиночных записей через Кастомайзер. Давайте посмотрим, что у неё под капотом.

Для начала откроем файл-шаблон для одиночной записи /kadence/template-parts/content/single-entry.php:

<?phpif( 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' );

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *