如何正确地在WordPress首页只显示某个目录文章列表?
最近遇到一个需求:在WordPress首页只显示某个目录的文章列表。
于是上网搜索了下,经过多次测试,找到了正确的,不会对WordPress其他功能有影响的代码:
<?php
function right_exclude_cat( $query ) {
if ( $query->is_home() && $query->is_main_query() )
$query->set( 'cat', '11' );
return $query;
}
add_filter( 'pre_get_posts', 'right_exclude_cat' );
?>
如果你在首页排除某些目录的显示,把cat对应的id设置成负数即可:
$query->set( 'cat', '-1, -2' );
上面代码正确的关键是is_main_query。is_main_query什么意思呢:
is_main_query() 是一个用来判断当前查询(如果是在循环中)是否主要查询(而不是其他查询)的条件判断函数。
这个函数通常用于在钩子(hooks)中区分一个自定义或者其他查询是否WordPress的主要查询(可能是一个页面,文章,或者是归档)。
is_main_query() 可以和前端查询(主题模板,插件等等)以及管理查询一起用。如果当前查询是主要查询返回True,否则返回false。
如果不加is_main_query(),则会导致WordPress的自定义菜单(menu)无法显示。我一开始就是没加这个条件,搞得我找了好久,都没找出自定义菜单消失的原因。