Сортировка записей по названию категории и заголовку

21 нояб. 2013 г., 18:27:57
Просмотры: 29.8K
Голосов: 5

Пытаюсь разобраться, как вывести мои записи, отсортированные сначала по названию категории (а–я), а затем по заголовкам записей внутри категории:

КАТЕГОРИЯ А
– А пост начинается с а
– Буду вторым в выводе
– Выведите же меня наконец

КАТЕГОРИЯ Б
– Акция - еще один пост на а
– Беда, не могу придумать еще заголовок на Б
– Думаю, вы поняли суть

Как мне этого добиться?

1
Комментарии

Вы следили за ответом? Это было решением? Если нет: почему?

kaiser kaiser
21 мая 2014 г. 14:25:18
Все ответы на вопрос 4
1

Чтобы разбить записи по категориям, необходимо перебрать список категорий и затем выполнить запрос для каждой категории:

$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();
23 мая 2014 г. 21:38:50
Комментарии

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

Eric Holmes Eric Holmes
23 мая 2014 г. 22:21:22
0

Я предполагаю, что вы имеете в виду ГРУППИРОВКУ записей по категориям/таксономиям БЕЗ СОРТИРОВКИ.

Вот код для ГРУППИРОВКИ по категориям/таксономиям:

  1. $terms = get_terms( 'my_cat_name' );

Здесь cat_name - это название таксономии, которую вы зарегистрировали, например:

register_taxonomy( 'my_cat_name', array( 'custom_post_name' ), $args )
  1. Используйте это в запросе, например:

    $args = array(
       'post_type'  => 'custom_post_name',
       'my_cat_name' => $term->slug,
       'posts_per_page' => $no_of_posts,
    );
    
  2. Полный код:

    $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 -->';
    }
    
11 июл. 2015 г. 14:19:34
2

Развивая работу 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
 ?>
21 нояб. 2016 г. 12:21:12
Комментарии

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

Chris Pink Chris Pink
21 нояб. 2016 г. 12:22:54

Было бы лучше, если бы вы объяснили код, который опубликовали, и что вы расширили из предыдущего ответа.

bravokeyl bravokeyl
21 нояб. 2016 г. 13:28:41
0
-1

Вы можете использовать параметр orderby для нового экземпляра wp_query:

$query = new WP_Query( array ( 'orderby' => 'title', 'order' => 'DESC' ) );

Для каждой категории используйте отдельный экземпляр.

Подробнее здесь: http://codex.wordpress.org/Class_Reference/WP_Query

6 дек. 2013 г. 23:26:57