如何使搜索结果只包含页面,不包含帖子?

时间:2016-07-17 作者:Corey

我试图只返回搜索结果中的页面。

这起作用了:

/?s=term&post_type=post

它只返回帖子,不返回页面。

但相反的情况并不奏效:

/?s=term&post_type=page

这是返回页面和帖子。

如何仅返回页面?

Edit

忘了提一下,所以我尝试让用户能够单击搜索结果页面顶部的两个链接。

<a href="/?s=term&post_type=post">Search Only Posts</a>
<a href="/?s=term&post_type=page">Search Only Pages</a>
所以,我不能将所有搜索结果全局设置为只有一个或另一个。

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

您可以在上强制每个回调的post类型pre_get_posts:

is_admin() || add_action( \'pre_get_posts\', function( \\WP_Query $query ) {

    $post_type = filter_input( INPUT_GET, \'post_type\', FILTER_SANITIZE_STRING );

    if ( $post_type && $query->is_main_query() && $query->is_search() )
        $query->set( \'post_type\', [ $post_type ] );
});
如果这仍然包括其他post类型,则在该挂钩上注册了第二个回调。试着找到它;它可能是一个主题或插件。

SO网友:Rajeev

在您的搜索中。php,找到循环并在其后面插入此代码。您可以识别循环,因为它通常以以下内容开头:

<?php if ( have_posts() ) : while ( have_posts() ) : the_post();?>

Code to be inserted:

if (is_search() && ($post->post_type==\'post\')) continue; 
因此,您的代码应该如下所示:

<?php if ( have_posts() ) : while ( have_posts() ) : the_post();?>
<?php if (is_search() && ($post->post_type==\'post\')) continue; ?>
如果有效,请告诉我。

相关推荐

nothing happen in search form

我想创建搜索表单,但当我搜索时什么都没有发生,这是代码:索引。php: <div class=\"tech-btm\"> <?php get_search_form();?> </div> 搜索表单:<form role=\"search\" method=\"get\" id=\"searchform\" action=\"<?php echo home_url(\'/\')?>\"> &