Сортировка записей по названию категории и заголовку
Пытаюсь разобраться, как вывести мои записи, отсортированные сначала по названию категории (а–я), а затем по заголовкам записей внутри категории:
КАТЕГОРИЯ А
– А пост начинается с а
– Буду вторым в выводе
– Выведите же меня наконец
КАТЕГОРИЯ Б
– Акция - еще один пост на а
– Беда, не могу придумать еще заголовок на Б
– Думаю, вы поняли суть
Как мне этого добиться?

Чтобы разбить записи по категориям, необходимо перебрать список категорий и затем выполнить запрос для каждой категории:
$categories = get_categories( array ('orderby' => 'name', 'order' => 'asc' ) );
foreach ($categories as $category) {
echo "Категория: $category->name <br/>";
$catPosts = new WP_Query( array ( 'category_name' => $category->slug, 'orderby' => 'title' ) );
if ( $catPosts->have_posts() ) {
while ( $catPosts->have_posts() ) {
$catPosts->the_post();
echo "<a href='the_permalink()'>the_title()</a>";
}
echo "<p><a href='category/$category->slug'>Еще в этой категории</a></p>";
} //конец if
} //конец foreach
wp_reset_postdata();

Для масштабируемости я не рекомендую использовать несколько объектов WP_Query
, когда в этом нет необходимости. Достаточно одного вызова get_terms
и одного WP_Query
. Таким образом вы получите все элементы и сможете использовать array_filter
, чтобы определить, какие записи относятся к каждой категории.

Я предполагаю, что вы имеете в виду ГРУППИРОВКУ записей
по категориям/таксономиям БЕЗ СОРТИРОВКИ
.
Вот код для ГРУППИРОВКИ
по категориям/таксономиям
:
$terms = get_terms( 'my_cat_name' );
Здесь cat_name
- это название таксономии, которую вы зарегистрировали, например:
register_taxonomy( 'my_cat_name', array( 'custom_post_name' ), $args )
Используйте это в
запросе
, например:$args = array( 'post_type' => 'custom_post_name', 'my_cat_name' => $term->slug, 'posts_per_page' => $no_of_posts, );
Полный код:
$terms = get_terms( 'CUSTOM_TAXONOMY_SLUG' ); if ( ! empty( $terms ) && ! is_wp_error( $terms ) ){ $output .= '<ul class="category-list">'; foreach ( $terms as $term ) { $output .= '<li class="single-cat">'; $output .= ' <h3>' . $term->name . '</h3>'; // Название таксономии/категории $args = array( 'post_type' => 'POST_TYPE_SLUG', 'CUSTOM_TAXONOMY_SLUG' => $term->slug, 'posts_per_page' => -1, ); $the_query = new WP_Query( $args ); if ( $the_query->have_posts() ) { $output .= '<ul class="cat-post-list">'; while ( $the_query->have_posts() ) { $the_query->the_post(); $output .=' <li class="cat-single-post">'; $output .=' <h4><a href="'.get_the_permalink().'">' .get_the_title(). '</a></h4>'; $output .=' </li><!-- .cat-single-post -->'; } $output .= '</ul><!-- .cat-post-list -->'; } wp_reset_postdata(); $output .= '</li><!-- .single-cat-item -->'; } $output .= '</ul><!-- .category-list -->'; }

Развивая работу Maheshwaghmare:
<?
$terms = get_terms( 'CUSTOM_TAXONOMY' );
if ( ! empty( $terms ) ){ ?>
<div class="POST_TYPE_PLURAL">
<? foreach ( $terms as $term ) {
//print_r($term) // ОТЛАДКА;
$term_slug = $term->slug;
$term_name = $term->name;
$term_description = $term->description;
?>
<div class="POST_TYPE_CATEGORY <?=$term_slug; ?>">
<h1 class="section-head"> <?=$term_name; ?> </h1>
<p><?=$term_description; ?> </p>
<?
$args = array(
'post_type' => 'CUSTOM_POST_TYPE',
'tax_query' => array(
array(
'taxonomy' => 'CUSTOM_TAXONOMY',
'field' => 'slug',
'terms' => $term_slug,
),
),
'posts_per_page' => -1,
);
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) : ?>
<? while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<div class="POST_TYPE_SINGLE">
<h3> <? the_title(); ?> </h3>
<? // ДОПОЛНИТЕЛЬНЫЙ КОД ШАБЛОНА ?>
</div>
<? endwhile;
endif;
wp_reset_postdata(); ?>
</div>
<? } // foreach
} //if terms
?>

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

Вы можете использовать параметр orderby
для нового экземпляра wp_query
:
$query = new WP_Query( array ( 'orderby' => 'title', 'order' => 'DESC' ) );
Для каждой категории используйте отдельный экземпляр.
Подробнее здесь: http://codex.wordpress.org/Class_Reference/WP_Query
