在 WordPress 中,判断分类法(Taxonomy)是否为自定义类型的方法与判断文章类型类似,可以通过检查分类法对象的 _builtin 属性实现。以下是具体方法:
方法说明
- 获取当前分类法名称
根据上下文(如分类存档页、文章关联的分类等)获取分类法名称。 - 获取分类法对象
使用get_taxonomy()函数。 - 检查
_builtin属性
若为true是系统默认分类法(如category、post_tag),否则为自定义。
示例代码
场景1:在分类存档页(如 taxonomy.php)中判断
<?php
// 获取当前分类法名称(适用于分类存档页)
$queried_object = get_queried_object();
$zzw_taxonomy = $queried_object->taxonomy ?? '';
// 获取分类法对象
/** @var WP_Taxonomy|null $zzw_taxonomy_obj */
$zzw_taxonomy_obj = get_taxonomy($zzw_taxonomy);
if ($zzw_taxonomy_obj) {
if ($zzw_taxonomy_obj->_builtin) { // 修正箭头操作符
echo '当前分类法是系统默认:' . esc_html($zzw_taxonomy);
} else {
echo '当前分类法是自定义:' . esc_html($zzw_taxonomy);
}
} else {
echo '无效的分类法。';
}
?>
场景2:直接检查某个特定分类法
// 直接指定分类法名称(如检查 `category` 或自定义分类法)
$zzw_taxonomy_name = 'your_taxonomy_slug'; // 替换为实际分类法名称
$zzw_taxonomy_obj = get_taxonomy($zzw_taxonomy_name);
if ($zzw_taxonomy_obj) {
if ($zzw_taxonomy_obj->_builtin) {
echo '分类法 ' . $zzw_taxonomy_name . ' 是系统默认。';
} else {
echo '分类法 ' . $zzw_taxonomy_name . ' 是自定义。';
}
} else {
echo '分类法不存在。';
}
代码解释
get_queried_object()
在分类存档页中,获取当前分类或标签的WP_Term对象,通过taxonomy属性提取分类法名称。get_taxonomy()
根据分类法名称返回其对象,包含_builtin、labels、public等属性。_builtin属性
WordPress 内置分类法(如category、post_tag)的此属性为true,自定义分类法则为false。
内置分类法列表
WordPress 默认包含以下内置分类法:
category:文章分类post_tag:文章标签nav_menu:导航菜单(特殊用途)link_category:链接分类(旧版功能)
其他均为通过 register_taxonomy() 注册的自定义分类法。
注意事项
- 上下文适配
在非分类页(如单篇文章页)中,需通过get_the_terms()或wp_get_post_terms()获取文章关联的分类法。 - 属性有效性
始终检查get_taxonomy()返回的对象是否存在,避免因无效名称导致错误。
扩展用法
在单篇文章页中判断关联分类法
// 获取当前文章 ID
$zzw_post_id = get_the_ID();
// 获取文章关联的某个分类法(例如检查第一个分类法)
$zzw_terms = get_the_terms($zzw_post_id, 'your_taxonomy_slug');
if ($zzw_terms && !is_wp_error($zzw_terms)) {
$zzw_taxonomy_name = $zzw_terms[0]->taxonomy;
$zzw_taxonomy_obj = get_taxonomy($zzw_taxonomy_name);
if ($zzw_taxonomy_obj && !$zzw_taxonomy_obj->_builtin) {
echo '关联的分类法是自定义类型:' . $zzw_taxonomy_name;
}
}
通过这种方法,可以灵活判断任意上下文中的分类法类型。

