从搜索查询中删除WHERE条件

时间:2012-02-24 作者:kidrobot

本机搜索页面运行如下查询:

SELECT SQL_CALC_FOUND_ROWS  wp_posts.* 
FROM wp_posts 
WHERE 1=1 AND (((wp_posts.post_title LIKE \'%keyword%\') 
OR (wp_posts.post_content LIKE \'%keyword%\')) 
AND (wp_posts.post_password = \'\') 
AND wp_posts.post_type IN (\'post\', \'page\', \'attachment\') 
AND (wp_posts.post_status = \'publish\') 
ORDER BY wp_posts.post_date DESC LIMIT 0, 10
我通过挂接到pre\\u get\\u帖子来向查询传递特定的帖子ID,因此我不需要其他帖子WHERE 与关键字相关的条件。e、 g。

add_filter(\'pre_get_posts\',\'my_search_filter\');
function my_search_filter($query) {
    if ($query->is_search) {
            // post IDs within distance X
        $matches = array(1,3,5);
        $query->query_vars[\'post__in\'] = $matches;

    }
}
如何通过修改现有查询而不是编写新查询,从查询对象中删除与post\\u title和post\\u内容相关的条件。

1 个回复
最合适的回答,由SO网友:Milo 整理而成

滤器posts_whereposts_search. 看见this answer 举几个例子。

结束

相关推荐

search this custom post type

我正在尝试在我的博客上搜索特定的自定义帖子类型。自定义帖子类型的名称为:website_bookmarks我已使用隐藏字段修改了搜索表单<input type=\"hidden\" name=\"post_type\" value=\"website_bookmarks\" /> 因此,在我的URI搜索页面上,我将看到。。。www.mydomain.com/?s=mysearchterm&post_type=website_bookmarks 问题是它只显示我的常