Сортировка по категориям и записям в пользовательском WP Query
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), а затем записи внутри каждой категории также в алфавитном порядке, но не могу понять, как отсортировать и то, и другое.
Буду очень благодарен за любые советы

Для этого вам сначала нужно получить все категории в порядке возрастания с помощью
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;
Надеюсь, это поможет!
