仅在主页上显示帖子,但通过URL对查询帖子使用自定义帖子类型和分类

时间:2012-07-03 作者:ad2003

我想做以下工作:

我有一个索引。php文件,我在其中查询现有post\\u类型的所有帖子。如下面的代码。

 <?php if (is_home()); { ?>

    <?php
    global $wp_query;
    query_posts( array(\'post_type\' => 
array( \'movies\', 
\'music\', \'featured\' ),\'showposts\' => 10, \'paged\'=>$paged )
    );?>     

<?php }?>
我有一个导航菜单,例如“电影”,url链接到?post_type=movies 等等

但当我使用它时,每次都会显示所有帖子。当我从索引中删除上面的代码时。php一切正常。仅显示特定post\\u类型的帖子。

我只想拥有所有自定义帖子类型的所有帖子,当它真的是网站主页url时。我该怎么做?

是否可以选择创建customposttype.php ...左右就像taxonomy.php?

非常感谢。

公元

嗨,Stephen,我还有一个问题:我在这里使用这个代码来获取每个部分的标题:´post\\u type;?>´在h2标签之间-但现在在Startpage上,我得到了不同的帖子类型名称-但我只希望标题为“Home”。。。我用is\\U home()和is\\U front\\u page()试过了,但没有成功。你有什么提示吗?非常感谢!!

1 个回复
最合适的回答,由SO网友:Stephen Harris 整理而成

这是因为query_posts 将原始查询替换为新查询(包括列出的所有帖子类型)。

对于other reasons, 您不应该使用query_posts!

出于您的目的,您可以使用pre_get_posts 钩这是在查询数据库中的帖子之前激发的。“主查询”是由“url”确定的查询(即指向首页的url,?post_type= 查询变量等)。

通过连接到这一点,我们可以有条件地更改查询(即,如果我们在头版,那么我们可以告诉WordPress获取上述所有帖子类型)。

query_posts 另一方面,只有在加载模板时才会触发(所以在WordPress执行“主查询”之后)。它丢弃了这个主查询并替换了它——一路上造成了巨大的破坏(最显著的是分页)。如果你没有reset the query 使用后query_posts 你可能会让自己更加头疼。

add_action(\'pre_get_posts\',\'wpse57309_alter_front_page_query\');
function wpse57309_alter_front_page_query( $query ){
     if( $query->is_main_query() && is_front_page() ){
         if( !$query->get(\'post_type\') ){
             //post type is not set, the default will be an array of them:
             $query->set(\'post_type\',array( \'movies\', \'music\', \'featued\'));
         }
     }
}
然后可以删除query_posts 从模板中。

请记住,urlwww.example.com?post_type=xyz, 将查询帖子类型为“xyz”的帖子,如果模板存在,将使用archive-xyz.php 作为模板,根据template hierarchy.

**实际上!$query->get(\'post_type\') 条件可能没有必要,因为如果设置了条件,WordPress会将其解释为post类型的存档,而不是首页*

结束

相关推荐

Creating Custom Query

我在这里碰到了某种绊脚石,我找不到克服它的方法。我正在尝试创建一个自定义的WP查询,它可以按原籍国搜索帖子,同时选择多个国家。我有一个将国家映射到地区的表,因此初始查询将搜索所选地区,并以数组形式返回该地区的所有国家。例如,如果选择非洲,它将返回非洲境内的一系列国家。if(!empty($_REQUEST[\'region\'])){ $region = $_REQUEST[\'region\']; $regionresult = mysql_query(\"S