Copy post taxonomy?

时间:2013-10-01 作者:bestprogrammerintheworld

我是Wordpress的新手,我想做的是:

创建一个分类法(课程),该分类法与POST一样有效,但有区别:我需要为课程添加一些字段(如课程成本、年龄跨度、课程每周的哪一天等)。我想我可以在帖子分类中添加自定义字段,但我想将“普通帖子”与“课程”分开。

我在PHP编程方面有很多经验,但Wordpress对我来说是新的。我了解分类法和挂钩的概念,并且了解WP如何处理主题、子主题、插件等。

我在安装了一个名为Simple Taxonomy的插件https://github.com/herewithme/simple-taxonomy 我创建了一个叫做课程的分类法。问题是,我想将课程与类别相关联。当我为特定插件选择hierachical为true时,它在自己的分类法中只是层次结构,但我希望课程与post分类法具有相同的关系类型。

我读过这个How to link categories to custom taxonomy terms? 这与此类似,但我希望能够选择此类别的一个或多个类别(就像您可以为帖子分类选择类别一样)

I bascially want to copy the post-taxonomy and use it as another taxonomy with some other fields.

有可能吗?或者我必须在post分类中添加字段吗?

我只知道有一种叫做自定义帖子类型的东西http://codex.wordpress.org/Post_Types. 这就是解决这个问题的方法吗?

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

是的,您不需要自定义分类法,但需要课程的自定义帖子类型,可能还需要课程类别的自定义分类法。

在WordPress中,post类型是特定类型信息的容器:每种信息类型都是post类型。

E、 g.帖子是一种类型,而页面是另一种类型。每个帖子类型(容器)都包含一些信息:作者、标题、日期、摘要(摘录)。。。如果需要其他自定义信息(如年龄跨度),可以使用custom post fields.

之后,您可以使用分类法对这些容器进行分组。WordPress有两个分类法(组),用于对标准帖子类型进行分组:类别和标记。

创建自己的帖子类型时,还可以创建自定义分类法,并使用它们对帖子进行分组。可以使用核心分类法对CPT(自定义帖子类型)进行分组,但在大多数情况下,最好为自定义帖子类型定义自定义分类法。

要创建CPT或自定义分类法,您不需要插件:在functions.php 主题文件或您可以使用的插件register_post_typeregister_taxonomy 分别创建CPT和分类法。

CPT和自定义分类法都有一个选项hierachical.

设置为时true 对于CPT,它会创建一个类似于标准页面的帖子类型,其中一篇帖子可以有一个父级,在countrary上,如果设置为false,它会创建一个类似于标准帖子类型的帖子,其中帖子不能有父级。为分级和非分级帖子类型创建的UI非常相似。

分级自定义分类法与类别非常相似,非分级自定义分类法与post标记相似。WordPress为层次分类法和非层次分类法生成的UI是不同的:在编辑帖子屏幕中,您可以使用复选框选择层次分类法术语,非层次分类法是使用具有自动建议功能的文本字段选择的。

关于您的案例,典型的代码示例可以是:

function courses_with_cats() {
  $course_labels = array(
    \'name\' => \'Courses\',
    \'singular_name\' => \'Course\',
    \'add_new\' => \'Add New\',
    \'add_new_item\' => \'Add New Course\',
    \'edit_item\' => \'Edit Course\',
    \'new_item\' => \'New Course\',
    \'all_items\' => \'All Courses\',
    \'view_item\' => \'View Course\',
    \'search_items\' => \'Search Courses\',
    \'not_found\' => \'No Course found\',
    \'not_found_in_trash\' => \'No Courses found in Trash\',
    \'parent_item_colon\'  => \'\',
    \'menu_name\' => \'Courses\'
  );
  $course_args = array(
    \'labels\' => $course_labels,
    \'public\' => true,
    \'publicly_queryable\' => true,
    \'show_ui\' => true,
    \'show_in_menu\' => true,
    \'query_var\' => true,
    \'rewrite\' => array( \'slug\' => \'course\' ),
    \'capability_type\' => \'post\',
    \'has_archive\' => \'courses\',
    \'hierarchical\' => false,
    \'menu_position\' => null,
    \'supports\' => array(\'title\',\'editor\',\'author\',\'thumbnail\',\'excerpt\', \'comments\')
  );

  $course_cat_labels = array(
    \'name\' => \'Courses Category\',
    \'singular_name\' => \'Course Category\',
    \'search_items\' => \'Search Category\',
    \'all_items\' => \'All Categories\',
    \'parent_item\' => \'Parent Category\',
    \'parent_item_colon\' => \'Parent Category:\',
    \'edit_item\' => \'Edit Category\',
    \'update_item\' => \'Update Category\',
    \'add_new_item\' => \'Add New Category\',
    \'new_item_name\' => \'New Category Name\',
    \'menu_name\' => \'Courses Category\',
  );
  $course_cat_args = array(
    \'hierarchical\' => true,
    \'labels\' => $labels,
    \'show_ui\' => true,
    \'show_admin_column\' => true,
    \'query_var\' => true,
     \'rewrite\' => array(\'slug\' => \'courses/category\'),
  );

  register_post_type( \'course\', $course_args );

  register_taxonomy( \'courses-cat\', array(\'course\'), $course_cat_args );
}

add_action( \'init\', \'courses_with_cats\' );
使用自己的自定义分类法注册post类型只需此代码。此代码使用分层自定义分类法(如标准类别)注册非分层帖子类型(如标准帖子)。

使用此标准设置,课程档案的url类似于:http://example.com/courses/. 使用http://example.com/courses/category/a-category 显示了所有课程的档案,这些课程属于带有“a-category”的类别(类别名称可能是“a-category”)。

在Codex中查找可用于两者的参数register_post_typeregister_taxonomy.

对于register_post_type 请注意supports 参数更改编辑后屏幕中显示的内容。

结束

相关推荐

Taxonomy Overview Page?

我正在寻找一种创建分类法概述页面的方法。因此,假设您在某个页面(domain.com/my\\u tax/myterm)上,它会在“myterm”类别中显示不同的内容类型。帖子、页面和自定义内容类型。所有这些都通过了分类学。php。我可以很好地完成这项工作,但当查看内容类型“Posts”的分类法归档时,它最终会转到此概述页面,而不是一个工作的Posts归档。因此,目前无法查看一种内容类型的所有帖子并获得一个工作归档。我尝试添加<?php if ( is_post_type_archive() ) {