WordPress高级应用:我能在首页或分类页中按字母顺序排序自己的文章吗?

导语:默认情况下,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中),文章按照标题字母顺序进行排序。

结束


你学会了吗?自己去修改一下模板文件就好。

发表评论

邮箱地址不会被公开。 必填项已用*标注