register_taxonomy 专题研究

本文主要讲述以下内容:

  • 提供了一个完整的注册自定义分类法的代码示例
  • 只需要修改最前面的分类名称和分类别名,即可快速注册一个不同的自定义分类法
  • 对分类法注册过程中的每一个参数进行非常简短的解释说明
  • 如果需要细节优化,也可以快速根据注解进行调整。
  • 在调整无误,正式使用的时候,可以删除注解
  • 如果要了解其中自定义分类文字的显示位置和效果,请移步:register_taxonomy 注册自定义分类法名称对应位置

将此代码放在您使用的主题functions.php中(操作方法请移步本站:functions 添加自定义代码方法

<?php 




//特意在前面和后面加入许多空行,方便复制。
/*定义分类名称“产品类型”*/
define('Custom_User_Category_Name', '产品类型');
/*定义分类别名“cat_department”*/
define('Custom_User_Category_Slug', 'cat_pt');
add_action('init', 'Custom_category_taxonomy');
function Custom_category_taxonomy(){        
    register_taxonomy(
    
    
        Custom_User_Category_Name,     // 分类名称
        array('post','page') ,         // 将该分类添加到帖子、页面
        array(                         // 分类详细信息    
        
        
            'description'                 => '这是一个自定义分类法', // 简短摘要。
            'public'                     => true, // 布尔值,是否公开使用该分类
            'publicly_queryable'         => true, // 布尔值,是否可公开查询。如果未设置,则默认值继承自$public
            'hierarchical'                 => true, // 布尔值,是否分层,false=标签,true=分类目录
            'show_ui'                     => true, // 布尔值,是否生成管理UI。默认值继承自$public
            'show_in_menu'                 => true, // 布尔值,是否管理菜单中显示分类法。
            'show_in_nav_menus'         => true, // 布尔值,是否在导航菜单可选择,默认值继承自$public
            'show_in_rest'                 => true, // 布尔值,是否在RESTAPI中包括分类法。true=块编辑器中可用
            'rest_base'                 => Custom_User_Category_Slug, // 字符串,更改RESTAPI路由的基本URL。默认值为$taxonomy。
            'rest_controller_class'     => 'WP_REST_Terms_Controller', // 字符串,RESTAPI控制器类名称。默认值为“WP_REST_Terms_Controller”。
            'show_tagcloud'             => true, // 布尔值,是否在“标签云”小部件控件中列出分类法。默认值继承自$show_ui。
            'show_in_quick_edit'         => true, // 布尔值,是否在快速/批量编辑面板中显示分类法。默认值继承自$show_ui。
            'show_admin_column'         => true, // 布尔值,是否在帖子列表屏幕显示分类法列。默认为false。该参数对用户列表无效。
            'meta_box_cb'                 => true, // 布尔值,可调用。为元框显示提供回调函数。即是否显示元框。
            'meta_box_sanitize_cb'         => true, // 回调函数,用于清理从元框保存的分类数据。
            'query_var'                 => true, // string|bool,设置此分类法的查询var键。默认$taxonomy密钥。
            
            
            
            
            'rewrite'                 => array(
                'slug'                 => Custom_User_Category_Slug,  // 自定义永久结构的分类别名。默认使用$taxonomy的分类别名。
                'with_front'         => false,                       // 布尔值,是否应该在永久结构之前加上WP_Rewrite::$front。默认为true。
                'hierarchical'         => true,                      // 布尔值,是否分层重写标记。默认为false。            
            ),            
            
            
            'labels'                         => array(
                'name'                             => __(Custom_User_Category_Name, '添加分类页面最左上角的大标题') ,
                'singular_name'                 => __(Custom_User_Category_Name, '文本域') ,
                'menu_name'                     => __(Custom_User_Category_Name, '文本域') ,
                'search_items'                     => __('搜索'.Custom_User_Category_Name, '分类列表右上角的搜索按钮') ,
                'popular_items'                 => __('热门'.Custom_User_Category_Name, '文本域') ,
                'all_items'                     => __('所有'.Custom_User_Category_Name, '文本域') ,
                'parent_item'                     => __('上级'.Custom_User_Category_Name, '当hierarchical=true时上级分类的名称') ,
                'parent_item_colon'             => __('上级'.Custom_User_Category_Name .':', '当hierarchical=true时上级分类的名称:') ,
                'edit_item'                     => __('编辑'.Custom_User_Category_Name, '编辑分类时最左上角的大标题') ,
                'update_item'                     => __('更新'.Custom_User_Category_Name, '文本域') ,
                'add_new_item'                     => __('添加新'.Custom_User_Category_Name, '添加分类页面最左上角的分类名称上面和左下角的添加分类按钮') ,
                'new_item_name'                 => __('新'.Custom_User_Category_Name, '文本域,新增\编辑帖子位置新增分类时') ,
                'separate_items_with_commas'     => __('用逗号分隔'.Custom_User_Category_Name, '文本域') ,
                'add_or_remove_items'             => __('添加或移除'.Custom_User_Category_Name, '文本域') ,
                'choose_from_most_used'         => __('从最常用的'.Custom_User_Category_Name .'中选择', '文本域') ,
                'not_found'                     => __('没有找到该'.Custom_User_Category_Name, '搜索结果为空时提示语言') ,
                'menu_name'                     => __(Custom_User_Category_Name, '后台管理菜单,最高优先级。'),        
            ),                
                'update_count_callback' => '_update_generic_term_count', 
// 如果要分类法像标签一样,必须添加该选项'update_count_callback' => 'update_post_term_count'不再为true。只需将分类法声明为非分层,就可以像标记一样工作。
// 当将自定义分类法用于帖子以外的其他内容时,它应使用值'_update_generic_term_count'
// 关于update_count_callback参数,它与管理员中某个位置显示的计数有关。您可以使用此回调自己计算此数字。
        )
    );
}




?>

上面这段代码,可以成功注册一个自定义分类。并且这个自定义分类可同时在帖子和页面两个位置使用。

其中几个细节,还是需要说一下,此代码可以在帖子(post),页面(post)中快速注册自定义的分类法(或者自定义标签,取决于其中参数的设置)。

将自定义分类法或者自定义标签注册到自定义帖子或页面

如果要注册自定义分类或自定义标签给某一个或某几个自定义帖子,页面,只需要修改其中下面这行即可。

// 将该分类添加到帖子、页面,修改或增加其中的值,即可将自定义分类法注册到别的自定义帖子或页面。或用户、媒体等。
array('post','page') , 
// 例如要将该分类法注册到post、page、myp01(自定义帖子帖子的slug),那么写法就是:
array('post','page','myp01') ,


注册自定义标签和自定义分类的区别在哪里

wordpress注册自定义标签和自定义分类的区别在于,自定义分类可以拥有上下级关系。而自定义标签没有上下级关系。在进行注册时,只需要修改以下参数即可。

'hierarchical'                 => true, // 布尔值,是否分层,false=标签,true=分类目录
//注册自定义分类时,'hierarchical'                 => true, 
//注册自定义标签时,'hierarchical'                 => false, 

另外还有一个回写机制,就是自定义分类结构特征相关的。也需要一同修改。代码如下:

 

           'rewrite'                 => array(
                'with_front'         => false,                       // 布尔值,是否应该在永久结构之前加上WP_Rewrite::$front。默认为true。
                'hierarchical'         => true,                      // 布尔值,是否分层重写标记。默认为false。            
            ),        
//注意,这里的其他参数没有列出来,不代表不重要。也不代表不需要。
//这里的两个参数,建议根据实际需要进行设置。
//如果注册的是自定义分类,建议设置'hierarchical'         => true, 
//如果注册的是自定义标签,建议设置'hierarchical'         => false, 

注册自定义用户分组

上面的代码如果修改注册对象,可以成功将自定义分类注册到用户中。但毕竟wordpress 的自定义分类并不是专业为用户设置的。因此有以下几个功能缺陷。

  • 1.即使注册成功了这个分类法,用户菜单下也找不到你注册成功的这个自定义分类法。需要用其他代码添加自定义分类菜单到用户菜单下。有一个变通的方法,就是可以将该自定义分类法同步注册给用户(user)和帖子(post),此时,注册的自定义用户分类,会完整在帖子(post)位置出现所有完成功能。包括菜单,列表位置显示,文章添加时的调用。
  • 2.编辑用户时,无法选择注册的自定义分类。需要手动添加其他代码实现编辑用户时,选择分类法。
  • 3.注册好的自定义分类,并不会出现在用户列表的栏位中。
  • 4.注册好的自定义分类,在用户统计中存在问题。
array('post','user') ,         // 将该分类同时注册到帖子(post),用户(user)
//可以注册到帖子后,方便观察和设置。

以上这些,都是客观存在的问题,当然也难不倒主观能动性强的工程师们。后续有机会再进行解说。

1人评论了“register_taxonomy 专题研究”

  1. Pingback: register_taxonomy 注册自定义分类法名称对应位置 – 迷路轮回

评论区已关闭

Scroll to Top