WordPress 自定义分类法,简单来说就是对具有一定相同特征的项目的分组。
WordPress 默认的文章提供了两种分类法,分别为:
这两种分类法可以帮助你给你的文章进行分类和分组,这样对使用WORDPRESS模板建网站的站长来说可以让网站逻辑更加清晰,而且更加利于 SEO 的优化;对于网站的读者而言,可以帮他们更快的熟悉网站,迅速找到仔细需要的内容。
分类和标签都是自带的分类法,同时,你也可以创建自己的自定义分类法,来满足你的需要。
虽然内置的分类和标签可以帮你分类和组织文章,但是每个网站的需求都不尽相同,有的时候你往往需要更多的分类法,特别是自定义文章类型。
创建一个自定义分类法需要使用 register_taxonomy() 函数,这个函数接收 3 个参数:
register_taxonomy($taxonomy,$object_type,$args);
参数的简单介绍如下:
注意,第一个参数 $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 默认的存档页模板是主题根目录的 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();?>