为什么WP_Query‘s’s‘=>’Keyword‘只搜索’POST_TITLE‘,而不搜索’POST_CONTENT‘?

时间:2016-11-26 作者:Prasad Patel

我已经为我的自定义帖子编写了一个搜索查询。我正在为此使用WP\\u Query的搜索参数,然后它必须搜索“post\\u title”和“post\\u内容”,但它只搜索“post\\u title”,而不搜索“post\\u内容”。下面是我的代码:

$institute_name = get_user_meta($user_ID, \'inistitute_name\', true);
//add_filter( \'posts_where\' , array($this,\'posts_where\' ));     this line Irritated me.
$paged = (get_query_var(\'page\')) ? get_query_var(\'page\') : 1;
$args = array(
     \'post_type\' => \'mypost\',
     array( \'s\' => $keyword ),
    \'meta_query\' => array (
      array (
           \'key\' => \'inistitute_name\',
           \'value\' => array ($institute_name),
           \'compare\' => \'IN\'
      )
    ),
   \'posts_per_page\' => -1,
   \'paged\' => $paged,
   \'post_status\' => \'publish\',
);
$the_query = new WP_Query($args);
//remove_filter( \'posts_where\',  array($this,\'posts_where\' ));
echo "<pre>";
print_r($the_query);
echo "</pre>";
如果我打印该结果,那么我将得到如下查询:

SELECT wp_dxwe_posts.* FROM wp_dxwe_posts INNER JOIN wp_dxwe_postmeta ON 
( wp_dxwe_posts.ID = wp_dxwe_postmeta.post_id ) WHERE 1=1  AND 
( (wp_dxwe_postmeta.meta_key = \'inistitute_name\' AND 
CAST(wp_dxwe_postmeta.meta_value AS CHAR) IN (\'ITeLearn\') )) 
AND wp_dxwe_posts.post_type = \'mypost\' AND ((wp_dxwe_posts.post_status = \'publish\')) AND 
post_title LIKE \'%launch%\' GROUP BY wp_dxwe_posts.ID 
ORDER BY wp_dxwe_posts.post_date DESC 
正如我所说,它只适用于“post\\u title”,但有时不起作用,它并不总是起作用。谁能告诉我这个代码有什么问题吗?提前谢谢。

更新:下面是我在同一个文件中找到的“post\\u where”方法。我认为最好删除此方法,或者不要通过“add\\u filter”方法调用“posts\\u where”方法。最后,我通过注释“add\\u filter”得到了解决方案&;\'删除\\u filter的代码行。但你能简单地告诉我一下“add\\u filter”方法吗?我在评论“add\\u filter”方法时会遇到任何问题吗。?我正在更新上述代码。

function posts_where( $where ) {

    if(isset($_GET[\'tewa_search\'])) {
        $var=$_GET[\'tewa_search\'];
        $where .= " AND post_title LIKE \'%".$var."%\'";
    }

    return $where;
}

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

WP_Query\'ss it中的参数arguments 用于搜索post_content

一定有什么东西在改变这种行为。

类中似乎有一个方法正在更改查询:posts_where.

或者是你把s 参数转换为它自己的数组,而不是$args 数组本身。

posts\\U where过滤器允许您在发送SQL搜索查询之前对其进行编辑。删除该代码不应“破坏”您的代码,但可能会产生不同的结果。

相关推荐

nothing happen in search form

我想创建搜索表单,但当我搜索时什么都没有发生,这是代码:索引。php: <div class=\"tech-btm\"> <?php get_search_form();?> </div> 搜索表单:<form role=\"search\" method=\"get\" id=\"searchform\" action=\"<?php echo home_url(\'/\')?>\"> &