当前浏览:首页 / WordPress函数 / register_taxonomy()

register_taxonomy( string $taxonomy, array|string $object_type, array|string $args = array() )

创建或修改分类法对象

registermore...

taxmore...

taxonomy 分类法more...


描述

注意:请勿在‘init’挂钩之前使用。

一个基于给定参数创建或修改分类法对象的简单函数。如果修改现有的分类法对象,请注意,原始注册的$object_type值将被覆盖。

译注:用于注册自定义分类法,通常与注册自定义文章类型 register_post_type() 函数一起使用。


参数

$taxonomy

(string) (必填) 分类法键名(taxonomy key),不能超过32个字符。

$object_type

(array|string) (必填) 分类法应与之关联的对象类型或对象类型数组。

$args

(array|string) (可选) 用于注册分类法的参数数组或查询字符串。

  • 'labels'
    (string[]) 该分类法的标签(label)数组,默认情况下,非分级分类法使用Tag标签,而分级分类法使用Category标签。参见get_taxonomy_labels()中的接受值。
  • 'description'
    (string) 对该分类法的简短描述性总结。
  • 'public'
    (bool) 分类法是否打算通过管理界面或前端用户公开使用。$publicly_queryable$show_ui$show_in_nav_menus的默认设置是继承自$public
  • 'publicly_queryable'
    (bool) 该分类法是否可以公开查询,如果未设置,则默认继承自 $public
  • 'hierarchical'
    (bool) 分类法是否是分级的,默认为false
  • 'show_ui'
    (bool) 是否允许在管理界面生成该分类法的UI(用户界面)用以管理分类法项目。如果未设置,默认是继承自$public(默认为true)
  • 'show_in_menu'
    (bool) 是否在管理菜单中显示分类法。如果true,分类法会作为对象类型菜单的一个子菜单显示。如果false,则不显示任何菜单。$show_ui必须为true。如果未设置,默认是继承自$show_ui(默认为true)
  • 'show_in_nav_menus'
    (bool) 使该分类法可在导航菜单中被选择使用。如果未设置,则默认继承自$public(默认为true)
  • 'show_in_rest'
    (bool) 是否在REST API中包含分类法,如果设置true,分类法就可以在区块编辑器中使用。
  • 'rest_base'
    (string) 改变REST API路由的基本url,默认是$taxonomy
  • 'rest_namespace'
    (string) 改变REST API路由的命名空间URL,默认是wp/v2
  • 'rest_controller_class'
    (string) REST API控制器类的名称,默认为 'WP_REST_Terms_Controller'
  • 'show_tagcloud'
    (bool) 是否在标签云小工具中列出分类法,如果未设置,默认是继承自 $show_ui (默认 true)
  • 'show_in_quick_edit'
    (bool) 是否在快速/批量编辑面板中显示分类法,如果未设置,默认是继承自 $show_ui (默认 true)
  • 'show_admin_column'
    (bool) 是否在其文章类型列表界面上显示分类法的栏目,默认为false
  • 'meta_box_cb'
    (bool|callable) 为元框(meta box)的显示提供一个回调函数。如果不设置,post_categories_meta_box()用于分级分类法,post_tags_meta_box()用于非分级分类法。如果false,则不显示元框。
  • 'meta_box_sanitize_cb'
    (callable) 回调函数,用于清理从元框(meta box)中保存的分类法数据。如果没有定义回调,将根据$meta_box_cb的值确定一个适当的回调。
  • 'capabilities'
    (string[]) 该分类法的能力数组
    • 'manage_terms'
      (string) 默认 'manage_categories'.
    • 'edit_terms'
      (string) 默认 'manage_categories'.
    • 'delete_terms'
      (string) 默认 'manage_categories'.
    • 'assign_terms'
      (string) 默认 'edit_posts'.
  • 'rewrite'
    (bool|array) 触发对该分类法的重写处理,默认true,使用$taxonomy作为slug。要防止重写,请设置为false。若要指定重写规则,可以传递一个数组,其中包含以下任一个键:
    • 'slug'
      (string) 自定义固定链接结构 slug,默认 $taxonomy key
    • 'with_front'
      (bool) 固定链接结构是否应以 WP_Rewrite::$front 为前缀,默认 true
    • 'hierarchical'
      (bool) 分级重写标签或不分级,默认为false
    • 'ep_mask'
      (int) 指定一个端点掩码,默认 EP_NONE
  • 'query_var'
    (string|bool) 设置该分类法的查询变量键,默认是 $taxonomy 键。如果 false,分类法无法通过 ?{query_var}={term_slug} 进行访问,如果是一个字符串,查询 ?{query_var}={term_slug} 将有效。
  • 'update_count_callback'
    (callable) 其工作方式很像钩子,因为它将在计数更新时被调用。附加在文章类型上的分类法,默认使用 _update_post_term_count(),它在计数前确认对象是否已发布。对于附加于其他对象类型(如用户)的分类法,默认为 _update_generic_term_count()
  • 'default_term'
    (string|array) 将用于分类法的默认term(分类项)
    • 'name'
      (string) 默认term的名称
    • 'slug'
      (string) 默认term的slug
    • 'description'
      (string) 默认term的描述
  • 'sort'
    (bool) 该分类法中的term是否应按照提供给wp_set_object_terms()的顺序进行排序。默认为null,等同于false
  • 'args'
    (array)wp_get_object_terms()中自动使用的参数数组,用于该分类法。
  • '_builtin'
    (bool) 该分类法是否为内置分类法。仅供内部使用! 默认为false

默认值: array()


返回

(WP_Taxonomy|WP_Error) 成功是返回注册的分类法对象,失败为 WP_Error 对象。


说明

此函数用于添加或覆盖分类法。它接受一个名称、一个它所影响的对象、以及一个参数数组。它不返回任何东西。

在选择分类法名称时应该小心,以免与其他分类法、文章类型、以及保留的WordPress公共和私有查询变量相冲突。这些变量的完整列表在下文中的保留项部分有列出。特别是,应该避免使用大写字母。

稳妥考虑,在为自定义文章类型注册自定义分类法时,最好在函数之后使用register_taxonomy_for_object_type(),将它们相互连接。否则,你可能会遇到陷阱,即在parse_requestpre_get_posts期间运行的过滤器回调中,文章类型没有被连接。

参数详细说明

$taxonomy 是分类法的名称,名称应该只包含小写字母和下划线,并且长度不超过32个字符(数据库结构限制)。默认为 None
$object_type 是分类法对象的对象类型名称,对象类型可以是内置的文章类型或任何可能注册的自定义文章类型,默认为 None
内置文章类型:

  • post
  • page
  • attachment
  • revision
  • nav_menu_item
  • custom_css
  • customize_changeset
自定义文章类型:

  • {custom_post_type} – 自定义文章类型名称必须全部是小写字母,没有任何空格
  • null – 明确设置为null可以注册分类法,但不会将其与任何对象相关联,因此它在管理界面中不能直接使用。你需要在注册自定义post_type(见register_post_type())或使用register_taxonomy_for_object_type()时,使用 "taxonomy" 参数(通过$args传递)手动注册它。
$args
(array/string) (可选) 参数数组

默认:None

参数数组说明

label
(string) (可选) 标明要翻译的分类法的复数描述性名称

默认:被 $labels->name 覆盖
labels
(array) (可选) labels – 该分类法的标签(label)数组,默认情况下,非分级类型使用tag标签,分级类型使用category标签。

默认:如果为空,name被设置为标签值,singular_name被设置为name值
  • name’ – 分类法的常规名称,通常是复数。与$tax->label相同并被其覆盖。默认是 _x( 'Post Tags', 'taxonomy general name' ) 或 _x( 'Categories', 'taxonomy general name' ),在对这个字符串进行国际化处理时,请使用与你的文章类型相匹配的gettext上下文。例如 _x('Writers', 'taxonomy general name');
  • singular_name’ – 该分类法的单数对象名称,默认是 _x( 'Post Tag', 'taxonomy singular name' ) 或 _x( 'Category', 'taxonomy singular name' ),在对这个字符串进行国际化处理时,请使用与你的帖子类型相匹配的gettext上下文。例如 _x('Writer', 'taxonomy singular name');
  • menu_name’ – 菜单名称文本,这个字符串是给菜单项目的名称。如果没有设置,默认为 name 标签的值。
  • all_items’ – 所有项目的文本,默认是 __( 'All Tags' ) 或 __( 'All Categories' )
  • edit_item’ – 编辑项目的文本,默认是 __( 'Edit Tag' ) 或 __( 'Edit Category' )
  • view_item’ – 查看项目文本,默认是 __( 'View Tag' ) 或 __( 'View Category' )
  • update_item’ – 更新项目的文本,默认是 __( 'Update Tag' ) 或 __( 'Update Category' )
  • add_new_item’ – 添加新项目的文本,默认是 __( 'Add New Tag' ) 或 __( 'Add New Category' )
  • new_item_name’ – 新项目名称文本,默认是 __( 'New Tag Name' ) 或 __( 'New Category Name' )
  • parent_item’ – 父项目文本,这个字符串不用于非分级分类法,如文章标签。默认是 null 或 __( 'Parent Category' )
  • parent_item_colon’ – 与 parent_item 相同,但在 null 结尾处有冒号 : ,__( 'Parent Category:' )
  • search_items’ – 搜索项目文本,默认是 __( 'Search Tags' ) 或 __( 'Search Categories' )
  • popular_items’ – 热门项目的文本,这个字符串不用于分级分类法,默认是 __( 'Popular Tags' ) 或 null
  • separate_items_with_commas’ – 在分类法元框(meta box)中使用的:用逗号分隔项目的文本。这个字符串不用于分级分类法。默认是 __( 'Separate tags with commas' ), 或 null
  • add_or_remove_items’ – 添加或删除项目的文本,当JavaScript被禁用时,在元框中使用。这个字符串不用于分级分类法。默认是 __( 'Add or remove tags' ) 或 null
  • choose_from_most_used’ –  在分类法元框中使用的:从最常用的项目中选择的文本,这个字符串不用于分级分类法。默认是 __( 'Choose from the most used tags' ) 或 null
  • not_found’ (3.6+) – 当没有标签时,通过点击分类法元框中的 "从最常用的标签中选择" 而显示的文本,以及(4.2+)– 当某一分类法没有项目时,term列表表中使用的文本。默认是 __( 'No tags found.' ) 或 __( 'No categories found.' )
  • back_to_items’ – term更新后显示的文本,用于返回主索引的链接,默认是 __( '← Back to tags' ) 或 __( '← Back to categories' )
public
(boolean) (可选) 分类法是否打算通过管理界面或前端用户公开使用。$publicly_queryable$show_ui$show_in_nav_menus的默认设置是继承自$public

默认:true
publicly_queryable
(boolean) (可选) 该分类法是否可公开查询

默认:$public
show_ui
(boolean) (可选) 是否为该分类法生成一个默认的UI(用户界面)用以管理

默认:如果没有设置,默认为 public 参数的值。从3.5版开始,对附件分类法设置为false会隐藏UI
show_in_menu
(boolean) (可选) 在管理菜单中显示分类法,show_ui 必须为 true

默认:show_ui 参数的值
  • ‘false’ – 不在管理菜单中显示
  • ‘true’ – 显示为相关对象类型的子菜单
show_in_nav_menus
(boolean) (可选) true 使该分类法可在导航菜单中被选择使用

默认:如果未设置,默认为 public 参数的值
show_in_rest
(boolean) (可选) 是否在REST API中包含分类法,如果要在古腾堡区块编辑器中使用该分类法,则需要设置为 true

默认:false
rest_base
(string) (可选) 要改变REST API路由的基本url

默认:$taxonomy
rest_controller_class
(string) (可选) REST API控制器类名称

默认:WP_REST_Terms_Controller
show_tagcloud
(boolean) (可选) 是否允许标签云小工具使用该分类法

默认:如果没有设置,默认为 show_ui 参数的值
show_in_quick_edit
(boolean) (可选) 是否在快速/批量编辑面板中显示分类法。(自4.2版起可用)

默认:如果没有设置,默认为 show_ui 参数的值
meta_box_cb
(callback) (可选) 为元框(meta box)显示提供一个回调函数名称。(自3.8起可用)

默认:null

注:对于分级分类法,默认为类别元框(meta-boxes.php中的post_categories_meta_box()),对于非分级分类法,默认为标签元框(post_tags_meta_box())。如果设置为false,则不显示任何元框。

show_admin_column
(boolean) (可选) 是否允许在相关的文章类型表界面上自动创建分类法的栏目。(从3.5开始可用)

默认:false
description
(string) (可选) 对分类法的描述

默认:“”
hierarchical
(boolean) (可选) 这个分类法是像类别那样分级的(有下级)还是像标签那样不分级的。

默认:false

注意:分级分类法将有一个带有复选框的列表,用于在文章编辑页面的分类管理框中选择现有分类项(如默认文章类别)。非分级分类法只有一个空文本字段,用于键入分类项以与文章关联(如默认的文章标签)。

update_count_callback
(string) (可选) 一个函数名称,当相关的$object_type(如post)的计数被更新时,将被调用。工作方式很像一个钩子。

默认:None – 见下文注释。

注:虽然默认值为'',但在wp_update_term_count_now()中实际执行计数更新时,如果分类法仅附加到post类型(与user等其他WordPress对象相反),则内置的_update_post_term_count()函数将用于仅统计与该分类项相关联的已发布文章,否则将使用_update_generic_term_count(),这不进行此类检查。

这在附件的情况下非常重要。由于附件是post的一种,因此将使用默认的_update_post_term_count()。然而,这可能是不可取的,因为这将只计算实际附加到另一个文章的附件(例如在文章中插入图像时)。这意味着,您只需使用媒体库上传到WordPress,但实际上没有附加到其他文章的附件将不被计算在内。如果将分类法与附件关联的目的是利用媒体库作为一种文档管理解决方案,那么您可能更感兴趣的是未连接的媒体项的数量,而不是附加到文章的数量。在这种情况下,您应该通过将 “_update_generic_term_count” 设置为update_count_callback的值来强制使用_update_generic_term_count()

另一个重要的考虑因素是_update_post_term_count()只统计发布的文章。如果您使用的是自定义的文章状态,或者使用的是自定义文章类型,其中“发布”不一定是分类项计数的考虑因素,那么您需要提供自己的回调,该回调不包括where子句的post_status部分。

query_var
(boolean or string) (可选) false则禁用query_var,设置为字符串则使用自定义query_var,而不是默认的$taxonomy,即分类法的 "名称"。true不被视为有效条目,会导致404问题。

默认:$taxonomy

注:query_var 用于通过WP_Querynew WP_Query(array('people'=>$person_name))和URL查询如/?people=$person_name进行直接查询。将 query_var 设置为false将禁用这些方法,但您仍然可以使用显式的WP_Query分类查询(如WP_Query(array('taxonomy'=>'people', 'term'=>$person_name)))获取文章。

rewrite
(boolean/array) (可选) 设置为false以防止自动URL重写,也称为 "pretty permalinks"。传递一个$args数组来覆盖固定链接的默认URL设置,如下所述:

默认:true
  • slug’ – 用作固定链接文本(如/tag/)– 默认为$taxonomy(分类法的名称slug)
  • with_front’ – 允许固定链接以front base(链接前基段)为前缀 – 默认为 true
  • hierarchical’ – true 或 false 允许分层式的URL(在3.1版中实现) – 默认为 false
  • ep_mask’ – (对固定链接是必须的) 为该分类法指定一个端点掩码 – 默认为 EP_NONE。如果你不指定EP_MASK,固定链接将无法工作。

注意:更改后,可能需要刷新重写规则。您可以手动执行此操作,方法是转到固定链接设置页面并重新保存规则 — 您不需要更改它们 — 或调用$wp_rewrite->flush_rules()。在创建分类后,您应该只刷新一次规则,而不是每次加载插件/主题时。

capabilities
(array) (可选) 该分类法的能力数组

默认:None
  • manage_terms’ – ‘manage_categories’
  • edit_terms’ – ‘manage_categories’
  • delete_terms’ – ‘manage_categories’
  • assign_terms’ – ‘edit_posts’
sort
(boolean) (可选) 这个分类法是否应该记住term(分类项)被添加到对象中的顺序。

默认:None
_builtin
(boolean) (不适用于常规用途) 此分类法是否为原生内置的。注意:这个条目是用来记录的 – 核心开发者建议你在注册自己的分类法时不要使用这个条目。

默认:false

保留项

如果你通过$_GET或$_POST传递term(分类项),避免以下保留项是特别重要的。这样做可能会导致WordPress在没有任何其他提示或解释的情况下以404错误进行响应。

  • attachment
  • attachment_id
  • author
  • author_name
  • calendar
  • cat
  • category
  • category__and
  • category__in
  • category__not_in
  • category_name
  • comments_per_page
  • comments_popup
  • custom
  • customize_messenger_channel
  • customized
  • cpage
  • day
  • debug
  • embed
  • error
  • exact
  • feed
  • fields
  • hour
  • link_category
  • m
  • minute
  • monthnum
  • more
  • name
  • nav_menu
  • nonce
  • nopaging
  • offset
  • order
  • orderby
  • p
  • page
  • page_id
  • paged
  • pagename
  • pb
  • perm
  • post
  • post__in
  • post__not_in
  • post_format
  • post_mime_type
  • post_status
  • post_tag
  • post_type
  • posts
  • posts_per_archive_page
  • posts_per_page
  • preview
  • robots
  • s
  • search
  • second
  • sentence
  • showposts
  • static
  • status
  • subpost
  • subpost_id
  • tag
  • tag__and
  • tag__in
  • tag__not_in
  • tag_id
  • tag_slug__and
  • tag_slug__in
  • taxonomy
  • tb
  • term
  • terms
  • theme
  • title
  • type
  • types
  • w
  • withcomments
  • withoutcomments
  • year


源码

查看源码 官方文档


更新日志

版本描述
5.9.0引入了 rest_namespace 参数
5.5.0引入了default_term参数
5.4.0添加了注册的分类法对象作为返回值
5.1.0引入了meta_box_sanitize_cb参数
4.7.0引入了 show_in_rest, 'rest_base' 和 'rest_controller_class' 参数,以在 REST API 中注册分类
4.5.0引入了publicly_queryable参数
4.4.0public参数现在控制是否可以在前端查询分类法
4.2.0引入了show_in_quick_edit参数
2.3.0开始引入

使用示例

  • 示例1

    如果希望分类面板在区块编辑器的侧栏上可见,则应将show_in_rest设置为true

  • 示例2

    注意不要为slugquery_var$taxonomy name使用保留字。请参阅WP_Query以获取它们的列表。

    这包括“author”之类的词。如果试图使用“author”作为分类法覆盖自定义分类法的默认slugquery_var以匹配这些单词,它们将无法正常工作。

    可以正常管理(显示一个菜单,分类项可以被创建和关联等)。但前端将无法正常工作。例如,一个网址`https://example.org/author/name`,可能不会显示任何结果(如果它正在寻找文章作者,而不是你的分类法)。但是,在重写匹配过程中,它似乎首先尝试了这两种结果,但实际查询时却没有过滤这两种结果。最终的结果是查询是空的,并且匹配所有的结果,WordPress显示你的主页(甚至不是`archive.php`)。

    从WordPress 4.9.5开始,当您意外使用其中一个单词时,没有警告。

  • 示例3

    请注意,分类名称 – 上面的$taxonomy参数 – 应仅包括字符a-z0-9_。当您注册一个具有大写字母的分类法时,它可能会起作用。但是在WP中,分类法slug在sanitize_key()中的不同地方运行,例如在AJAX标签搜索期间,这将导致微妙的破坏。

  • 示例4

    为一个文章类型注册两个分类法

    本例为名为“book”的文章类型注册了两种分类法:genres 和 writers

    注意:您可以在主题的functions.php模板文件中定义自定义分类:

    /**
     * Create two taxonomies, genres and writers for the post type "book".
     *
     * @see register_post_type() for registering custom post types.
     */
    function wpdocs_create_book_taxonomies() {
    	// Add new taxonomy, make it hierarchical (like categories)
    	$labels = array(
    		'name'              => _x( 'Genres', 'taxonomy general name', 'textdomain' ),
    		'singular_name'     => _x( 'Genre', 'taxonomy singular name', 'textdomain' ),
    		'search_items'      => __( 'Search Genres', 'textdomain' ),
    		'all_items'         => __( 'All Genres', 'textdomain' ),
    		'parent_item'       => __( 'Parent Genre', 'textdomain' ),
    		'parent_item_colon' => __( 'Parent Genre:', 'textdomain' ),
    		'edit_item'         => __( 'Edit Genre', 'textdomain' ),
    		'update_item'       => __( 'Update Genre', 'textdomain' ),
    		'add_new_item'      => __( 'Add New Genre', 'textdomain' ),
    		'new_item_name'     => __( 'New Genre Name', 'textdomain' ),
    		'menu_name'         => __( 'Genre', 'textdomain' ),
    	);
    
    	$args = array(
    		'hierarchical'      => true,
    		'labels'            => $labels,
    		'show_ui'           => true,
    		'show_admin_column' => true,
    		'query_var'         => true,
    		'rewrite'           => array( 'slug' => 'genre' ),
    	);
    
    	register_taxonomy( 'genre', array( 'book' ), $args );
    
    	unset( $args );
    	unset( $labels );
    
    	// Add new taxonomy, NOT hierarchical (like tags)
    	$labels = array(
    		'name'                       => _x( 'Writers', 'taxonomy general name', 'textdomain' ),
    		'singular_name'              => _x( 'Writer', 'taxonomy singular name', 'textdomain' ),
    		'search_items'               => __( 'Search Writers', 'textdomain' ),
    		'popular_items'              => __( 'Popular Writers', 'textdomain' ),
    		'all_items'                  => __( 'All Writers', 'textdomain' ),
    		'parent_item'                => null,
    		'parent_item_colon'          => null,
    		'edit_item'                  => __( 'Edit Writer', 'textdomain' ),
    		'update_item'                => __( 'Update Writer', 'textdomain' ),
    		'add_new_item'               => __( 'Add New Writer', 'textdomain' ),
    		'new_item_name'              => __( 'New Writer Name', 'textdomain' ),
    		'separate_items_with_commas' => __( 'Separate writers with commas', 'textdomain' ),
    		'add_or_remove_items'        => __( 'Add or remove writers', 'textdomain' ),
    		'choose_from_most_used'      => __( 'Choose from the most used writers', 'textdomain' ),
    		'not_found'                  => __( 'No writers found.', 'textdomain' ),
    		'menu_name'                  => __( 'Writers', 'textdomain' ),
    	);
    
    	$args = array(
    		'hierarchical'          => false,
    		'labels'                => $labels,
    		'show_ui'               => true,
    		'show_admin_column'     => true,
    		'update_count_callback' => '_update_post_term_count',
    		'query_var'             => true,
    		'rewrite'               => array( 'slug' => 'writer' ),
    	);
    
    	register_taxonomy( 'writer', 'book', $args );
    }
    // hook into the init action and call create_book_taxonomies when it fires
    add_action( 'init', 'wpdocs_create_book_taxonomies', 0 );
    
  • 示例5

    私有分类示例

    如果您不希望您的分类法公开,可以使用publicrewrite参数来抑制它。它可以由你的插件或主题在内部使用,但不会生成自己的url。

    /**
     * Register a private 'Genre' taxonomy for post type 'book'.
     *
     * @see register_post_type() for registering post types.
     */
    function wpdocs_register_private_taxonomy() {
     	$args = array(
    		'label'        => __( 'Genre', 'textdomain' ),
    		'public'       => false,
    		'rewrite'      => false,
    		'hierarchical' => true
    	);
    	
    	register_taxonomy( 'genre', 'book', $args );
    }
    add_action( 'init', 'wpdocs_register_private_taxonomy', 0 );
    
  • 示例6

    注意:古腾堡编辑器不支持“meta_box_cb”参数

  • 示例7

    In order to have a taxonomy appear in the URL hierarchy of the relevant CPT, you can rewrite the taxonomy slug to contain the CPT’s slug. But you must register the CPT after registering the taxonomy, otherwise the rewrite will not work, i.e. in this case, book CPT must be registered after genre taxonomy.

    为了在相关CPT的URL层次结构中显示分类法,可以重写分类法slug以包含CPT的slug但是您必须在注册分类后注册CPT,否则重写将不起作用,即在这种情况下,book CPT必须在 genre 分类后注册。

    /**
     * Register a 'genre' taxonomy for post type 'book', with a rewrite to match book CPT slug.
     *
     * @see register_post_type for registering post types.
     */
    function wpdocs_create_book_tax_rewrite() {
        register_taxonomy( 'genre', 'book', array(
            'rewrite'      => array( 'slug' => 'books/genre' )
        ) );
    }
    add_action( 'init', 'wpdocs_create_book_tax_rewrite', 0 );
  • 示例8

    注意`register_taxonomy`的两个未记录的配置参数(`$args`数组键)。`sort`和`args`。把`sort`设置为`true`将使WordPress保留term被添加到对象的顺序。设置`args`可以让你指定一个配置参数数组,当这些参数存在时,在使用`wp_get_object_terms`函数查询指定分类法中的term时,它们将覆盖`$args`数组中的相应参数。这使得term的显示顺序与它们在编辑器中定义的顺序一致。

  • 示例9

    声明:如果要确保自定义分类法的行为类似于标签,则必须添加选项'update_count_callback' => '_update_post_term_count',至少从4.6.1版开始,甚至更早
    简单地将分类声明为非分级,其行为与标签完全相同。

  • 示例10

    如果您想使用动态功能从前端显示和管理分类,请使用如下数组附加“capabilities”键。

    /**
     * Register a 'genre' taxonomy for post type 'book'.
     *
     * Register custom capabilities for taxonomies.
     *
     * @see register_post_type for registering post types.
     */
    function wpdocs_create_book_tax() {
        register_taxonomy( 'genre', 'book', array(
            'label'        => __( 'Genre', 'textdomain' ),
            'rewrite'      => array( 'slug' => 'genre' ),
            'hierarchical' => true,
    		'capabilities' => array(
    			// $taxonomy['slug'] = genre;
    			'manage_terms'	=>	'manage_'.$taxonomy['slug'],
    			'edit_terms'	=>	'edit_'.$taxonomy['slug'],
    			'delete_terms'	=>	'delete'.$taxonomy['slug'],
    			'assign_terms'	=>	'assign_'.$taxonomy['slug'],
    		),
        ) );
    }
    add_action( 'init', 'wpdocs_create_book_tax', 0 );
    
  • 示例11

    用于注册自定义分类法(将 hierarchical 设置为 true),并希望所有标签选项都已设置,并且Gutenberg编辑器已就绪(show_in_rest => true)。这是代码。

    function register_custom_taxonomy() {
    
    	$labels = array(
    		'name'              => _x( 'Genres', 'taxonomy general name', 'textdomain' ),
    		'singular_name'     => _x( 'Genre', 'taxonomy singular name', 'textdomain' ),
    		'search_items'      => __( 'Search Genres', 'textdomain' ),
    		'all_items'         => __( 'All Genres', 'textdomain' ),
    		'view_item'         => __( 'View Genre', 'textdomain' ),
    		'parent_item'       => __( 'Parent Genre', 'textdomain' ),
    		'parent_item_colon' => __( 'Parent Genre:', 'textdomain' ),
    		'edit_item'         => __( 'Edit Genre', 'textdomain' ),
    		'update_item'       => __( 'Update Genre', 'textdomain' ),
    		'add_new_item'      => __( 'Add New Genre', 'textdomain' ),
    		'new_item_name'     => __( 'New Genre Name', 'textdomain' ),
    		'not_found'         => __( 'No Genres Found', 'textdomain' ),
    		'back_to_items'     => __( 'Back to Genres', 'textdomain' ),
    		'menu_name'         => __( 'Genre', 'textdomain' ),
    	);
    
    	$args = array(
    		'labels'            => $labels,
    		'hierarchical'      => true,
    		'public'            => true,
    		'show_ui'           => true,
    		'show_admin_column' => true,
    		'query_var'         => true,
    		'rewrite'           => array( 'slug' => 'genre' ),
    		'show_in_rest'      => true,
    	);
    
    
    	register_taxonomy( 'genre', 'book', $args );
    
    }
  • 示例12

    在数组中为特定文章类型注册多个分类。

    function add_post_taxonomy() {
    
      $taxArray = array(
        array(
          "taxName" => 'tax中文名1',
          "taxNameEn" =>'taxSlu1'
        ),
        array(
          "taxName" => 'tax中文名2',
          "taxNameEn" =>'taxSlu2'
        ),
      );
    
      foreach ($taxArray as $tax) {
        $labels = array(
          "name" => __( "", "" ),
          "singular_name" => __( $tax['taxName'], "" ),
          "menu_name" => __( $tax['taxName'], "" ),
          "all_items" => __( "所有", "" ),
          "edit_item" => __( "編輯", "" ),
          "view_item" => __( "檢視", "" ),
          "update_item" => __( "更新", "" ),
          "add_new_item" => __( "新增", "" ),
          "new_item_name" => __( "新增", "" ),
          "search_items" => __( "搜尋", "" ),
        );
    
        $args = array(
          "label" => __( $tax['taxName'], "" ),
          "labels" => $labels,
          "public" => true,
          "hierarchical" => true,
          "label" => $tax['taxName'],
          "show_ui" => true,
          "show_in_menu" => true,
          "show_in_nav_menus" => true,
          "show_admin_column" => true,
          "query_var" => true,
          "rewrite" => array( 'slug' => $tax['taxNameEn'], 'with_front' => true, ),
          "show_admin_column" => true,
          "show_in_rest" => false,
          "rest_base" => $tax['taxNameEn'],
          "show_in_quick_edit" => true,
        );
        register_taxonomy( $tax['taxNameEn'], 'post', $args );
      }
      
    }
    add_action( 'init', 'add_post_taxonomy' );
    
  • 示例13

    基本示例

    /**
     * Register a 'genre' taxonomy for post type 'book'.
     *
     * @see register_post_type for registering post types.
     */
    function wpdocs_create_book_tax() {
    	register_taxonomy( 'genre', 'book', array(
    		'label'        => __( 'Genre', 'textdomain' ),
    		'rewrite'      => array( 'slug' => 'genre' ),
    		'hierarchical' => true,
    	) );
    }
    add_action( 'init', 'wpdocs_create_book_tax', 0 );
    

    注意:如果要确保自定义分类法的行为类似于标签,则必须添加选项'update_count_callback' => '_update_post_term_count'。不这样做将导致同时添加的多个逗号分隔的项目保存为单个值,而不是单独的值。当使用get_the_term_list()和其他分类项显示函数时,这可能会导致过度的压力。