如何干预默认搜索,使其在自定义字段中搜索?

时间:2016-12-09 作者:Sid

我试图干扰默认WP搜索(?s=) 使其在帖子自定义字段中搜索。

首先,我试图用中的这段代码调试我的搜索functions.php:

function add_search_in_custom_fields( $query ) {
    $query->set(
        \'post_type\', \'my_post_type\',
        \'meta_query\', array(
            array(
                \'key\'     => \'my_key_title\',
                \'value\'   => \'my_value_title\',
                \'compare\' => \'LIKE\'
            )
        )
    );
    return $query;
}
add_action( \'pre_get_posts\', \'add_search_in_custom_fields\' );
奇怪的是,我得到了所有的帖子my_post_type) - 不管有没有value 或不在posts自定义字段中。

似乎是$query 不看meta_query 所有参数。

有什么想法吗?

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

你得到了所有的帖子,因为你没有正确地通过元查询。尝试以下代码

function add_search_in_custom_fields( $query ) {

  // check the query type.
  if ( $query->is_search ) {

    $meta_array = array(
      array(
        \'key\' => \'my_key_title\',
        \'value\' => $query->query_vars[\'s\'] ,
        \'compare\' => \'LIKE\',
      ),
    );

    // set meta query.
    $query->set(\'meta_query\', $meta_array);
  };
}
add_filter( \'pre_get_posts\', \'add_search_in_custom_fields\');
希望这有帮助!

相关推荐

将wp_Query替换为wp_User_Query

我在插件中制作了一些订阅者档案和单曲(个人资料页),其中我还包括了一个“用户单曲”模板,通过template_include. 不过,我正在尝试从插件中删除一些模板,以使其使用主题模板。我用了locate_template( \'single.php\' ) 从活动主题中选择单个模板。我没有使用全局wp_query 在本例中显示我的内容,但页面显示了基于查询默认值的循环(十篇帖子)。我想知道的是,我是否可以完全放弃默认查询,用wp_user_query 我可以将查询到的用户ID输入其中。然后我想筛选the