WP模板阁数千套各行业Wordpress模板随你选,总有一款适合你的网站![收藏本站] 注册 登录

WordPress 自定义分类法taxonomy 的创建与使用方法

        发布:WP模板阁 类型:wordpress教程 浏览:1,984 次

什么是WordPress 自定义分类法?

WordPress 自定义分类法,简单来说就是对具有一定相同特征的项目的分组。

WordPress 默认的文章提供了两种分类法,分别为:

这两种分类法可以帮助你给你的文章进行分类和分组,这样对使用WORDPRESS模板建网站的站长来说可以让网站逻辑更加清晰,而且更加利于 SEO 的优化;对于网站的读者而言,可以帮他们更快的熟悉网站,迅速找到仔细需要的内容。

分类和标签都是自带的分类法,同时,你也可以创建自己的自定义分类法,来满足你的需要。

创建自定义分类法

虽然内置的分类和标签可以帮你分类和组织文章,但是每个网站的需求都不尽相同,有的时候你往往需要更多的分类法,特别是自定义文章类型。

创建自定义分类法的函数

创建一个自定义分类法需要使用 register_taxonomy() 函数,这个函数接收 3 个参数:


register_taxonomy($taxonomy,$object_type,$args);

参数的简单介绍如下:

  1. $taxonomy:分类法的名称。这个名称不应包含中文,因为它不是给用户看的,而是类似于 ID 的作用
  2. $object_type:分类法用于哪些文章类型。WordPress 的文章(post)默认已经有了两个分类法(分类和标签),你可以把这个分类法用于自带的文章类型(post、page、attachment、revision 和 nav_menu_item)和自定义文章类型,有三种填法:
    • 只用于一个文章类型,列如:$object_type = ‘post’
    • 用于多个文章类型,例如:$object_type = array( ‘post’, ‘page’ )
    • 不应用给任何文章类型,例如:$object_type = null
  3. $args:分类法的细节设置,是一个数组,里边所有的参数都是选填的(WordPress 会自动补全缺少的设置),下边介绍所有可用的参数:
    • label:分类法显示给用户的名字,可用使用中文和其它字符
    • labels:显示给用户的名词。这个数组用来设置显示给用户的关键文字,如果不填 WordPress 会自动给你设置好,下边是所有可用参数
      • name:分类法显示给用户的名字,可用使用中文和其它字符(事实上,这个和上边的 label 参数是一样的)
      • singular_name:分类法的别名
      • menu_name:分类法在管理后台菜单处显示的文字
      • all_items:查看全部条款
      • view_item:浏览单个条款
      • update_item:更新条款
      • add_new_item:新建条款
      • parent_item:父级条款
      • parent_item_colon:同上,但结尾要加冒号
      • search_items:搜索条款
      • popular_items:热门条款
      • separate_items_with_commas:多个条款的提示
      • add_or_remove_items:删除和添加条款的提示,只在禁用 JavaScript 的时候显示
      • choose_from_most_used:“从常用的条款中选择” 的文字提示
      • not_found:没有条款的提示
    • public:是否公开,如果公开会生成前台存档页面
    • show_ui:是否在后台的侧边管理菜单显示
    • show_in_nav_menus:是否在菜单页面里添加一个条款
    • show_tagcloud:分类法是否显示标签云的部件
    • meta_box_cb:显示在文章编辑器的分类法选择板块是什么形式
    • show_admin_column:是否显示在后台文章列表的数据列上
    • hierarchical:显示在文章编辑器的分类法选择板块是什么形式。设置成 True 则为分类形式(多选框),False 则为标签形式(文本框和添加按钮)
    • update_count_callback:分类法发生变化时的回调函数
    • query_var:查询存档页面的关键字,默认是分类法名(ID)。最好保持默认
    • rewrite:伪静态规则。设置成 False 将禁用伪静态;还可以设置一些元素,比如 “slug”
    • capabilities:分类法权限设置。最好保持默认
    • sort:查询分类法文章时的排序
    • _builtin:这是内置的分类法还是自定义分类法。最好保持默认或设置成 False。这个参数只有 WordPress 核心才有用

注意,第一个参数 $taxonomy 因为文章查询的关系,有一些保留关键词。

自定义分类法创建实例

上边正如你所看到的,有很多的选项,可以让你调整自定义分类法。

虽然选项那么多,但我还是建议大多数的设置最好保持默认。

下边我将演示如何创建一个自定义分类法。下边我拿一个电影分享网站做演示,创建一个名为电影国家的自定义分类法给默认已经存在的文章文章类型。

创建一个简单的自定义分类法需要使用 register_taxonomy() 函数,在使用的时候需要挂到 init 钩子上,否则可能会出现一些错误。

先将以下的代码粘贴到FUNCTIONS.PHP里;


//创建一个操作函数,用来注册自定义分类法
function Bing_register_custom_taxonomy(){
//自定义分类法名
$name='country';
//自定义分类法的文章类型
$post_type='post';
//设置关键文本
$labels=array(
'name'=>'电影国家',
'singular_name'=>'country',
'search_items'=>'搜索国家',
'popular_items'=>'热门国家',
'all_items'=>'全部国家',
'parent_item'=>'父级国家',
'parent_item_colon'=>'父级国家:',
'edit_item'=>'编辑国家',
'update_item'=>'更新国家',
'add_new_item'=>'新建国家',
'new_item_name'=>'国家名称',
'add_or_remove_items'=>'添加或删除国家',
'choose_from_most_used'=>'从经常使用的国家中选择',
'menu_name'=>'国家'
);
//详细配置自定义分类法
$args=array(
'labels'=>$labels,
'public'=>true,
'show_in_nav_menus'=>true,
'hierarchical'=>true,
'show_ui'=>true,
'query_var'=>true,
'rewrite'=>true,
'show_admin_column'=>true
);
//使用register_taxonomy()函数注册自定义分类法
register_taxonomy($name,$post_type,$args);
}
add_action('init','Bing_register_custom_taxonomy');//必须把操作函数挂载到init钩子上

执行上边的代码,就能看到后台侧边管理菜单的 “文章” 下出现了一个 “国家”,点击这个 “国家” 菜单,就能进入到我们创建的自定义分类法的管理界面了。

分类法的管理界面像 “分类” 还是 “标签” 取决于你的 hierarchical 参数,下边是我们创建的 “电影国家” 分类法。

WordPress 自定义分类法taxonomy

分类法调用模板

WordPress 默认的存档页模板是主题根目录的 archive.php 文件,所以,自定义分类法的存档页面默认也会调用这个文件。可以使用 taxonomy-{$taxonomy}.php 文件({$taxonomy} 为分类法的名称),比如我放的 taxonomy-country.php。

比 archive.php 优先级高的是叫做 taxonomy.php 的文件,如果存在 taxonomy.php 会优先使用,这个 taxonomy.php 只对自定义分类法有用,自带的分类法不会调用 taxonomy.php 文件。

分类法在文章列表的调用

首先将下面的代码放在functions.php 里;


//封装一个获取电影国家的函数
function Bing_the_country($post_ID=false){
//如果不设置 ID 则默认为循环中的当前文章
if($post_ID===false)$post_ID=get_the_ID();
//获取到这个文章有关电影国家分类法的信息
$terms=get_the_terms($post_ID,'country');
//如果文章有添加相关分类法则输出
if(!empty($terms)){
echo '<p> 电影国家:';
//循环输出
foreach($terms as $term){
//获取分类法项目的名字
$name=$term->name;
//获取链接
$link=esc_url(get_term_link($term,'country'));
//输出一个分类法项目
echo "<span ><a href='".$link."'>$name</a></span>";
}
echo'</p>';
}
}

再使用以下的标签来调用自定义分类法的名称。


<?php Bing_the_country();?>