在WordPress中搜索自定义帖子类型

时间:2017-09-22 作者:JohnG

我试图在Wordpress中只按自定义帖子类型进行搜索。

在我的搜索表单中,我有:

<input type="hidden" name="post_type" value="customposttype" />
在我的函数文件中,我有:

 function template_chooser($template)   
 {    
  global $wp_query;   
  $post_type = get_query_var(\'post_type\');   
  if( $wp_query->is_search && $post_type == \'customposttype\' )  
   {
    return locate_template(\'customposttype-search.php\'); 
    }   
  return $template;   
  }
add_filter(\'template_include\', \'template_chooser\'); 
这让我找到了正确的搜索模板。然而,我仍然在实际的搜索结果中得到WordPress的所有结果。是否需要修改:

<?php if( have_posts()){ ?>
<?php while( have_posts() ) : the_post(); ?> 
...
在我的“customposttype search.php”中也是这样吗?

2 个回复
SO网友:JohnG

是的,我做了:

我需要

<?php if($post->post_type == \'customposttype\' ){ ?>
在下一行。我看到的一些资料都忽略了这一点。

SO网友:Юксел Османов

如果只使用pre-get posts并将查询更改为只搜索choosen自定义post类型,不是更容易吗?类似这样:

add_action( \'pre_get_posts\', \'custom_post_type_search\', 9999 );
function custom_post_type_search( $query ) {
if ( is_admin() ) {
    return;
}

if ( ! $query->is_main_query() ) {
    return;
}

if( ! $query->is_search() ) {
    return;
}
$is_custom_post_type_search = isset( $_GET[\'customposttype\'] );
if ( ! $is_course_search ) {
    return;
}
$query->set( \'post_type\', $is_custom_post_type_search );
return $query;
}

结束

相关推荐