WordPress как на ладони
wordpress jino

Как выводить посты в зависимости от категории в custom post type?

Не знаю как сформулировать вопрос лучше в заголовке. У меня есть пользовательский тип записи, к примеру "product" и стандартные рубрики допустим "new" и "best". И мне необходимо на своем шаблоне страницы вывести 2 колонки, в одной будут отображаться product из категории "new", во второй из категории best. на данный момент у меня такой код идет в контенте страницы

<?php
		 $args = array(
			'post_type' => 'product',
			'category' => 'new'
		 );
		 $q = new WP_Query($args);
		 if ($q-> have_posts() ) : ?>
					<?php
							while ($q-> have_posts() ) : $q->the_post();
							get_template_part( 'content-product', get_post_format() );
							endwhile;
						else :
							echo "Что-то пошло не так =(";
						endif;
						wp_reset_postdata();
					?>

Я пробовал дальше сделать еще запрос

$args = array(
			'post_type' => 'product',
			'category' => 'best'
		 );

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

Ответ на заметку к вопросу:
Да, моя оплошность. Страница page-product имеет такую структуру

<?php get_header(); ?>
<?php get_template_part('inc/page-title'); ?>
<section class="products">
<div class="produts__items">
<?php
		 $args = array(
			'post_type' => 'product',
			'category' => 'new'
		 );
		 $q = new WP_Query($args);
		 if ($q-> have_posts() ) : ?>
					<?php
							while ($q-> have_posts() ) : $q->the_post();
							get_template_part( 'content-product', get_post_format() );
							endwhile;
						else :
							echo "Что-то пошло не так =(";
						endif;
						wp_reset_postdata();
					?>
</div>
<div class="produts__items">
<?php
		 $args = array(
			'post_type' => 'product',
			'category' => 'best'
		 );
		 $q = new WP_Query($args);
		 if ($q-> have_posts() ) : ?>
					<?php
							while ($q-> have_posts() ) : $q->the_post();
							get_template_part( 'content-product', get_post_format() );
							endwhile;
						else :
							echo "Что-то пошло не так =(";
						endif;
						wp_reset_postdata();
					?>
</div>
</section>

Фрагмент content-product обладает такой структурой:

<a href="#">Ссылка на все продукты это категории</a>
<section class="products__single">
		<div class="post-thumbnail">
			<a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>">
				<?php if ( has_post_thumbnail() ): ?>
					<?php the_post_thumbnail('thumb-medium'); ?>
				<?php elseif ( ot_get_option('placeholder') != 'off' ): ?>
					<img src="<?php echo get_template_directory_uri(); ?>/img/thumb-medium.png" alt="<?php the_title(); ?>" />
				<?php endif; ?>
				<?php if ( has_post_format('video') && !is_sticky() ) echo'<span class="thumb-icon"><i class="fa fa-play"></i></span>'; ?>
				<?php if ( has_post_format('audio') && !is_sticky() ) echo'<span class="thumb-icon"><i class="fa fa-volume-up"></i></span>'; ?>
				<?php if ( is_sticky() ) echo'<span class="thumb-icon"><i class="fa fa-star"></i></span>'; ?>
			</a>
			<?php if ( comments_open() && ( ot_get_option( 'comment-count' ) != 'off' ) ): ?>
				<a class="post-comments" href="<?php comments_link(); ?>"><span><i class="fa fa-comments-o"></i><?php comments_number( '0', '1', '%' ); ?></span></a>
			<?php endif; ?>
		</div><!--/.post-thumbnail-->

		<div class="post-meta group">
			<p class="post-category"><?php the_category(' / '); ?></p>
		</div><!--/.post-meta-->

		<h2 class="post-title">
			<a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a>
		</h2><!--/.post-title-->
<section>

Хотелось бы, чтоб каждый

<div class="produts__items">

был независимым столбцом, внутри которого выводится 3-4 записи product в зависимости от категории. А получается что второй div попадает внутрь

<section class="products__single">
Kama 1.1 года назад

Ну дела, ты просишь чтобы помогли сделать обертку, а код этой самой обертки не показал...

karssen 1.1 года назад

Доработал вопрос

0
Гость 1.1 года назад
  • 0
    campusboy1832 cайт: wp-plus.ru

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

    get_template_part( 'content-product', get_post_format() );

    Функция get_template_part подключает файл content-product-{slug}, где slug - Ваш микроформат.

    Варианты решения:

    1) Каждый вид товара определять в разный микроформат, а там уже править файлы к ним относящиеся. Этот способ мне не очень нравится.

    2) Создать свой файл вывода той или иной рубрики и подключать его, к примеру, создадим файл content-best.php (создайте дубликат оригинального файла вашей темы, переименуйте и правьте под себя) и код примет такой вид

    <?php
    $best_product = new WP_Query( array( 'post_type' => 'product', 'category' => 'best' ) );
    if ($best_product-> have_posts() ) {
      while ($best_product-> have_posts() ) {
    	$best_product->the_post();
    	get_template_part( 'content-best' );
      }
    }
    else {
      echo "Записей в этой рубрики нет";
    }
    wp_reset_postdata();
    ?>
    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Регистрация. Вход.