我知道有一个插件可以做到这一点,但它对于我想添加的内容来说太广泛了。
下面是我第一次尝试扩展搜索以查询自定义字段,但没有返回任何结果。我以前编写过创建查询的代码,但这是我第一次尝试修改已有的查询,显然我遗漏了一些东西。
function st_search_all( $query ) {
if ( $query->is_search ) {
$query->set( \'post_type\', array( \'page\', \'attachment\', \'post\' ) );
$query->set( \'post_status\', \'inherit\' );
$query->set( \'meta_query\', array(
array(
\'key\' => \'_st_plaintext\',
\'value\' => "%{$query->get(\'s\')}%",
\'compare\' => \'LIKE\'
),
array(
\'key\' => \'Training Classes\',
\'value\' => "%{$query->get(\'s\')}%",
\'compare\' => \'LIKE\'
),
array(
\'key\' => \'External Content\',
\'value\' => "%{$query->get(\'s\')}%",
\'compare\' => \'LIKE\'
)
)
);
}
return $query;
}
add_filter( \'pre_get_posts\', \'st_search_all\' );
另一件事是,我还需要包括对页面/帖子的主要内容的搜索,这段代码没有尝试。如果我想在
meta_query
?
EDIT: 在进行@s\\u ha\\u dum建议的更改后转储生成的查询字符串(删除%
s、 添加OR
关系,并删除post
从中键入post_type
) 正在返回以下内容(添加缩进)。我对SQL不是很熟悉,但生成的查询似乎需要标题或内容与查询匹配,然后才能检查任何添加的字段。我是不是误读了什么?如果没有,我如何通过WP API修改它?
string(494) "
AND ((
(dev_posts.post_title LIKE \'%SBIR%\') OR
(dev_posts.post_content LIKE \'%SBIR%\')
)) AND
(dev_posts.post_password = \'\') AND
dev_posts.post_type IN
(\'page\', \'attachment\') AND
(dev_posts.post_status = \'inherit\') AND
((dev_postmeta.meta_key = \'_st_plaintext\' AND
CAST(dev_postmeta.meta_value AS CHAR) LIKE \'%SBIR%\') OR
(mt1.meta_key = \'Training Classes\' AND
CAST(mt1.meta_value AS CHAR) LIKE \'%SBIR%\') OR
(mt2.meta_key = \'External Content\' AND
CAST(mt2.meta_value AS CHAR) LIKE \'%SBIR%\') )
"
最合适的回答,由SO网友:s_ha_dum 整理而成
将此临时添加到functions.php
. 它会破坏一切,但你可以看到WHERE
条款一定要把它拿走,因为如果你把它放在那里,事情就不会正常进行。
function dump_where($w){
var_dump($w);
}
add_filter(\'posts_where\',\'dump_where\');
您应该注意的第一件事是
%
标志消失。删除这些内容,WordPress会将它们添加回原处。如果您在开始或结束时只想要其中一个,而不是两个,那么这可能会更棘手。幸运的是你没有。
其次,默认关系似乎是AND
所以除非你想对每一个都进行匹配meta_key
s您应该添加relationship
到您的元查询。
$query->set( \'meta_query\', array(
\'relation\' => \'OR\',
array(
\'key\' => \'_st_plaintext\',
/* and the rest of your query */
第三,已经搜索了帖子内容。你不应该做任何事情来实现这一点。看看
WHERE
子句我的临时代码转储,您应该能够看到发生这种情况的地方。
http://codex.wordpress.org/Class_Reference/WP_Query