ARCHIVE-CUSTOME_post.php模板不起作用

时间:2013-11-12 作者:sh.e.salh

我在WordPress 3.6.1上有一个网站,我为菜谱创建了一个自定义帖子类型,代码为:

 add_action( \'init\', \'register_cpt_my_recipes\' );
    function register_cpt_my_recipes() {
    $args = array(
    \'hierarchical\' => false,
    \'supports\' => array( \'title\', \'editor\', \'custom-fields\' ,\'tag\' , \'excerpt\', \'thumbnail\'),
    \'public\' => true,
    \'show_ui\' => true,
    \'show_in_menu\' => true,
    \'menu_position\' => 5,
    \'show_in_nav_menus\' => false,
    \'publicly_queryable\' => true,
    \'exclude_from_search\' => false,
    \'has_archive\' => true,
    \'query_var\' => true,
    \'can_export\' => true,
     /* Not necessary but added as a solution */
    \'rewrite\'=> array( \'slug\' => \'my_recipes\', \'with_front\' => true ),
    \'capability_type\' => \'post\'
    );
    register_post_type( \'my_recipes\', $args );
    /* Not necessary but added as a solution */
    flush_rewrite_rules( false );
    } 
我创建了archive-my_recipes.php 自定义模板文件,但每当我导航到mysite/my_recipes/我最终得到的代码来自archive.php 所有我的帖子,而不仅仅是帖子,形成了我的自定义帖子类型。我试过了taxonomy-my_recipes.php 但也不起作用。

而且single-my_recipes.php 工作正常。

我在WordPress文档网站上读到了这个主题herehere

这是body_class 输出:

[ archive post-type-archive post-type-archive-Array logged-in admin-bar custom-font-enabled single-author customize-support ] 
我补充道:

add_action( \'pre_get_posts\', \'add_my_post_types_to_query\' );

function add_my_post_types_to_query( $query ) {
    if ( !is_admin() && $query->is_main_query() )
        $query->set( \'post_type\', array( \'post\', \'page\', \'recipes\' ) );
    return $query;
}
发挥作用。php将我的自定义帖子类型包括在主查询中。

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

你的pre_get_posts 过滤器不正确。你改变的问题比我想象的要多。“main”查询不仅仅是主索引。您正在向每个页面添加(或试图添加)所有这些帖子类型,基本上,-作者档案、类别、所有内容。

尝试以下操作:

add_action( \'pre_get_posts\', \'add_my_post_types_to_query\' );

function add_my_post_types_to_query( $query ) {
    if ( 
      !is_admin() 
      && $query->is_main_query() 
      && \'my_recipes\' != $query->get(\'post_type\')
    ) {
        $query->set( \'post_type\', array( \'post\', \'page\', \'my_recipes\' ) );
    }
}
您的archive-my_recipes.php 现在应该可以了。我不知道这是否是正确的解决方案。我怀疑你想要is_homeis_front_page 因此,您只需将其他帖子类型添加到特定索引。类似于:

function add_my_post_types_to_query( $query ) {
    if ( 
      $query->is_home() 
      && $query->is_main_query()
    ) {
        $query->set( \'post_type\', array( \'post\', \'page\', \'my_recipes\' ) );
    }
}

结束

相关推荐

Custom post types templates

我已经注册了一个名为“Services”的自定义帖子类型,但当我给这篇帖子提供模板“single Services.php”时,它不接受这个,而是选择了“homepage.php”模板,你能告诉我这个问题吗?它也没有使用“archive services.php”模板,而是使用blog模板(index.php)使现代化代码如下:add_action(\'init\', \'services_register\'); function services_register() { $