从特定页面上的搜索中排除类别

时间:2018-02-21 作者:jessica mele

我在我的网站的2个页面上有一个搜索栏,在我的归档页面上,我想从搜索中排除一个名为经济学(id-9)的类别。我已将此放在我的功能中。php文件:

function archive_search_filter( $query ) {
  if ( $query->is_search && $query->is_main_query() ) {
  $query->set( \'category__not_in\' , \'9\' );
  }
}
add_filter( \'pre_get_posts\', \'archive_search_filter\' );
它工作得很好,但我只想在名为archive的页面上实现它。如果我尝试使用带有is\\U页(“存档”)的If语句,它将不起作用,我也不确定是否有解决方案。我想知道功能是否正常。php会先加载,然后才能知道它是什么页面,以及是否有其他方法可以让它工作。

2 个回复
最合适的回答,由SO网友:Peter HvD 整理而成

问题是pre_get_posts 在您离开页面后调用,因此您还必须测试是否从那里进行搜索,并且可以使用wp_get_referer()

所以(理论上,很抱歉我没有时间来测试这个)你可以

if ( !is_admin() && $query->is_search() && $query->is_main_query() && wp_get_referer() == "http://www.example.com/archive" ) {

希望有帮助

PS:始终添加!is_admin() 检查以确保您没有影响管理查询。。。皮带和;支架

SO网友:obiPlabon

请尝试以下代码。

function archive_search_filter( $query ) {
    if ( ! is_admin() && is_page( \'archive\' ) ) {
        $query->set( \'category__not_in\' , \'9\' );
    }
}
add_filter( \'pre_get_posts\', \'archive_search_filter\' );

结束