Сортировка результатов по имени и по возрастанию в Archive.php

23 янв. 2012 г., 12:03:51
Просмотры: 60.4K
Голосов: 21

В настоящее время я использую следующий код для вывода записей в Archive.php, но хочу, чтобы результаты были отсортированы по имени в порядке возрастания. Я просмотрел документацию, но ответ не совсем понятен. Как можно это реализовать?

<?php $post = $posts[0]; // Получение первой записи из массива ?>

Заранее благодарю.

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

если вы используете пользовательский запрос в вашем файле archive.php, не могли бы вы показать его? возможно, разместите полный код archive.php на http://pastie.org и обновите ваш ответ ссылкой?

Hameedullah Khan Hameedullah Khan
23 янв. 2012 г. 12:37:35
Все ответы на вопрос 3
5
54

Самый простой способ сделать это — использовать хук (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;    
    };
23 янв. 2012 г. 12:32:45
Комментарии

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

User User
8 сент. 2019 г. 00:34:36

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

user3445853 user3445853
3 дек. 2019 г. 15:25:46

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

Sema Hernández Sema Hernández
5 февр. 2020 г. 18:12:15

Сработало идеально. Спасибо!

Mark P Mark P
17 июн. 2020 г. 21:59:29

Сработало, но сломало мое меню. На странице архива больше запросов, чтобы изменить только нужный, у меня получилось с if(is_post_type_archive($post_type) && $query->query["post_type"]==$post_type)

Fanky Fanky
26 авг. 2021 г. 21:10:51
2
<?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; ?>
20 янв. 2017 г. 23:32:50
Комментарии

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

kaiser kaiser
21 янв. 2017 г. 01:12:09

Вопрос был о сортировке результатов по имени в порядке возрастания на Archive.php. Предположительно, согласно автору ответа, этот код будет сортировать результаты по имени в порядке возрастания на Archive.php?

Jon Jon
11 дек. 2019 г. 16:37:01
1

дополняя ответ Стивена, если вам нужно просто выполнить запрос и отсортировать по заголовку, вы можете использовать это в вашем файле шаблона:

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

query_posts($args);
23 янв. 2012 г. 13:38:34
Комментарии

Прямо из справочника WordPress - "Эта функция полностью переопределяет основной запрос и не предназначена для использования плагинами или темами. Её чрезмерно упрощённый подход к изменению основного запроса может вызывать проблемы, и её следует избегать везде, где это возможно. В большинстве случаев существуют более правильные и производительные варианты изменения основного запроса, например, через действие ‘pre_get_posts’ в WP_Query."

Итог: @Stephen Harris предлагает правильный способ решения этой задачи.

https://developer.wordpress.org/reference/functions/query_posts/

Michael Michael
13 окт. 2016 г. 17:33:30