我正在修改搜索查询:
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“搜索词”置于激活过滤器的条件中?
SO网友:Dave Romsey
这个pre_get_posts
操作在posts_join
和posts_where
过滤器。
所以pre_get_posts
是一个合适的钩子,用于有条件地将回调添加到posts_join
和posts_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;
}