Выводим список кастомных таксономий и кастомных записей из каждой таксономии

30.10.2019
TemplateMonster - лучшая коллекция шаблонов для CMS WordPress

Суть задачи – вывести на странице все кастомные категории и кастомные записи из каждой категории.
В моем примере выводятся кастомные таксономии partner_cat и кастомные записи partner.
Я вывожу из каждой таксономии по 5 записей и ниже есть ссылка на таксономию со всеми записями. Чтобы выводить сразу все записи из всех таксономий, нужно изменить параметр 'posts_per_page' на -1.
Как создавать кастомные таксоноии и записи подробнее в этой статье Создаем кастомный тип записи (Custom Post Type) с кастомными категориями (Custom Taxonomy)

<?php  
$terms = get_terms(
  array(
    'taxonomy'   => 'partner_cat',
    'hide_empty' => true,
    'hierarchical' => false,
    'orderby' => 'name',
    'order' => 'ASC',
  )
);

foreach ( $terms as $term ) { ?>
  <h2><?php echo $term->name; ?></h2>

  <div class='partners-list'>
    <?php

    $args = array(
      'post_type' => 'partner',
      'post_status' => 'publish',
      'posts_per_page' => 5,
      'orderby' => 'date',
      'order' => 'DESC',
      'tax_query' => array(
        array(
          'taxonomy' => 'partner_cat',
          'field' => 'name',
          'terms' => $term->name
        )
      )
    );

    //the query
    $partnersList = new WP_Query( $args );

    //loop through query
    if($partnersList->have_posts()) {
      echo '<ul>';

      while($partnersList->have_posts()) { 
        $partnersList->the_post();
        ?>

        <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>

        <?php
      }

      echo '</ul>';
    } else {
      //no posts found
    }

    wp_reset_postdata();

    ?>
  </div><!-- /partners-list -->

  <p><a href="<?php echo esc_url( get_term_link( $term ) ) ?>">Все записи из таксономии "<?php echo $term->name; ?>"</a></p>

<?php } ?>

На выходе получаем такой вид:

TemplateMonster - лучшая коллекция шаблонов для CMS WordPress

Полезная инфа:

Оставить комментарий