Рубрики
Advanced Custom Fields Общие вопросы по WordPress

Как вывести похожие записи WordPress без плагина? — 3 способа

Три способа вывести похожие записи без использования плагина, чтобы увеличить SEO-потенциал вашего сайта.

Похожие записи могут быть легко отображены с помощью плагинов, но задумывались ли вы, как вы можете отображать связанные записи без использования плагина? В этой статье я поделюсь тремя разными методами, которые вы можете использовать для создания похожих записей, в том числе с миниатюрами и дополнительными настройками.

Похожие записи по категориям, меткам и другим таксономиям

Вот готовый код для вывода 5 похожих записей по категориям. Обычно его необходимо добавить в файл single.php или singular.php.

Рекомендую сделать резервную копию и создать дочернюю тему перед редактированием кода.

Вы также можете указать метки или кастомную таксономию, поменять количество постов для вывода и настроить отображение записей под свои нужды.

// необязательно, но в некоторых случаях без этого не обойтись
global $post;

// укажите post_tag для подборки постов по меткам
// укажите category для подборки постов по категориям
// укажите массив array('category', 'post_tag') для подборки постов и по меткам и по категориям
// или укажите вашу кастомную таксономию
$related_tax = 'category';
 
// получаем ID всех элементов (категорий, меток или таксономий), к которым принадлежит текущий пост
$taxes = wp_get_object_terms( $post->ID, $related_tax, array( 'fields' => 'ids' ) );
 
// массив параметров для WP_Query
$args = array(
	'posts_per_page' => 5, // количество постов для вывода,
	'tax_query' => array(
		array(
			'taxonomy' => $related_tax,
			'field' => 'id',
			'include_children' => false, // нужно ли выводить посты дочерних рубрик
			'terms' => $taxes,
			'operator' => 'IN' // если пост принадлежит хотя бы одной рубрике текущего поста, он будет отображаться в похожих записях, укажите значение AND и тогда похожие посты будут только те, которые принадлежат каждой рубрике текущего поста
		)
	)
);
$related_query = new WP_Query( $args );
 
// если посты, соответствующие нашим условиям, найдены
if( $related_query->have_posts() ) :
 
	// выводим заголовок блока похожих записей
	echo '<h3>Похожие записи</h3><ul class="related-posts">';
 
	// запускаем цикл
	while( $related_query->have_posts() ) : $related_query->the_post(); ?>
	
		<li><!-- блок с содержанием похожим постом -->

			<!-- Ссылка с миниатюрой и названием записи-->
			<a href="<?php the_permalink()?>" title="<?php the_title(); ?>"> 
				
				<!-- миниатюра -->	
				<?php the_post_thumbnail(); ?> 
				
				<!-- название записи -->	
				<?php the_title(); ?> 

			</a>

		</li>
	
	<?php 
	
	endwhile;
		
	echo '</ul>';

endif;
 
// не забудьте про эту функцию, её отсутствие может повлиять на другие циклы на странице
wp_reset_postdata();

Настраиваемые похожие записи с помощью стандартных произвольных полей

Заходим в редактор записи. Если на странице редактирования не отображаются произвольные поля, то включаем их через настройки как показано на скриншоте ниже.

Листай вниз страницы и создаём произвольное поле с ярлыком my_related_posts. В поле "Значение" указываем ID похожих постов.

Узнать ID похожих постов вы можете через URL. Обычно, редактируя пост, отображается ссылка вида "wp-admin/post.php?post=148&action=edit", где 148 - ID поста.

Этот способ отлично подходит, если вы хотите продвигать конкретные посты или выбирать для блока с похожими записями не случайные посты, а реально релевантные записи в нужном для вас порядке.

Комбинированный метод - мой вариант

Именно такой способ используется на данный момент на моём сайте. Его преимущество заключается в том, что вы можете выбрать любые релевантные записи для отображения, однако если вы это не сделаете, будут показаны похожие записи по указанной таксономии (например, по категории).

Это очень удобно, особенно если записей много, а вы хотите выбрать релевантные только для нескольких самых популярных постов. К тому же вы можете постепенно улучшать блок с похожими записями, добавляя всё более релевантные посты.

// Выводим заголовок похожих записей
echo '<h3>Похожие посты</h3><ul class="related-posts">';

// проверяем, заданы ли похожие посты в админке
if( $related_post_ids = get_post_meta($post->ID, 'my_related_posts', true)) :
	
	$related_args = array(
		'posts_per_page' => -1, // сколько постов будет указано в админке, столько и выведется
		'post__in'=> explode(',', $related_post_ids), // в качестве значения нужно будет передать массив
		'orderby' => 'post__in' // посты будут сортироваться в том же порядке, в котором они перечислены в админке
	);
	$wpnote_query = new WP_Query( $related_args );
 
	// если посты, удовлетворяющие нашим условиям, найдены
	if( $wpnote_query->have_posts() ) :

		// запускаем цикл
		while( $wpnote_query->have_posts() ) : $wpnote_query->the_post();
			// в данном случае посты выводятся просто в виде ссылок
			echo '<li><a href="' . get_permalink( $wpnote_query->post->ID ) . '">' . $wpnote_query->post->post_title . '</a></li>';
		endwhile;
	
	endif;
 
	// не забудьте про эту функцию, её отсутствие может повлиять на другие циклы на странице
	wp_reset_postdata();

// если похожие посты в админке не заданы, то показывать похожие записи по категории
else: 

	// необязательно, но в некоторых случаях без этого не обойтись
	global $post;

	// укажите post_tag для подборки постов по меткам
	// укажите category для подборки постов по категориям
	// укажите массив array('category', 'post_tag') для подборки постов и по меткам и по категориям
	// или укажите вашу кастомную таксономию
	$related_tax = 'category';

	// получаем ID всех элементов (категорий, меток или таксономий), к которым принадлежит текущий пост
	$taxes = wp_get_object_terms( $post->ID, $related_tax, array( 'fields' => 'ids' ) );

	// массив параметров для WP_Query
	$args = array(
		'posts_per_page' => 5, // количество постов для вывода,
		'tax_query' => array(
			array(
				'taxonomy' => $related_tax,
				'field' => 'id',
				'include_children' => false, // нужно ли выводить посты дочерних рубрик
				'terms' => $taxes,
				'operator' => 'IN' // если пост принадлежит хотя бы одной рубрике текущего поста, он будет отображаться в похожих записях, укажите значение AND и тогда похожие посты будут только те, которые принадлежат каждой рубрике текущего поста
			)
		)
	);
	$related_query = new WP_Query( $args );

	// если посты, соответствующие нашим условиям, найдены
	if( $related_query->have_posts() ) :

		// запускаем цикл
		while( $related_query->have_posts() ) : $related_query->the_post();

		echo '<li><a href="' . get_permalink( $related_query->post->ID ) . '">' . $related_query->post->post_title . '</a></li>';

		endwhile;

	endif;
 
	// не забудьте про эту функцию, её отсутствие может повлиять на другие циклы на странице
	wp_reset_postdata();

endif;

echo '</ul>';

Заключение

Похожие записи - отличный способ удержать читателей на сайте. Также этот блок будет очень полезным, если вы хотите раскрутить конкретные статьи (для этого отметьте их как похожие).

Обратите внимание, что чем больше страниц будет ссылаться на конкретную запись, тем больше ей будет передаваться веса.

Спасибо misha.blog за полезную информацию!

Получилось ли у вас реализовать блок с похожими записями? Поделитесь своим опытом в комментариях!

Похожие посты

Автор: Андрей Шурыгин

Изучаю Wordpress. Создаю сайты. Пишу этот блог.

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

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