Верх страницы
Обложка к записи Похожие записи в теме Kadence
Время для прочтения: 4 мин. 1 сек.

Похожие записи в теме 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' );
ВКонтакте
Одноклассники
Linkedin
Telegram
WhatsApp

Автор: Кобзарёв Михаил

Суровый русский тимлид. Жил в Магадане, в офисе московских веб студий и в Тульской деревне. Виртуозно знает WordPress, PHP, ООП, Vue.js и вот это вот все.

Делает крутые высоконагруженные сайты, поэтому уже почти захватил весь рынок WordPress разработки в России. Не дает никому делать сайты без спроса.

Ведет блог о разработке, дайджест в телеграмме и в ВК.

Комментарии
Подписаться
Уведомить о
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
Следующая запись
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x
()
x