Сортировка по категориям и записям в пользовательском WP Query

5 февр. 2017 г., 05:22:19
Просмотры: 26.4K
Голосов: 5

NB: У меня недостаточно репутации, чтобы задать вопрос напрямую в упомянутом посте.

Я использовал код из 1: Получить все категории и записи в этих категориях

Он выводит все категории с записями внутри них, но у меня возникли проблемы с настройкой orderby...

Конкретно в этом ответе

<?php

$args = array( 
    'posts_per_page' => -1
);

$query = new WP_Query($args);   
$q = array();

while ( $query->have_posts() ) { 

    $query->the_post(); 

    $a = '<a href="'. get_permalink() .'">' . get_the_title() .'</a>';

    $categories = get_the_category();

    foreach ( $categories as $key=>$category ) {

        $b = '<h2><a href="' . get_category_link( $category ) . '">' . $category->name . '</a></h2>';    

    }

    $q[$b][] = $a; // Создаем массив с названиями категорий и заголовками записей
}

/* Восстановление оригинальных данных поста */
wp_reset_postdata();

foreach ($q as $key=>$values) {
    echo $key;

    echo '<ul>';
        foreach ($values as $value){
            echo '<li>' . $value . '</li>';
        }
    echo '</ul>';
}

?>  

Я пытаюсь добавить сортировку сначала по названию категории, а затем внутри каждой категории - по названию записи.

Я могу добавить это в начальные аргументы $args на строке 1

$args = array( 
    'posts_per_page' => -1,
    'orderby'   => 'title',
    'order' => 'ASC',
);

Это сортирует категории в порядке названий записей, содержащихся в этих категориях.

Я пытаюсь получить сначала категории в алфавитном порядке (ASC), а затем записи внутри каждой категории также в алфавитном порядке, но не могу понять, как отсортировать и то, и другое.

Буду очень благодарен за любые советы

0
Все ответы на вопрос 1
0

Для этого вам сначала нужно получить все категории в порядке возрастания с помощью get_categories, затем передать cat_id в WP_Query, чтобы получить записи, связанные с этой категорией.

$args_cat = [
    'orderby' => 'name', // Сортировка по названию
    'order' => 'ASC',    // По возрастанию
    'hide_empty' => 0,   // Показывать пустые категории
];

$categories = get_categories($args_cat);
//print_r($categories);

if (!empty($categories)):
    foreach ($categories as $category):
        $args = [
            'post_type' => 'post',        // Тип записи
            'posts_per_page' => -1,       // Все записи
            'order' => 'ASC',            // Сортировка по возрастанию
            'orderby' => 'title',        // По заголовку
            'cat' => $category->term_id  // ID категории
        ];

        $query = new WP_Query($args);
        while ($query->have_posts()) : $query->the_post();
            // Ваш код
            the_title(); // Вывод заголовка записи
        //...
        endwhile;
        wp_reset_postdata(); // Сброс запроса 
    endforeach;
endif;

Надеюсь, это поможет!

5 февр. 2017 г. 09:00:20