Custom Template Taxonomy

时间:2014-01-08 作者:user2960468

我有3种自定义帖子类型-活动、音乐和视频。我有这3种帖子类型的自定义文章页面,因为将它们放在一个单一的归档页面上会显得臃肿。所以我有:

存档事件。php存档音乐。php存档视频。php单击分类法(标记或类别)时,它默认为标准存档页面。为了纠正这个问题,我设置了自定义分类模板ie。taxonomy-tagevents.php. 这工作做得很好。但我的问题是,我认为有更好的方法来实现这一点,所以我没有3个分类法副本-(自定义分类法)。有没有办法将分类法定向到自定义帖子类型归档页面?

UPDATE

<?php 

// Register Custom Post Type
function custom_post_type_music() {

    $labels = array(
        \'name\'                => _x( \'Music\', \'Post Type General Name\', \'text_domain\' ),
        \'singular_name\'       => _x( \'Music\', \'Post Type Singular Name\', \'text_domain\' ),
        \'menu_name\'           => __( \'Music\', \'text_domain\' ),
        \'parent_item_colon\'   => __( \'Parent Music:\', \'text_domain\' ),
        \'all_items\'           => __( \'All Music\', \'text_domain\' ),
        \'view_item\'           => __( \'View Music\', \'text_domain\' ),
        \'add_new_item\'        => __( \'Add New Music Tracks\', \'text_domain\' ),
        \'add_new\'             => __( \'New Music Tracks\', \'text_domain\' ),
        \'edit_item\'           => __( \'Edit Music\', \'text_domain\' ),
        \'update_item\'         => __( \'Update Music\', \'text_domain\' ),
        \'search_items\'        => __( \'Search Music\', \'text_domain\' ),
        \'not_found\'           => __( \'No Music found\', \'text_domain\' ),
        \'not_found_in_trash\'  => __( \'No Music found in Trash\', \'text_domain\' ),
    );
    $args = array(
        \'label\'               => __( \'Music\', \'text_domain\' ),
        \'description\'         => __( \'Music information pages\', \'text_domain\' ),
        \'labels\'              => $labels,
        \'supports\'            => array( \'title\', \'editor\', \'thumbnail\', \'comments\', \'revisions\', ),
        \'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\'           => \'\',
        \'can_export\'          => true,
        \'has_archive\'         => true,
        \'exclude_from_search\' => false,
        \'publicly_queryable\'  => true,
        \'capability_type\'     => \'page\',
    );
    register_post_type( \'Music\', $args );

// Initialize Taxonomy Labels
    $labels = array(
        \'name\' => _x( \'Categories\', \'taxonomy general name\', \'text_domain\' ),
        \'singular_name\' => _x( \'Category\', \'taxonomy singular name\', \'text_domain\' ),
        \'search_items\' =>  __( \'Search Types\', \'text_domain\' ),
        \'all_items\' => __( \'All Categories\', \'text_domain\' ),
        \'parent_item\' => __( \'Parent Category\', \'text_domain\' ),
        \'parent_item_colon\' => __( \'Parent Category:\', \'text_domain\' ),
        \'edit_item\' => __( \'Edit Categories\', \'text_domain\' ),
        \'update_item\' => __( \'Update Category\', \'text_domain\' ),
        \'add_new_item\' => __( \'Add New Category\', \'text_domain\' ),
        \'new_item_name\' => __( \'New Category\', \'text_domain\' ),
    );

    // Register Custom Taxonomy
    register_taxonomy(\'tagmusic\',array(\'music\'), array(
        \'hierarchical\' => true, // define whether to use a system like tags or categories
        \'labels\' => $labels,
        \'show_ui\' => true,
        \'query_var\' => true,
        \'rewrite\' => array( \'slug\' => \'cat-music\' ),
    ));

}

// Hook into the \'init\' action
add_action( \'init\', \'custom_post_type_music\', 0 );

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

如果我正确理解了您的问题,您希望避免三个CPT归档文件和三个分类法模板文件之间的代码重复吗?

如果主要是为了避免代码重复(即干-不要重复自己),我建议为每个CPT的循环内容创建模板零件文件:

  • content-{cpt1}.php
  • content-{cpt2}.php
  • content-{cpt3}.php
您仍然需要CPT归档和分类索引的模板文件:

  • archive-{cpt1}.php
  • taxonomy-{taxonomy1}.php
  • archive-{cpt2}.php
  • taxonomy-{taxonomy2}.php
  • archive-{cpt2}.php
  • taxonomy-{taxonomy2}.php
但在每个文件中,只需使用适当的模板零件文件替换循环标记即可。例如archive-{cpt1}.phptaxonomy-{taxonomy1}.php 可能如下所示:

<?php
get_header();

get_template_part( \'content\', \'cpt1\' );

get_footer();
?>
这是最直接的方法。但是,有一种使用较少模板和模板零件文件的方法:过滤template_include (或钩住template_redirect) 告诉WordPress使用哪个模板文件。

首先,创建三个模板文件,每个CPT/分类一个:

  • template-cpt1.php
  • template-cpt2.php
  • template-cpt3.php
(请注意,这些是完整的模板文件-页眉、内容和页脚-而不仅仅是模板-部分文件。)

然后,告诉WordPress什么时候使用它们。

例如:

function wpse129011_include_cpt_templates( $template ) {
    // CPT 1 archive index or CPT 1 taxonomy index
    if ( is_post_type_archive( \'cpt1\' || is_tax( \'taxonomy1\' ) {
        return get_template_directory() . \'/template-cpt1.php\';
    }     
    // CPT 2 archive index or CPT 2 taxonomy index
    else if ( is_post_type_archive( \'cpt2\' || is_tax( \'taxonomy2\' ) {
        return get_template_directory() . \'/template-cpt2.php\';
    }     
    // CPT 3 archive index or CPT 3 taxonomy index
    else if ( is_post_type_archive( \'cpt3\' || is_tax( \'taxonomy3\' ) {
        return get_template_directory() . \'/template-cpt3.php\';
    }
    return $template;
}
add_filter( \'template_include\', \'wpse129011_include_cpt_templates\' );

SO网友:Brad Dalton

您可以添加对创建自定义分类法类型的支持,并包括一个适用于无限数量分类法的模板。

下面是我用来创建CPT的代码,它还支持创建无限的自定义分类类型。

下面是完整的代码,其中还包括在任何主题中创建自定义帖子类型的代码。https://wordpress.stackexchange.com/a/128544/9884

add_action( \'init\', \'create_cpt_taxonomy_types\' );
function create_cpt_taxonomy_types() {

register_taxonomy( \'article-type\', \'news\',
array(
    \'labels\' => array(
        \'name\'          => _x( \'Taxonomy Types\', \'taxonomy general name\', \'theme\' ),
        \'add_new_item\'  => __( \'Add New Taxonomy Type\', \'theme\' ),
        \'new_item_name\' => __( \'New Taxonomy Type\', \'theme\' ),
    ),
    \'exclude_from_search\' => true,
    \'has_archive\'         => true,
    \'hierarchical\'        => true,
    \'rewrite\'             => array( \'slug\' => \'article-type\', \'with_front\' => false ),
    \'show_ui\'             => true,
    \'show_tagcloud\'       => false,
));

}
您可以将此代码与1个分类法cpt类型一起使用。php模板,您只需要一个。

结束

相关推荐