如何在运行/执行wp_Query之前修改它?

时间:2016-08-07 作者:Mhluzi Bhaka

基本上,我想做的是在我的WordPress搜索表单上有一些输入字段,如下所示:

All of these words
The exact phrase
Any of these words
None of these words
然后将它们放在一个数组中,以传递到结果页。(请原谅术语-希望这有意义!)

我想的是,例如,如果有人想用“演讲”和“2016”搜索帖子,而不是“2015”或“2014”。

例如,如果我在标准WordPress搜索字段中输入以下内容:

"lecture +2016 - 2014"
我在querystring中得到:

?search_query=lecture+%2B2016+-2012
我需要的是从上面的字段手动创建它。我可以想象,我需要做一些事情,比如在“所有这些单词”字段的每个单词前面加一个加号,在“所有这些单词”字段的单词前面加一个减号?

但我如何访问和更改该查询?

如有任何建议/指示,将不胜感激!

提前感谢!

这是网站用户的要求,因此我试图让表单更直观一些,而不是让用户需要使用负面登录之类的操作符“-2014”

据我所知,如果我能在搜索中以某种方式修改/更改“s”参数,然后再实际“处理”它,那会有什么帮助

因此,如果我有以下几点:

All of these words: "lecture 2016"
None of these words: "2014"
我可以以某种方式提取“s”值,然后将该参数重新生成为如下内容:

$args = array (
\'s\' => \'\\"lecture 2016\\" -2014\',
);
这应该行得通——这是在正确的轨道上吗?

Edit: 使用以下方法获取要更改的s参数:

function search_filter($query) {
  if ( !is_admin() && $query->is_main_query() ) {
    if ($query->is_search) {
        $query->set( \'s\', \'stackoverflow\' );
    }
  } 
}

add_action(\'pre_get_posts\',\'search_filter\');

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

使用pre_get_posts 在查询运行之前修改查询对象。-https://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts

function exclude_category( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( \'cat\', \'-1,-1347\' );
    }
    else if ($query->is_search) {
        $query->set( \'s\', \'stackoverflow\' );
    }      
}
add_action( \'pre_get_posts\', \'exclude_category\' );

相关推荐

Search results for ACF data

是否可以编写查询以仅从一个自定义字段中搜索数据?我有一个名为“讲座”的CPT,我只想搜索名为“关键字”的自定义字段中的数据,我有:<?php $args = array( \'post_type\' => \'lectures\', \'order\' => \'ASC\', \'posts_per_page\' => -1, \'