一种可能是尝试更改搜索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, 它可能会被extending类。所以你可以去创造class My_Search_Query extends WP_Query 并定义自己的内部结构以生成所需的SQL语句。