Задать вопрос
@rmltsn

Как сделать чередование постов из разных циклов(условий/такс)?

Приветствую!

Есть два вида постов: сами посты и услуги, они имеют разную вёрстку. Задача выводить их в одном месте (сайдбар), не друг за другом, а чередовать 2-1-2-2-1 и т.п. Возможно ли? Как?
  • Вопрос задан
  • 57 просмотров
Подписаться 2 Сложный Комментировать
Пригласить эксперта
Ответы на вопрос 2
artzolin
@artzolin Куратор тега WordPress
php, WordPress разработка сайтов artzolin.ru
Проще всего заказать из базы конкретные ids в определенном вами порядке, иначе вы вряд ли сможете гарантировать, что записи разных типов придут вам в нужном порядке

$args = [
	'post_type' => ['post','service'],
	'post__in' => [5,12,2,14,7],
	'orderby' => 'post__in',
];

$loop = new WP_Query( $args );


При выводе проверяете тип записи и подключаете нужный шаблон

if ( get_post_type() === 'service' ) {
	get_template_part( 'templates/archive/archive-service' );
} else {
	get_template_part( 'templates/archive/archive-common' );
}


Если типов записей много, то можно сделать так

$post_type = get_post_type();

if ( file_exists( get_theme_file_path( 'templates/archive/archive-' . $post_type . '.php' ) ) ) {
	get_template_part( 'templates/archive/archive-' . $post_type );
} else {
	get_template_part( 'templates/archive/archive-common' );
}
Ответ написан
Комментировать
@rmltsn Автор вопроса
Получил такой ответ от Kama, кому интересно:

$tax_name_1 = 'tax_name_1';
$tax_name_2 = 'tax_name_2';
$term_name_1 = 'term_name';
$posts_1 = get_posts( [ параметры_такс_1 ] );
$posts_2 = get_posts( [ параметры_такс_2 ] );
$posts_3 = get_posts( [ параметры_мета ] );

$posts = [];

foreach( $posts_1 as $p ){
	$p->tpl_type = $tax_name_1;
	$posts[ $p->ID ] = $p;
}

foreach( $posts_2 as $p ){
	$p->tpl_type = $tax_name_2;
	$posts[ $p->ID ] = $p;
}

foreach( $posts_3 as $p ){
	$p->tpl_type = $term_name_1;
	$posts[ $p->ID ] = $p;
}

// тут можно отсортировать по ID например
$posts = wp_list_sort( $posts, 'ID', 'DESC' );

foreach( $posts as $post ){
	setup_postdata( $post );

	if( $post->tpl_type === $tax_name_1 ){
		?>
		<!-- Вывода постов, функции цикла: the_title() и т.д. -->
		<?php 
	}
	elseif( $post->tpl_type === $tax_name_2 ){
		?>
		<!-- Вывода постов, функции цикла: the_title() и т.д. -->
		<?php    
	}
	elseif( $post->tpl_type === $term_name_1 ){
		?>
		<!-- Вывода постов, функции цикла: the_title() и т.д. -->
		<?php 
	}
	else {
		echo 'Шаблон для типа не усказан';
	}
}
wp_reset_postdata(); // Сбрасываем $post
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы