自定义发布类型和自定义分类的模板

时间:2014-08-14 作者:aifrim

我正在做一个custom theme 对于a network of sites 部署在WordPress MultiSite installation.

在这些主题中,我创建了4个custom post types 它们都添加了两个分类法。第一种分类法是post_tag 其中一个是自定义分类法,类似于category

我已经选择了我所有的4个custom post types 拥有他们自己的分类类别,因为我不想要任何类别bleed 在post类型中。

这是我的代码:

<?php
function o_post_types()
{
    $post_types = array(
        \'articole\' => array(
            \'name\' => \'Articole\',
            \'single\' => \'Articol\',
            \'icon\' => \'dashicons-admin-post\'
        ),
        \'evenimente\' => array(
            \'name\' => \'Evenimente\',
            \'single\' => \'Eveniment\',
            \'icon\' => \'dashicons-video-alt\'
        ),
        \'concursuri\' => array(
            \'name\' => \'Concursuri\',
            \'single\' => \'Concurs\',
            \'icon\' => \'dashicons-awards\'
        ),
        \'fotografii\' => array(
            \'name\' => \'Fotografii\',
            \'single\' => \'Fotografie\',
            \'icon\' => \'dashicons-format-image\'
        ),
        \'promotii\' => array(
            \'name\' => \'Promoții\',
            \'single\' => \'Promoție\',
            \'icon\' => \'dashicons-share\'
        )
    );

    foreach ($post_types as $post_type) {
        $icon = $post_type[\'icon\'];
        $name_lower = strtolower($post_type[\'name\']);
        $single_lower = strtolower($post_type[\'single\']);
        if ($post_type[\'name\'] == \'Promoții\') {
            $name_lower = \'promotii\';
            $single_lower = \'promotie\';
        }
        $labels = array(
            \'name\' => $post_type[\'name\'],
            \'singular_name\' => $post_type[\'single\'],
            \'add_new\' => \'Adaugă \' . $single_lower,
            \'add_new_item\' => \'Adaugă \' . $single_lower . \' nou\',
            \'edit_item\' => \'Editează \' . $single_lower,
            \'new_item\' => $post_type[\'single\'] . \' nou\',
            \'all_items\' => \'Listă \' . $name_lower,
            \'view_item\' => \'Afișează \' . $single_lower,
            \'search_items\' => \'Caută în \' . $name_lower,
            \'not_found\' => \'Nici un \' . $single_lower . \' găsit.\',
            \'not_found_in_trash\' => \'Nici un \' . $single_lower . \' găsit în Gunoi.\',
            \'parent_item_colon\' => \'\',
            \'menu_name\' => $post_type[\'name\']
        );

        $args = array(
            \'labels\' => $labels,
            \'public\' => true,
            \'publicly_queryable\' => true,
            \'show_ui\' => true,
            \'show_in_menu\' => true,
            \'query_var\' => true,
            \'rewrite\' => array(\'slug\' => $name_lower, \'with_front\' => false),
            \'capability_type\' => \'post\',
            \'has_archive\' => true,
            \'hierarchical\' => false,
            \'menu_position\' => 5,
            \'supports\' => array(\'title\', \'editor\', \'author\', \'thumbnail\', \'excerpt\', \'comments\'),
            \'taxonomies\' => array(\'post_tag\'),
            \'menu_icon\' => $icon
        );
        register_post_type("cpt_" . $single_lower, $args);

        $labels = array(
            \'name\' => \'Categorii\',
            \'singular_name\' => \'Categorie\',
            \'search_items\' => \'Caută Categorii\',
            \'all_items\' => \'Toate Categoriile\',
            \'parent_item\' => \'Categorie Părinte\',
            \'parent_item_colon\' => \'Categorie Părinte:\',
            \'edit_item\' => \'Modifică Categorie\',
            \'update_item\' => \'Actualizează Categorie\',
            \'add_new_item\' => \'Adaugă Categorie nouă\',
            \'new_item_name\' => \'Numele noii categorii\',
            \'menu_name\' => \'Categorii\',
        );
        $args = array(
            \'hierarchical\' => true,
            \'labels\' => $labels,
            \'show_ui\' => true,
            \'show_admin_column\' => true,
            \'query_var\' => true,
            \'rewrite\' => array(
                \'hierarchical\' => true,
                \'slug\' => $name_lower,
                \'with_front\' => false
            ),
        );
        register_taxonomy("tax_" . $name_lower, "cpt_" . $single_lower, $args);
    }
}

EDIT 1*

文件名如下:

  • taxonomy-articole.php
  • taxonomy-concursuri.php
  • taxonomy-evenimente.php
  • taxonomy-fotografii.php
  • taxonomy-promotii.php
我正在尝试将列表显示为category view 其中cpt有那个术语的。例:acpt_evenimente (或cpt_events 将有一个tax_evenimente term (或tax_events 英语)如是:

滑板公园滑板秀cpt 将分配室外活动term 因为它在taxonomy-evenimente.php

问题是没有加载每个分类法的模板。有什么可以做的?

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

当您来到taxonomy archive pages, 很可能你的archive pages for your custom post types

下面是分类法归档页面的外观

  • taxonomy-{taxonomy}-{term}.php - 如果分类法是sometax, 分类学的术语是someterm WordPress会寻找taxonomy-sometax-someterm.php. 对于Post格式,分类是post_format 条款是post_format-{format}. i、 e。taxonomy-post_format-post-format-link.php

  • taxonomy-{taxonomy}.php - 如果分类法是sometax, WordPress会寻找taxonomy-sometax.php

  • taxonomy.php

  • archive.php

  • index.php

    taxonomy-tax_{$name_lower}.php 哪里$name_lower 是指定给变量的名称。

    我在评论你的帖子时提到的另一个问题是

    不要在名字中使用连字符,用下划线分隔单词

    现在,我们有机会测试您的名字是否有连字符,看看这会如何影响模板的使用。

    示例:

    如果您使用分类名称tax-mytax 然后创建一个模板taxonomy-tax-mytax.php, 您会注意到,这将不起作用,因为wordpress读取您的模板如下:tax 是您的分类名称和mytax 这是一个术语

    最后一件事,我不知道您是否有意遗漏了这一点,但您的函数应该连接到init

    EDIT 1

    还有一点是关于良好实践的,用英语写下你的论点并使其可翻译。如果有人说的语言与你的不同,那么他很难理解这些标签的含义,就像我一样:-)。这也是您的函数应该与init 为了让翻译人员可用

    EDIT 2

    似乎是您的重写规则导致了您的问题。根据聊天中的讨论,

    我有一个分类法tax_evenimente. 这是一个类似分类法的类别。我有一个学期Alte Evenimente 带着子弹alte-evenimente. site.com/evenimente/alte-evenimente 应显示为taxonomy.php.

    是的,这就是你的重写规则应该发生的事情,但它一直在继续404ing。

    <---部分报废--->

    EDIT 3

    我发现了一个很好的插件,可以帮助您修改自定义帖子类型的规则。它被称为Custom Post Type Permalinks注意:我与插件没有关联)。按照您的代码当前的状态,将其保留在适当的位置

    以下是每件事的工作原理:

    为了举例,我将使用cpt_evenimentetax_evenimente

    下载并安装plugin

    进入永久链接设置页面,向下滚动至自定义帖子类型的设置。这就是它的样子

enter image description here

更改/%postname%//%year%/%monthnum%/%postname%/ 获取所需的URL

保存永久链接

现在,为了测试

  • site.com/evenimente/alte-evenimente/ 显示分类法中术语的分类法存档tax_evenimente 在…上taxonomy-tax_evenimente.php

  • site.com/evenimente/ 显示自定义帖子类型的自定义帖子类型存档cpt_evenimente

  • site.com/evenimente/2014/10/testing-posts-1/ 显示单个立柱testing post 1

    请注意,“使用自定义分类法存档的自定义永久链接”复选框应取消选中

    我希望这就是你需要的。

结束

相关推荐

3.9 breaks multisite

我刚刚更新到3.9,我的所有网站现在都是网络上的主要(第一个)网站。如果我转到子网站管理页面,url会显示我在我的子网站上,但实际上我是网络主站点的管理员。管理栏也会显示当前站点是主网络站点,但url显示我应该在子网站上。我创建了一个新的多站点测试环境,同样的事情也发生了。如果我创建一个新的子网站,它将始终引导我到主站点,但URL将显示子网站地址。(前端和后端/管理)。似乎发生了一个重大的重定向问题。