对于大多数 WordPress 主题来说,最新发布的文章都会出现在网站的首页上。如果您不希望最新文章出现在首页,那么应该怎么处理呢?
使用插件隐藏文章
可以直接使用插件WordPress Hide Posts来解决隐藏文章,实现“创建新帖子或编辑帖子时,可以选择在哪个存档页面上以及主页上隐藏该帖子”。
WordPress Hide Posts插件安装完毕后,在文章编辑页面右侧可以看到隐藏文章选项:
- Hide on frontpage 在首页隐藏
- Hide on categories 在分类页隐藏
- Hide on search 在搜索页隐藏
- Hide on tags page 在tag页隐藏
- Hide on authors page 在作者页隐藏
只需要在文章编辑时勾选隐藏的位置,然后发布或者更新文章就可以实现特定地方隐藏文章的功能了。
使用代码隐藏文章
1、在首页隐藏特定文章代码:
//在首页隐藏特定文章
function naibabiji_exclude_from_home($query) {
if ($query->is_home() ) {
$query->set('post__not_in', array(xx));
}
}
add_action('pre_get_posts', 'naibabiji_exclude_from_home');
function naibabiji_exclude_from_home($query) {
if ($query->is_home() ) {
$query->set('post__not_in', array(xx));
}
}
add_action('pre_get_posts', 'naibabiji_exclude_from_home');
上面的代码就是在首页隐藏特定文章的代码,代码里面的xx就是要隐藏的文章ID,多篇文章用英文逗号隔开。
2、在所有地方都隐藏文章的代码:
//所有地方隐藏文章
function naibabiji_exclude_from_everywhere($query) {
if ( $query->is_home() || $query->is_feed() || $query->is_search() || $query->is_archive() ) {
$query->set('post__not_in', array(1276));
}
}
add_action('pre_get_posts', 'naibabiji_exclude_from_everywhere');
function naibabiji_exclude_from_everywhere($query) {
if ( $query->is_home() || $query->is_feed() || $query->is_search() || $query->is_archive() ) {
$query->set('post__not_in', array(1276));
}
}
add_action('pre_get_posts', 'naibabiji_exclude_from_everywhere');
上面代码中,$query->is_home() || $query->is_feed() || $query->is_search() || $query->is_archive()是判断在哪些地方隐藏文章,代码分别是代表:首页、feed页、搜索页、归档页。如果你不需要某些地方,就删除对应的代码。
手动隐藏类别
如果想在主页隐藏整个类别的文章,可以使用上面介绍的 WP Hide Post 插件来实现,还可以通过手动添加代码到子的主题 functions.php 文件来实现。
要隐藏特定类别下的文章,首先记下类别 ID(可以编辑类别并查看 URL 以找到 ID),然后将以下代码粘贴到 functions.php 文件末尾,并将“xx”替换为类别 ID:
function myprefix_exclude_category($query) {
if ( ! is_admin() && $query->is_main_query() && $query->is_home() ) {
$query->set( 'cat', '-xx' );
}
return $query;
}
add_filter( 'pre_get_posts', 'myprefix_exclude_category' );
if ( ! is_admin() && $query->is_main_query() && $query->is_home() ) {
$query->set( 'cat', '-xx' );
}
return $query;
}
add_filter( 'pre_get_posts', 'myprefix_exclude_category' );