一种可能是尝试更改搜索SQL查询。有一个过滤器。
$search = apply_filters_ref_array( \'posts_search\', array( $search, &$this ) );
和(旁注)影响
ORDER BY
以及条款
$search_orderby = apply_filters( \'posts_search_orderby\', $search_orderby, $this );
我已经有一段时间没有看搜索了,但是当我看
WP_Query::parse_search
, 我可以找到一些可能感兴趣并且值得一试的东西。
看看
protected function parse_search( &$q ) {
其中包含完整的查询变量堆栈,因此添加的所有内容实际上都位于该函数中。下面是一行:
$n = ! empty( $q[\'exact\'] ) ? \'\' : \'%\';
如果
$q[\'exact\']
那么是emtpy
$n
也将为空。接下来会发生以下情况:
if ( $n )
$q[\'search_orderby_title\'][] = "$wpdb->posts.post_title LIKE \'%$term%\'";
以及
$search .= "{$searchand}(($wpdb->posts.post_title LIKE \'{$n}{$term}{$n}\') OR ($wpdb->posts.post_content LIKE \'{$n}{$term}{$n}\'))";
因此,如果您有一个查询变量(?)已命名
exact
这需要
TRUE
, 您应该能够只运行精确匹配,而不是默认匹配
LIKE
子句后面紧跟在任何事物中间的每个匹配项后面。
照现在的样子protected
, 它可能会被extend
ing类。所以你可以去创造class My_Search_Query extends WP_Query
并定义自己的内部结构以生成所需的SQL语句。