WP:自定义搜索

问题描述 投票:1回答:1

我真的无法理解这一点,它让我发疯。我在functions.php中添加了自己的自定义搜索功能,以便能够在post meta中进行搜索。

function custom_search_query( $query ) {
    if ( !is_admin() && $query->is_search ) {
      echo 'Is search: true <br>';
        $query->set('meta_query', array(
            array(
                'key'       => 'wpcf-description',
                'value'     => $query->query_vars['s'],
                'compare'   => 'LIKE'
            )
        ));

      var_dump($query->get('meta_query'));
    }
  }
  add_filter( 'pre_get_posts', 'custom_search_query',9999);

var_dump给了我这个结果:

array(1) { [0]=> array(3) { ["key"]=> string(16) "wpcf-description" ["value"]=> string(18) "Korte beschrijving" ["compare"]=> string(4) "LIKE" } }

所以我假设meta_query是正确的。这是完整的查询:

object(WP_Query)#754 (46) { ["query"]=> array(1) { ["s"]=> string(12) "beschrijving" } ["query_vars"]=> array(53) { ["s"]=> string(12) "beschrijving" ["error"]=> string(0) "" ["m"]=> string(0) "" ["p"]=> int(0) ["post_parent"]=> string(0) "" ["subpost"]=> string(0) "" ["subpost_id"]=> string(0) "" ["attachment"]=> string(0) "" ["attachment_id"]=> int(0) ["name"]=> string(0) "" ["static"]=> string(0) "" ["pagename"]=> string(0) "" ["page_id"]=> int(0) ["second"]=> string(0) "" ["minute"]=> string(0) "" ["hour"]=> string(0) "" ["day"]=> int(0) ["monthnum"]=> int(0) ["year"]=> int(0) ["w"]=> int(0) ["category_name"]=> string(0) "" ["tag"]=> string(0) "" ["cat"]=> string(0) "" ["tag_id"]=> string(0) "" ["author"]=> string(0) "" ["author_name"]=> string(0) "" ["feed"]=> string(0) "" ["tb"]=> string(0) "" ["paged"]=> int(0) ["meta_key"]=> string(0) "" ["meta_value"]=> string(0) "" ["preview"]=> string(0) "" ["sentence"]=> string(0) "" ["title"]=> string(0) "" ["fields"]=> string(0) "" ["menu_order"]=> string(0) "" ["embed"]=> string(0) "" ["category__in"]=> array(0) { } ["category__not_in"]=> array(0) { } ["category__and"]=> array(0) { } ["post__in"]=> array(0) { } ["post__not_in"]=> array(0) { } ["post_name__in"]=> array(0) { } ["tag__in"]=> array(0) { } ["tag__not_in"]=> array(0) { } ["tag__and"]=> array(0) { } ["tag_slug__in"]=> array(0) { } ["tag_slug__and"]=> array(0) { } ["post_parent__in"]=> array(0) { } ["post_parent__not_in"]=> array(0) { } ["author__in"]=> array(0) { } ["author__not_in"]=> array(0) { } ["meta_query"]=> array(1) { [0]=> array(3) { ["key"]=> string(16) "wpcf-description" ["value"]=> string(12) "beschrijving" ["compare"]=> string(4) "LIKE" } } } ["tax_query"]=> object(WP_Tax_Query)#3628 (6) { ["queries"]=> array(0) { } ["relation"]=> string(3) "AND" ["table_aliases":protected]=> array(0) { } ["queried_terms"]=> array(0) { } ["primary_table"]=> NULL ["primary_id_column"]=> NULL } ["meta_query"]=> bool(false) ["date_query"]=> bool(false) ["post_count"]=> int(0) ["current_post"]=> int(-1) ["in_the_loop"]=> bool(false) ["comment_count"]=> int(0) ["current_comment"]=> int(-1) ["found_posts"]=> int(0) ["max_num_pages"]=> int(0) ["max_num_comment_pages"]=> int(0) ["is_single"]=> bool(false) ["is_preview"]=> bool(false) ["is_page"]=> bool(false) ["is_archive"]=> bool(false) ["is_date"]=> bool(false) ["is_year"]=> bool(false) ["is_month"]=> bool(false) ["is_day"]=> bool(false) ["is_time"]=> bool(false) ["is_author"]=> bool(false) ["is_category"]=> bool(false) ["is_tag"]=> bool(false) ["is_tax"]=> bool(false) ["is_search"]=> bool(true) ["is_feed"]=> bool(false) ["is_comment_feed"]=> bool(false) ["is_trackback"]=> bool(false) ["is_home"]=> bool(false) ["is_404"]=> bool(false) ["is_embed"]=> bool(false) ["is_paged"]=> bool(false) ["is_admin"]=> bool(false) ["is_attachment"]=> bool(false) ["is_singular"]=> bool(false) ["is_robots"]=> bool(false) ["is_posts_page"]=> bool(false) ["is_post_type_archive"]=> bool(false) ["query_vars_hash":"WP_Query":private]=> string(32) "bf0637eea0229d81220060e8015682ce" ["query_vars_changed":"WP_Query":private]=> bool(false) ["thumbnails_cached"]=> bool(false) ["stopwords":"WP_Query":private]=> NULL ["compat_fields":"WP_Query":private]=> array(2) { [0]=> string(15) "query_vars_hash" [1]=> string(18) "query_vars_changed" } ["compat_methods":"WP_Query":private]=> array(2) { [0]=> string(16) "init_query_flags" [1]=> string(15) "parse_tax_query" } }

我至少有一个包含我正在寻找的价值的帖子时,我没有得到任何结果。这段代码出了什么问题?请帮助,因为我试图工作一段时间但不能。

php wordpress search
1个回答
1
投票

问题是,您尝试仅在最初从搜索返回的帖子上查询元值,即无。 I.E.您的查询会查找在标题/内容和元查询中包含搜索字词的帖子。

应用自定义元查询后清除搜索查询:

function custom_search_query( $query ) {

    if ( !is_admin() && $query->is_search() ) {

        echo 'Is search: true <br>';

        $query->set('meta_query', array(
            array(
                'key'       => 'wpcf-description',
                'value'     => $query->get('s'),
                'compare'   => 'LIKE'
            )
        ));

        // Clear the initial search query
        $query->set('s', '');

    }

}
add_filter( 'pre_get_posts', 'custom_search_query',9999);
© www.soinside.com 2019 - 2024. All rights reserved.