首页 > 解决方案 > 没有插件的自定义帖子类型中的 Wordpress 搜索

问题描述

我正在寻找一种仅在自定义帖子类型中进行搜索查询的方法,有时会过滤掉类别。

我有构建搜索查询的代码,但 WordPress 仍然返回帖子和招聘广告。

<form method="get" id="searchform" action="<?php echo esc_url( home_url( '/' ) ); ?>" role="search">
    <label class="sr-only" for="s"><?php esc_html_e( 'Search', 'understrap' ); ?></label>
    <div class="input-group">
      <input class="field form-control" id="s" name="s" type="search"
        placeholder="<?php esc_attr_e( 'Otsi &hellip;', 'job-ads' ); ?>" value="<?php the_search_query(); ?>">
      <input type="hidden" name="post_type" value="job-ads">
    </div>
  </div>
  <div class="col-md-3">
    <div class="input-group">
      <?php wp_dropdown_categories( array(
          'show_option_all' => __('All job ads', 'job-ads'),
          'taxonomy' => 'tookategooria',
          'name' => 'category',
          'orderby' => 'name',
          'echo' => 1,
          'selected' => $cat,
          'hierarchical' => true,
          'class'   => 'cat-dropdown',
          'id'  => 'custom-cat-drop',
          'value_field' => 'term_id'
        ) ); ?>  
    </div>
  </div>
  <div class="col">
    <span class="input-group-append">
      <input class="submit btn" id="searchsubmit" name="submit" type="submit"
      value="<?php esc_attr_e( 'Search', 'understrap' ); ?>">
    </span>
    </form>

我的自定义帖子类型也注册了没有插件,公开查询和其他设置已被检查。

如果我手动使用我的搜索字符串,那么它仍然会返回所有帖子

字符串 www.domain.com/?s=&post_type=job-ads&category=323

没有类别也行不通。

对于搜索结果,我使用模板来呈现循环,就像在 Worpress 自己的主题搜索结果中一样。基本上所有的代码都是建立在相同的基础上的。

任何想法如何强制 WordPress 正确显示搜索结果?

标签: phpwordpress

解决方案


在您的functions.php中添加以下代码

function my_pre_get_posts($query) {

if( is_admin() ) 
    return;

if( is_search() && $query->is_main_query() ) {
    $query->set('post_type', 'custom-post-type-name');
} 

}

add_action( 'pre_get_posts', 'my_pre_get_posts' );

推荐阅读