WordPress仅搜索自定义元字段

时间:2015-08-16 作者:Joe

我有一个菜谱网站,每个菜谱都位于一个名为“菜谱”的自定义元字段中。我只想在用户搜索网站时搜索元字段的内容。

我下面代码的问题是:当搜索结果的数量超过每页的帖子数量(10-来自主WP设置)时,它会返回3次结果。换句话说,如果搜索有11个结果,那么序列将重复3次。没有活动插件。

function my_search_filter( $query ) {
    global $searchtest;
    global $searchcount;
    if ($query->is_search) {
        $args = array(
                \'post_type\' => \'post\',
                \'post_status\' => \'publish\',
                \'posts_per_page\' => -1,
                \'ignore_sticky_posts\' => TRUE,
                \'meta_key\' => \'recipe\',
                \'meta_value\' => sanitize_text_field($query->query_vars[\'search\']), 
                \'meta_compare\' => \'LIKE\'
        );
        $searchtest = new WP_Query ($args);
        if ($searchtest->have_posts()) { while ($searchtest->have_posts()) { $searchtest->the_post();  
            $searchtestresults[] = get_the_ID();
        }} wp_reset_postdata();
        $searchcount = count($searchtestresults);
    }
}
add_filter( \'pre_get_posts\', \'my_search_filter\' );
并在搜索中。php

if ($searchtest->have_posts()) { while ($searchtest->have_posts()) {$searchtest->the_post();
...
post content
...
<div class="post-nav">
    <div id="post-nav-next"><?php next_posts_link(\'Older posts\') ?></div>
    <div id="post-nav-prev"><?php previous_posts_link(\'Newer posts\') ?></div>
</div><!-- /post-nav -->                
这仍在开发我的本地WAMP,因此我没有提供链接。我查看了这里和其他地方关于搜索自定义元字段的相关帖子,上面的代码是我最接近获得所需结果的代码。我感谢任何帮助或替代解决方案。

1 个回复
SO网友:s_ha_dum

你在虐待pre_get_posts 代码很糟糕。具有pre_get_posts 关键是修改主查询。通过这样做,您可以减少必要的查询数量,节省一些处理时间,并保留WordPressglobals-- $wp_query, 例如,对于可能需要它们的任何其他代码来说都是整洁的。你所做的是创造新的global并用新查询填充它们。您只是将这些新查询隐藏在pre_get_posts.

如果我了解您想要实现的目标,我相信您需要:

function search_meta_only_wpse_198762($qry) {
  if ($qry->is_main_query() && $qry->is_search()) {
    $qry->set(
      \'meta_query\', 
      array(
        array(
          \'key\' => \'recipe\',
          \'value\' => sanitize_text_field($query->query_vars[\'search\']),
          \'compare\' => \'LIKE\'
        )
      )
    );
    $qry->set(\'s\',null);
  }
}
add_filter(\'pre_get_posts\',\'search_meta_only_wpse_198762\');

结束

相关推荐

Searchresult sidebar change

那么,searchresult页面侧栏位于哪里?例如,在searchresult页面中,有一个“A”侧栏。但是,我想将其更改为“B”侧栏。我看着search.php 但无法理解侧边栏的来源。