如何在同一页面中显示3种帖子类型?

时间:2012-09-05 作者:Batman

如何在同一页面搜索结果中显示3种帖子类型。

http://cinema.trancelevel.com/

例如,我有

post\\u type1-Moviespost\\u type2-Trailerspost\\u type3-Subitrari

Wen我搜索我想显示搜索结果。。

我在搜索战舰电影。

我希望搜索结果显示如下内容

1)电影:战舰

2)拖车:-战列舰HD-战列舰官方拖车

3)新闻所有包含战舰一词的新闻。

或如何为每个post\\u类型显示不同的模板。。。

例如:对于电影来说,它表现得很好:

-http://cinema.trancelevel.com/?s=Battleship&;post\\u类型=post

对于预告片,它显示了电影的主题:

-http://cinema.trancelevel.com/?s=Battleship&;post\\U类型=拖车

我在搜索中使用的内容

<form role="search" method="get" id="searchform" action="<?php echo home_url( \'/\' ); ?>">
<input class="search_input" type="text" name="s" id="s" value="Cauta filme, subtitrari, trailere, stiri" onfocus="if(this.value==this.defaultValue)this.value=\'\';" onblur="if(this.value==\'\')this.value=this.defaultValue;"/>
    <select name="post_type" class="search_select">
        <option value="post">Alege:</option>
        <option value="post">Filme</option>
        <option value="persoane">Actori</option>
        <option value="trailers">Trailere</option>
    </select>
    <input type="submit" id="searchsubmit" class="search_buton" value="Cauta" />
</form>  

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

确保帖子类型的注册参数具有public 参数设置为true,或者,publicly_queryable 设置为true,然后exclude_from_search 设置为假。

然后,通过挂接到pre_get_posts 措施:

function filter_search( $query ) {
    $postTypes = array( \'post\', \'post_type1-Movies\', \'post_type2-Trailers\', \'post_type3-Subtitrari\' );

    //Here you can modify the $postTypes array, say to account for the value of $_REQUEST[\'post_type\'] as set by your dropdown or some such.

    if ( $query->is_search ) {
        $query->set( \'post_type\', $postTypes );
    }
    return $query;
}
add_action( \'pre_get_posts\', \'filter_search\' );
现在,所有自定义帖子类型都将包含在搜索查询中。

但是,如果您希望对与同一主题相关的多个帖子类型进行分组(例如,一部特定的电影或一些此类电影),则只搜索主要主题的帖子类型可能更明智(例如,搜索“战舰”只会搜索您的电影帖子类型)。将其他帖子类型与主题关联可以通过在每个关联项的元数据中存储主要主题的id来完成。这将允许您通过简单地搜索主要主题的id来查询每个其他帖子类型的相关数据,最好是在循环中显示它(即,在循环“战舰”搜索的结果时,查询拖车帖子类型中的项目,其中的元字段“movie”设置为当前正在处理的电影帖子的id)。

SO网友:Eric Holmes

您需要更改搜索页面上的wp\\u查询以接受\'post_type\' => $_get[\'post_type\'] - 这将获取您的下拉选择。

退房Creating a Search Page 在codex中,了解如何创建/自定义搜索结果页面,以及WP_Query 类,了解如何创建自定义查询。

SO网友:Manny Fleurmond

有几种方法可以做到这一点。我曾想过为我的一个项目做这件事。

如果要将不同的帖子类型分组在一起,则需要一个初始循环,将帖子按帖子类型划分为不同的数组,然后为每个数组使用不同的模板get_template_part 功能

结束

相关推荐

我如何重写在一个存档.php页面上列出的默认项目数?

Possible Duplicate:How To Modify The Loop in archives.php To Have 11 Posts Per Page and CSS Styling 我正在存档中使用以下代码。php模板列出自定义帖子类型中的几个字段。这是一个专辑评论帖子类型,此代码会引入艺术家名称、专辑名称和专辑封面。有没有办法改变这个代码,让wordpress显示一定数量的结果?我的问题是,对于所有其他存档页面,默认值(设置为10)是可以的,但因为我只在存档上显示缩略图和名称以供审阅