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


15

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

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

Заздалегідь спасибі.


якщо ви використовуєте власні запити у archive.php, чи можете ви їх показати? Ви можете опублікувати повний archive.php на pastie.org та оновити свою відповідь за посиланням?
Хамедулла хан

Відповіді:


36

Найпростіший спосіб зробити це - використовувати гачок ( pre_get_postsгачок) для зміни порядку. Але ви повинні перевірити, що запит є таким, для якого ви хочете змінити замовлення! ( is_archive()або is_post_type_archive()має бути достатньою.)

Наприклад, помістіть у функцію вашої теми наступне:

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;    
    };

Привіт, чи зможете ви показати, як працює замовлення за замовчуванням? Деякі посилання, якщо можливо. Дякую
Latheesh VM Villa

@LatheeshVMVilla WP розробляється як блог, тому замовлення розумного / за замовчуванням здійснюється за post_date DESC (= низхідний), тож це найновіше-після-першого. Якщо ви використовуєте WP для того, де час є менш релевантним (більшість типів списків, наприклад, ваша колекція записів, рецепти, словник, ...), вам потрібно замовити часто post_title ASC (= Зростання, так що в алфавітному порядку за заголовком з цифрами, що передують літерам).
користувач3445853

Спасибі. Чудово працює для моєї сторінки архіву таксономії.
Сема Ернандес

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
Чи можете ви поясніть, чому це допомагає ОП? Будь ласка, завжди додайте пояснення поверх фрагмента коду. Спасибі.
кайзер

Питання полягало в сортуванні результатів за назвою та порядком у порядку виходу на Archive.php. Імовірно, згідно з відповіддю, цей код буде сортувати результати за назвою та порядком порядку на 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
Michael
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.