导语:默认情况下,WordPress安排按照时间倒序来显示文章。然而,在不同的WordPress模板中,你能按照字母顺序来排序文章列表。英文标题:Can I alphabetize my posts on the front page or in categories?
分类模板
例如,如果你有一个名为“词汇表”的分类,每篇文章都是一个特定的术语定义,每个术语被用作文章的标题,你可能希望文章按照字母顺序来显示。
编辑你主题的category.php文件,并在你的主循环之前作出如下的变化:
<?php get_header(); ?> <div id="content"> <ul> <?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; ?> </ul>
注意:’posts_per_page’ => -1表明这个分类中的所有文章将会被一次性显示出来。您可以将这个数字更改为任何的正整数,来限制在这个数组中显示的文章数目。
特定分类模板
如果你希望“词汇表”分类的样式与站点的其它部分的样式不同,那么你可以创建一个自定义分类模板文件。首先,找到你的“词汇表”分类的分类ID,在你的管理>分类目录管理面板的最左边的栏中被列出。
对于这个例子,我们假设“词汇表”分类的分类ID为13。
复制你主题的index.php或者category.php文件(或者如果必要的话,创建一个新文件)命名为category-13.php,插入你的代码:
<?php get_header(); ?> <div id="content"> <ul> <?php // we add this, to show all posts in our // Glossary sorted alphabetically $args = array( 'posts_per_page' => -1, 'orderby'=> 'title', 'order' => 'ASC' ); $glossaryposts = get_posts( $args ); // here comes The Loop! foreach( $glossaryposts as $post ) : setup_postdata($post); ?> <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> <?php endforeach; ?> </ul>
为你的“词汇表”分类使用一个单独的分类模板文件,本意是让你不会弄乱你的主要category.php文件和一些条件模板标签。
主页
也许你要在主页上按照字母顺序列出你所有文章的标题。这意味着你要使用 pre_get_posts 和 is_main_query修改WordPress主查询。在你的functions.php文件中,或在一个单独的插件中,插入:
function foo_modify_query_order( $query ) { if ( $query->is_home() && $query->is_main_query() ) { $query->set( 'orderby', 'title' ); $query->set( 'order', 'ASC' ); } } add_action( 'pre_get_posts', 'foo_modify_query_order' );
这要在主查询执行之前编辑它,确保主查询在任何地方被调用的时候(例如在index.php中),文章按照标题字母顺序进行排序。
结束
你学会了吗?自己去修改一下模板文件就好。