Групповой список сообщений по таксономии и разрешить разбиение на страницы

Существует несколько способов отображения списка (пользовательских) сообщений по таксономии, но ни один из них не позволяет разбивать на страницы.

Итак, я могу легко перечислить все сообщения вроде:

Страница 1

  • 1
  • 2
  • 3
  • 4
  • 5

Страница 2

  • 6
  • 7
  • 8
  • 9
  • 10

С небольшими усилиями я могу перечислить должности, сгруппированные по таксономии

Страница 1

    • 1
    • 2
  • В
    • 3
    • 4
    • 5
    • 6
  • С
    • 7
    • 8
  • D
    • 9
    • 10

Но мне нужна помощь в смешивании в разбивке на страницы.

Страница 1

    • 1
    • 2
  • В
    • 3
    • 4
    • 5

Страница 2

  • В
    • 6
  • С
    • 7
    • 8
  • D
    • 9
    • 10

Есть идеи?

Пример кода ниже:

<?php // Get current Category $get_current_cat = get_term_by('name', single_cat_title('',false), 'category'); $current_cat = $get_current_cat->term_id; // List posts by the terms for a custom taxonomy of any post type $post_type = 'myposttype'; $tax = 'mytaxonomy'; $tax_terms = get_terms( $tax, 'orderby=name&order=ASC'); if ($tax_terms) { foreach ($tax_terms as $tax_term) { $args = array( 'post_type' => $post_type, "$tax" => $tax_term->slug, 'post_status' => 'publish', 'posts_per_page' => -1, 'category__in' => $current_cat // Only posts in current category (category.php) ); $my_query = null; $my_query = new WP_Query($args); if( $my_query->have_posts() ) : ?> <h2><?php echo $tax_term->name; // Group name (taxonomy) ?></h2> <?php while ( $my_query->have_posts() ) : $my_query->the_post(); ?> <?php $term_list = wp_get_post_terms($post->ID, 'category', array("fields" => "ids")); // Get post categories IDs?> <?php if (in_array($current_cat, $term_list) ): // Display only posts that have current category ID ?> <h3><?php the_title(); ?></h3> <?php endif; // if in_array ?> <?php endwhile; // end of loop ?> <?php endif; // if have_posts() wp_reset_query(); } // end foreach #tax_terms } // end if tax_terms 

?>

Я понял!

Первый шаг – сортировать сообщения по таксономии (чтобы они были сгруппированы вместе).

Это даст список сообщений, которые могут быть разбиты на страницы (как обычный список).

Трюк теперь заключается в том, чтобы добавить заголовок (таксономия) над соответствующими сообщениями.

Итак, за каждый проход цикла я смотрю на таксономию, в которой принадлежит этот пост. Когда это изменится, я знаю, что «группа таксономии» изменилась, и поэтому мне нужно показать заголовок.

Например, используя мой оригинальный пример

  • 1 (таксономия A)
  • 2 (Таксономия A)
  • 3 (таксономия B)
  • 4 (таксономия B)
  • 5 (таксономия B)
  • 6 (таксономия B)
  • 7 (Таксономия C)
  • 8 (Таксономия C)
  • 9 (Таксономия D)
  • 10 (Таксономия D)

Для первого сообщения у нас нет текущей таксономии, поэтому отобразите заголовок

    • 1 (таксономия A)
    • 2 (Таксономия A)

Когда мы переходим из сообщений с 2 ​​по 3, текущая таксономия изменяется, поэтому давайте снова отобразим заголовок

  • В
    • 3 (таксономия B)
    • 4 (таксономия B)
    • и т.п.

Вот код, который я использую

 <?php if ( $the_query->have_posts() ) : ?> <ol> <?php $current_taxonomy = ''; while ( $the_query->have_posts() ) : $the_query->the_post(); ?> <?php $terms = get_the_terms( $post->ID, 'taxonomy_goes_here' ); if ( $terms && ! is_wp_error( $terms ) ) : $tax_terms = array(); foreach ( $terms as $term ) { $tax_terms[] = $term->name; } $current_tax_terms = join( ", ", $tax_terms ); ?> <?php endif; ?> <?php if($current_taxonomy != $current_tax_terms) { echo '<li><h2>'.$current_tax_terms.'</h2></li>'; $current_taxonomy = $current_tax_terms; } ?> <li><?php the_title();?></li> <?php endwhile; ?> </ol> <?php endif;?>