Сортировать результаты по имени и порядку asc на Archive.php

15

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

<?php $post = $posts[0]; // ?>

Заранее спасибо.

Дэйв Бернс
источник
если вы используете пользовательский запрос в вашем archive.php, можете ли вы показать его? может быть выложите полный файл archive.php на pastie.org и обновите свой ответ ссылкой?
Хамидулла Хан

Ответы:

36

Самый простой способ сделать это - использовать крючок ( pre_get_postshook) для изменения порядка. Но вы должны проверить, что запрос является тот, для которого вы хотите изменить порядок! ( 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()):
         //If you wanted it for the archive of a custom post type use: is_post_type_archive( $post_type )
           //Set the order ASC or DESC
           $query->set( 'order', 'ASC' );
           //Set the orderby
           $query->set( 'orderby', 'title' );
        endif;    
    };
Стивен Харрис
источник
Привет, вы сможете показать, как работает порядок по умолчанию? Некоторые ссылки, если возможно.
Спасибо
@LatheeshVMVilla WP разрабатывается как блог, поэтому разумный порядок / порядок по умолчанию - это post_date DESC (= по убыванию), так что это самое новое - post-first. Если вы используете WP для чего-то, где время менее актуально (большинство типов списков, таких как коллекция записей, рецепты, глоссарий, ...), вы захотите часто заказывать post_title ASC (= По возрастанию, поэтому по алфавиту по названию) с цифрами предшествующими буквами).
user3445853
Спасибо. Хорошо работает для моей страницы архива таксономии.
Сема Эрнандес
1
<?php
// we add this, to show all posts in our
// Glossary sorted alphabetically
if ( is_category('Glossary') )  {
    $args = array( 
        'posts_per_page' => -1, 
        'orderby'        => 'title', 
        'order'          => 'ASC' 
    );
    $glossaryposts = get_posts( $args );
}
foreach( $glossaryposts as $post ) : setup_postdata( $post );
    ?>
    <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endforeach; ?>
Абдельфаттах Саид Барака
источник
1
Можете ли вы объяснить, почему это помогает ОП? Пожалуйста, всегда добавляйте объяснение поверх куска кода. Спасибо.
Кайзер
Вопрос был в Сортировке результатов по имени и порядку asc на Archive.php. Предположительно в соответствии с ответчиком этот код будет сортировать результаты по имени и порядку asc на Archive.php?
Джон
0

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

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

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