Сортировка результатов по имени и по возрастанию в Archive.php
В настоящее время я использую следующий код для вывода записей в Archive.php, но хочу, чтобы результаты были отсортированы по имени в порядке возрастания. Я просмотрел документацию, но ответ не совсем понятен. Как можно это реализовать?
<?php $post = $posts[0]; // Получение первой записи из массива ?>
Заранее благодарю.

Самый простой способ сделать это — использовать хук (pre_get_posts
), чтобы изменить порядок. Но сначала убедитесь, что запрос действительно требует изменения порядка! (Достаточно проверить с помощью is_archive()
или is_post_type_archive()
).
Например, добавьте следующий код в functions.php вашей темы...
add_action( 'pre_get_posts', 'my_change_sort_order');
function my_change_sort_order($query){
if(is_archive()):
//Если нужно для архива пользовательского типа записи, используйте: is_post_type_archive( $post_type )
//Установите порядок: ASC или DESC
$query->set( 'order', 'ASC' );
//Установите параметр сортировки
$query->set( 'orderby', 'title' );
endif;
};

Привет, сможешь показать, как работает сортировка по умолчанию? Если можно, со ссылками. Спасибо.

@LatheeshVMVilla WordPress изначально разрабатывался как блог, поэтому логичная/стандартная сортировка - по post_date DESC (по убыванию), то есть сначала новые записи. Если ты используешь WordPress для чего-то, где время менее важно (большинство типов списков, таких как коллекция записей, рецепты, глоссарий...), часто удобнее сортировать по post_title ASC (по возрастанию, то есть в алфавитном порядке по заголовку, где цифры идут перед буквами).

Спасибо. Отлично работает для моей страницы архива таксономии.

<?php
// Добавляем этот код, чтобы показать все записи в нашем
// Глоссарии, отсортированные по алфавиту
if ( is_category('Glossary') ) {
$args = array(
'posts_per_page' => -1, // -1 означает "все записи"
'orderby' => 'title', // Сортировка по заголовку
'order' => 'ASC' // В алфавитном порядке (A-Z)
);
$glossaryposts = get_posts( $args );
}
foreach( $glossaryposts as $post ) : setup_postdata( $post );
?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endforeach; ?>

Можете объяснить, почему это помогает автору вопроса? Пожалуйста, всегда добавляйте пояснение перед блоком кода. Спасибо.

Прямо из справочника WordPress - "Эта функция полностью переопределяет основной запрос и не предназначена для использования плагинами или темами. Её чрезмерно упрощённый подход к изменению основного запроса может вызывать проблемы, и её следует избегать везде, где это возможно. В большинстве случаев существуют более правильные и производительные варианты изменения основного запроса, например, через действие ‘pre_get_posts’ в WP_Query."
Итог: @Stephen Harris предлагает правильный способ решения этой задачи.
https://developer.wordpress.org/reference/functions/query_posts/
