在Archive.php上按名称和升序对结果进行排序


15

我目前使用以下代码列出Archive.php中的帖子,但我希望结果按名称按升序排列,我已经检查了编解码器,但答案对我来说并不明确,我如何才能使它正常工作?

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

提前致谢。


如果您在archive.php中使用自定义查询,可以显示它吗?可能将完整的archive.php发布到pastie.org上,并使用链接更新您的答案?
Hameedullah Khan 2012年

Answers:


36

最简单的方法是使用挂钩(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()):
         //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;    
    };

嗨,您能显示默认排序的工作原理吗?如果可能的话,一些链接.thanks
Latheesh VM Villa

@LatheeshVMVilla WP是作为博客开发的,因此明智的/默认的排序是按post_date DESC(= descending)进行的,因此这是最新的,后继的。如果您将WP用于时间不相关的事物(大多数列表类型,例如记录集合,食谱,词汇表等),则需要经常订购post_title ASC(=升序,因此按字母顺序排列)前面有数字)。
user3445853

谢谢。适用于我的分类存档页面。
SemaHernández

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
您能解释一下为什么这可以帮助OP吗?请始终在一段代码的顶部添加说明。谢谢。
kaiser

问题是在Archive.php上按名称和升序对结果进行排序。大概根据回答者,此代码将按Archive.php上的名称和升序对结果进行排序?
乔恩(Jon)

0

对于斯蒂芬的答案,如果您只想按标题查询和排序,则可以在模板文件中使用它:

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

query_posts($args);

5
直接来自WordPress代码参考-“此函数将完全覆盖主查询,并且不打算由插件或主题使用。它过于简单的修改主查询的方法可能会出现问题,应尽可能避免。在大多数情况下,应避免使用在这种情况下,可以使用更好,更高性能的选项来修改主查询,例如通过WP_Query中的“ pre_get_posts”操作。” 底线@Stephen Harris拥有完成此任务的正确方法。 developer.wordpress.org/reference/functions/query_posts
2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.