本文将告诉你什么是 WordPress 自定义分类法(Taxonomies),并且教会你怎么使用它。
我们首先将讨论自定义分类法是什么,以及有什么用和重要性。
之后将告诉你怎么创建一个自定义分类法,然后怎么把它变得越来越强大。
到最后,你将掌握自定义分类法怎么使用,而且还会把它利用在你的网站、主题或插件上边。
什么是分类法?
分类法,简单来说就是对具有一定相同特征的项目的分组。
WordPress 默认的文章提供了两种分类法,分别为:
这两种分类法可以帮助你给你的文章进行分类和分组,这样对网站主来说可以让网站逻辑更加清晰,而且更加利于 SEO 的优化;对于网站的读者而言,可以帮他们更快的熟悉网站,迅速找到仔细需要的内容。
分类和标签都是自带的分类法,同时,你也可以创建自己的自定义分类法,来满足你的需要。
管理分类和标签
WordPress 自带的分类和标签分类法都位于后台菜单 “文章” 的子级:
进入到分类和标签的管理界面,都类似于下图:
添加分类和标签到文章上
给文章添加一个分类或者标签最简单的方法就是通过文章编辑器。
当你在使用文章编辑器的时候,会发现下边有两个板块叫做 “分类目录” 和 “标签”,用这两个板块就可以给文章设置分类和添加标签。
创建自定义分类法
虽然内置的分类和标签可以帮你分类和组织文章,但是每个网站的需求都不尽相同,有的时候你往往需要更多的分类法,特别是自定义文章类型。
创建自定义分类法的函数
创建一个自定义分类法需要使用 register_taxonomy() 函数,这个函数接收 3 个参数:
1 |
register_taxonomy($taxonomy,$object_type,$args); |
参数的简单介绍如下:
- $taxonomy:分类法的名称。这个名称不应包含中文,因为它不是给用户看的,而是类似于 ID 的作用
- $object_type:分类法用于哪些文章类型。WordPress 的文章(post)默认已经有了两个分类法(分类和标签),你可以把这个分类法用于自带的文章类型(post、page、attachment、revision 和 nav_menu_item)和自定义文章类型,有三种填法:
- 只用于一个文章类型,列如:$object_type = ‘post’
- 用于多个文章类型,例如:$object_type = array( ‘post’, ‘page’ )
- 不应用给任何文章类型,例如:$object_type = null
- $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 因为文章查询的关系,有一些保留关键词,也就是说不能用以下的词来做 $taxonomy,否则会冲突:
- attachment
- attachment_id
- author
- author_name
- calendar
- cat
- category
- category__and
- category__in
- category__not_in
- category_name
- comments_per_page
- comments_popup
- customize_messenger_channel
- customized
- cpage
- day
- debug
- error
- exact
- feed
- 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
- subpost
- subpost_id
- tag
- tag__and
- tag__in
- tag__not_in
- tag_id
- tag_slug__and
- tag_slug__in
- taxonomy
- tb
- term
- theme
- type
- w
- withcomments
- withoutcomments
- year
如果想更详细的了解 register_taxonomy() 函数,可以查看它的官方文档。
创建第一个自定义分类法
上边正如你所看到的,有很多的选项,可以让你调整自定义分类法。
虽然选项那么多,但我还是建议大多数的设置最好保持默认。
下边我将演示如何创建一个自定义分类法。下边我拿一个电影分享网站做演示,创建一个名为电影国家的自定义分类法给默认已经存在的文章文章类型。
创建一个简单的自定义分类法需要使用 register_taxonomy() 函数,在使用的时候需要挂到 init 钩子上,否则可能会出现一些错误。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
//创建一个操作函数,用来注册自定义分类法 functionBing_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 的自定义分类法功能是非常强大的,其中就包括利用它进行扩展,所以,可以用很多方面的东西来定制自定义分类法。
单独的存档页
WordPress 默认的存档页模板是主题根目录的 archive.php 文件,所以,自定义分类法的存档页面默认也会调用这个文件。
比 archive.php 优先级高的是叫做 taxonomy.php 的文件,如果存在 taxonomy.php 会优先使用,这个 taxonomy.php 只对自定义分类法有用,自带的分类法不会调用 taxonomy.php 文件。
如果你想给创建的自定义分类法设置一个单独的存档模板文件的话,可以使用 taxonomy-{$taxonomy}.php 文件({$taxonomy} 为分类法的名称),比如我放的 taxonomy-country.php,在你访问 “电影国家” 分类法的存档页时,就会使用这个文件作为模板。
文章列表显示自定义分类法
正如在文章列表显示文章的分类和标签一样,很多时候会需要在文章列表显示自定义分类法,下边我用上边创建的 “电影国家” 自定义分类法来演示一下。
首先打开你的 functions.php(了解更多),然后在里边添加下边的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
//封装一个获取电影国家的函数 functionBing_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($termsas$term){ //获取分类法项目的名字 $name=$term->name; //获取链接 $link=esc_url(get_term_link($term,‘country’)); //输出一个分类法项目 echo“<span ><a href=’$link’>$name</a></span>”; } echo‘</p>’; } } |
然后在文章循环里调用上边的函数:
1 |
<?phpBing_the_country();?> |
这样,在前台的文章列表处,就能显示当前介绍的电影来自哪个国家了(请自动忽略截图不重要的地方):
上边的代码我使用了 get_the_terms() 函数来调用某篇文章里关于 “电影国家” 分类法的信息,然后把他循环输出出来。
在循环的过程中,我还使用了 get_term_link() 函数来调用分类法的存档页链接。
其它
关于自定义分类法的用法和函数还有很多,这里无法一一介绍完,还需要你自己去研究。如果可能,你最好去阅读 wp-includes/category-template.php 和 wp-includes/taxonomy.php 这两个文件的代码,这样你对分类法的用法和原理都会有 一些了解。
总结
利用自定义分类法可以轻松的归纳网站文章,还能扩展自定义文章类型的功能。
本文只是简单的介绍了自定义分类法的用途和用法,更多的可以查看本站的自定义分类法标签:https://www.weixiaoduo.com/tag/taxonomy