根据搜索词添加_过滤器()

时间:2016-12-13 作者:codeispoetry

我正在修改搜索查询:

add_filter(\'posts_join\', \'myfunctionjoin\' )
add_filter( \'posts_where\',\'myfunctionwhere\' )
这些函数会稍微降低搜索响应的速度,因此我只想在搜索词与特定条件不匹配时“激活”它们。我可以通过参考$_GET[\'s\']:

if ($_GET["s"] != \'something\'){
  add_filter(\'posts_join\', \'myfunctionjoin\' )
  add_filter( \'posts_where\',\'myfunctionwhere\' )
}
但我会觉得使用WordPress“搜索词”更安全。我确实尝试过:

if ($wp_query->query_vars[\'s\'] != \'something\'){ 
  add_filter(\'posts_join\', \'myfunctionjoin\' )
  add_filter( \'posts_where\',\'myfunctionwhere\' )
}
但没有成功。。。如何将WordPress“搜索词”置于激活过滤器的条件中?

1 个回复
SO网友:Dave Romsey

这个pre_get_posts 操作在posts_joinposts_where 过滤器。

所以pre_get_posts 是一个合适的钩子,用于有条件地将回调添加到posts_joinposts_where 过滤器:

function wpse249060_pre_get_posts( $query ) {
    // Make sure we\'re doing a search query and that the search
    // term is NOT \'something\'
    if ( $query->is_search() && $query->query_vars[\'s\'] !== \'something\' ) {
        add_filter( \'posts_join\', \'wpse249060_posts_join\' );
        add_filter( \'posts_where\',\'wpse249060_posts_where\' );
    }
}
add_action( \'pre_get_posts\', \'wpse249060_pre_get_posts\' );

function wpse249060_posts_join( $join ) {
    //exit ( print_r( $join ) );
    return $join;
}

function wpse249060_posts_where( $where ) {
    //exit ( print_r( $where ) );
    return $where;
}

相关推荐

绕过WP查询中的“supress_Filters”

显然,出于某种不合逻辑的原因,开发人员决定获取所有语言帖子的唯一方法是添加supress_filters=true 到WP\\u查询(而不是像这样language_code=all 选项)。无论如何,我的情况是,我需要获取所有语言的帖子,但也需要使用过滤器修改WP\\u查询。有没有办法强制将我的过滤器添加到查询中,即使supress_filters 设置为false?这是我需要添加的过滤器:add_filter( \'posts_where\', function($where, $wp_query) {