![Обложка к записи Похожие записи в теме Kadence](https://www.kobzarev.com/wp-content/uploads/2020/12/kadence-theme.jpg)
Тема Kadence под WordPress поставляется со встроенными настройками похожих записей для одиночных постов через Кастомайзер. Давайте посмотрим, что у неё под капотом.
Для начала откроем файл-шаблон для одиночной записи /kadence/template-parts/content/single-entry.php
:
12345678 | <?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
.
И в этом файле находим нужный нам фильтр:
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
:
1 | add_filter( 'kadence_related_posts_use_tags' , '__return_false' ); |
Смотрите также
Читать полностью www.kobzarev.com