@Mazino

Как вывести произвольную таксономию с произвольным типом записи через основной запрос?

Создал произвольную таксономию taxnews, а также произвольный тип записи news, после чего перенес из стандартной category соответствующие записи в данную таксу(категорию, где они были закреплены тоже) и изменил их тип на news, но не могу сделать ее вывод стандартными средствами. По идее все должно быть по умолчанию. Например, в моем шаблоне вывод записей идет через файл category.php, я скопировал оттуда код в новый taxonomy-taxnews.php, кстати по умолчанию вывод новой таксономии производился через archive.php(может это важно). В любом случае независимо от файла вывода возвращается 404.
Вылечил так:
$qur = 'post_type=news';
query_posts( $qur );

Однако так не работала пагинация, все последующие после первичного вывода страницы были пусты. И хотя это тоже можно починить. Как все таки вывести основным запросом, который берет параметры из ссылки? Параметр taxnews=allnews, параметр для стандартной таксономии category_name=allnews.
Делал на основе данной статьи, код идентичен за исключением файлов вывода(у меня другой шаблон).
Часть кода из файла вывода, отвечающая за вывод и пагинацию записей:
Простынь
<?php 
/**
 * Examiner taxnews page
**/ 
?>
<?php get_header();
$exm1_category_post_style = get_option('exm1_category_post_style');
$author_show  = get_option('exm1_category_show_author');
$date_show  = get_option('exm1_category_show_date');

?>

	<?php $exm1_popular_widget = get_option('exm1_popular_widget'); if ($exm1_popular_widget == "true") { ?>
	<div class="fullwidth popular-part">
		<div class="home-widget four-parts">
			<?php exm1_popular_posts();?>
		</div>
		<!--home-widget four-parts-->
	</div>
	<!--fullwidth-->
	<?php } ?>

<div id="main">
	<div id="primary" class="three-parts archive">
		<?php if ($exm1_popular_widget != "true") {?>
		<div class="widget-title">
			<h1>
				<?php echo esc_html(get_option('exm1_word_before_category')); ?>
				<?php single_cat_title(); ?>
			</h1>
		</div>
		<!--widget-title-->
		<?php } ?>
		<div id="blog-list" <?php if ( $exm1_category_post_style == 'style_1' ){echo 'class="blog-category"';}elseif( $exm1_category_post_style == 'style_2' ){echo 'class="exm1-blog-posts-category"';}elseif( $exm1_category_post_style == 'style_3' ){echo 'class="img-featured"';}?>>
			<ul>		
			<?php if (have_posts()) : while (have_posts()) : the_post();?>								
				<li>					
				<?php if ( $exm1_category_post_style == 'style_1' ){	
					category_post_style1($author_show, $date_show);	
					}elseif( $exm1_category_post_style == 'style_2' ){
					category_post_style2($author_show, $date_show);
					}elseif( $exm1_category_post_style == 'style_3' ){
					category_post_style3($author_show, $date_show);	
					}?>			
				</li>
				<?php endwhile; else : ?>
					<div class="widget-title"><?php echo esc_html(get_option('exm1_no_match')); ?></div>
				<?php endif;?>
			</ul>
		</div>
		<?php $exm1_pagination_style = get_option('exm1_pagination_style');if($exm1_pagination_style =='ajax' || $exm1_pagination_style =='auto-load' ){?>
		<div class="pagination pagination-load-more <?php if($exm1_pagination_style =='auto-load'){echo esc_attr('auto-load');}?>">
			<?php $loadmoreword = get_option('exm1_word_load_more');
			next_posts_link(esc_html($loadmoreword), '' ); ?>
		</div>
		<!--pagination-->
		<?php } else { ?>
		<div class="pagination-simple">
			<?php exm1_pagination(); ?>
		</div>
		<!--pagination-simple-->
		<?php } ?>
	</div>
  • Вопрос задан
  • 1022 просмотра
Пригласить эксперта
Ответы на вопрос 2
@Mazino Автор вопроса
Три дня бился... Нашел в чем проблема: query_posts() по умолчанию работает с параметром post_type=post в то время как моей таксе таких постов не имелось. По сему расширяю вопрос.

Как можно модифицировать основной запрос для поддержки произвольных типов записей из "коробки", но чтобы в остальном, он был идентичен?
Ответ написан
Комментировать
MedVedar
@MedVedar
e-commerce developer
1. Забудьте о query_posts()
2. Выдрал кусок кода из taxonomy-product-category.php, который выводит кастомные посты из кастомной таксономии с работающей пагинацией:
$term      = get_queried_object();
					$term_slug = $term->slug;
					$paged     = ( get_query_var( 'page' ) ) ? get_query_var( 'page' ) : 1;
					$_posts    = new WP_Query( array(
						'post_type'      => 'product',
						'posts_per_page' => 10,
						'paged'          => $paged,
						'tax_query'      => array(
							array(
								'taxonomy' => 'product-category',
								'field'    => 'slug',
								'terms'    => $term_slug,
							),
						),
					) );
					global $wp_query;
					$tmp_query = $wp_query;
					$wp_query  = null;
					$wp_query  = $_posts;
					if ( $_posts->have_posts() ) :
						while ( $_posts->have_posts() ) :
							$_posts->the_post();
							get_template_part( 'template-parts/content-product', 'preview' );
						endwhile;
						the_posts_pagination( array(
							'type' => 'list',
							'prev_text'    => '<i class="fas fa-angle-double-left"></i>',
							'next_text'    => '<i class="fas fa-angle-double-right"></i>',
						) );
					else :
						get_template_part( 'template-parts/content', 'none' );
					endif;
					$wp_query = null;
					$wp_query = $tmp_query;
					wp_reset_postdata();
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы