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

Click here to view original web page at www.kobzarev.com
Обложка к записи Похожие записи в теме Kadence

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

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

12345678<?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.

И в этом файле находим нужный нам фильтр:

1$bpc = new WP_Query( apply_filters( 'kadence_related_posts_carousel_args', $args ) );

Теперь ищем вхождение фильтра kadence_related_posts_carousel_args по всей теме Kadence и находим его в файле inc/template-functions/single-functions.php:

01020304050607080910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364/*** 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:

1add_filter( 'kadence_related_posts_use_tags', '__return_false' );

Смотрите также