自定义发布类型特定发布模板

时间:2014-03-16 作者:Hardeep Asrani

我创建了一个自定义帖子类型,下面是完整的代码:

// Register Custom Post Type
function wrestler_register() {

    $labels = array(
        \'name\'                => _x( \'Wrestlers\', \'Post Type General Name\', \'text_domain\' ),
        \'singular_name\'       => _x( \'Wrestler\', \'Post Type Singular Name\', \'text_domain\' ),
        \'menu_name\'           => __( \'Wrestler Profiles\', \'text_domain\' ),
        \'parent_item_colon\'   => __( \'Parent Item:\', \'text_domain\' ),
        \'all_items\'           => __( \'All Items\', \'text_domain\' ),
        \'view_item\'           => __( \'View Item\', \'text_domain\' ),
        \'add_new_item\'        => __( \'Add New Profile\', \'text_domain\' ),
        \'add_new\'             => __( \'Add New\', \'text_domain\' ),
        \'edit_item\'           => __( \'Edit Item\', \'text_domain\' ),
        \'update_item\'         => __( \'Update Item\', \'text_domain\' ),
        \'search_items\'        => __( \'Search Item\', \'text_domain\' ),
        \'not_found\'           => __( \'Not found\', \'text_domain\' ),
        \'not_found_in_trash\'  => __( \'Not found in Trash\', \'text_domain\' ),
    );
    $rewrite = array(
        \'slug\'                => \'wrestler\',
        \'with_front\'          => true,
        \'pages\'               => false,
        \'feeds\'               => false,
    );
    $args = array(
        \'label\'               => __( \'wrestler_profiles\', \'text_domain\' ),
        \'description\'         => __( \'Profiles of WWE Superstars & Divas\', \'text_domain\' ),
        \'labels\'              => $labels,
        \'supports\'            => array( \'title\', \'thumbnail\', \'custom-fields\', ),
        \'hierarchical\'        => true,
        \'public\'              => true,
        \'show_ui\'             => true,
        \'show_in_menu\'        => true,
        \'show_in_nav_menus\'   => true,
        \'show_in_admin_bar\'   => true,
        \'menu_position\'       => 5,
        \'menu_icon\'           => url + \'/icon.png\',
        \'can_export\'          => true,
        \'has_archive\'         => false,
        \'exclude_from_search\' => false,
        \'publicly_queryable\'  => true,
        \'rewrite\'             => $rewrite,
        \'query_var\'           => \'wrestler\',
        \'capability_type\'     => \'page\',
    );
    register_post_type( \'wrestler_profiles\', $args );

}

// Hook into the \'init\' action
add_action( \'init\', \'wrestler_register\', 0 );
现在,我还增加了单人摔跤手。php到我的主题的根目录,但每次我查看页面时,它都会落在“Single.php”上。

谢谢

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

因为某些原因wordpress不尊重Template_Hierarchy. 解决此问题的最佳方法是“强制”wordpress使用自定义单字。您创建的php模板。要实现这一点,请在CPT下面添加以下函数。

   /* Information Posts Template selection - a single.php just for our wrestler_profiles */
function pietergoosen_info_template_include( $original_template ) {
    if ( isset( $wp->query_vars[\'wrestler_profiles\'] ) && false == $wp->query_vars[\'wrestler_profiles\']  ) {
        return get_template_directory() . \'/single-wrestler.php\';
    } else {
        return $original_template;
    }
}

add_filter( \'template_include\', \'pietergoosen_info_template_include\' );
请记住,如果您在子主题或插件中使用CPT,请更改get_template_directory() 照着

SO网友:MatthewLee

我有点晚了,但我认为值得注意的是,您的自定义帖子类型称为“摔跤手配置文件”,模板为“单摔跤手.php”,以供将来参考您的模板应命名为“single-摔跤手\\u profiles.php”,以匹配您的自定义帖子类型名称。根据模板层次结构(http://codex.wordpress.org/Template_Hierarchy), 要覆盖自定义帖子类型的单个模板,名称应为“single-$posttype.php”

如果您是通过插件添加自定义帖子类型,Pieter的优秀解决方案是我发现唯一有效的解决方案。

结束

相关推荐

高级定制字段:Single-books.php起作用,books.php不起作用

我正在使用CPT UI创建帖子类型(books)。我正在调试模式下运行。这一切都是在默认情况下发生的,Wordpress 3.8,2212主题。我在ACF中创建了一个名为Books的字段组,并添加了三个字段:book\\u title、book\\u author、pub\\u year。我将字段组设置为显示post type是否为books。然后我复制了页面。php,重命名为books。php,并将默认标题替换为模板名称:Books。我创建了一个名为Book Entries的新页面,并将模板样式设置为B