WP_Query
默认情况下不会执行您想要的操作。如果您尝试搜索post_name
你会得到post_name=
过于严格的查询。如果您使用s
参数,您将获得%term%
搜索帖子名称和帖子内容,然后term
将匹配单词中的任何位置,而不仅仅是开头。这对于你所做的事情来说太宽泛了。和s
随着您添加条款,效率越来越低,尽管这可能不是您的问题。
如果键入“前n个”字母,则表示需要匹配,因此需要过滤查询。这应该可以做到。
function search_filter_right_wild($search) {
remove_filter(\'posts_where\',\'search_filter_right_wild\');
global $wpdb;
$pattern = "|{$wpdb->posts}.post_name = \'([^\']*)\'|";
$search = preg_replace($pattern,"{$wpdb->posts}.post_name LIKE \'$1%\'",$search);
return $search;
}
add_filter(\'posts_where\',\'search_filter_right_wild\');
$q = new WP_Query(
array(
\'name\' => \'test\',
\'post_type\' => \'attachment\',
\'numberposts\' => -1,
\'post_status\' => \'inherit\'
)
);
var_dump($q->request);
您只搜索帖子名称,过滤器会添加一个
%
仅向右,因此通配符匹配仅在术语的右侧。
在查询之前在AJAX回调中添加过滤器,它将自动删除自身(尽管最后一部分可能不是必需的)。