WordPress开发笔记

WordPress判断分类法taxonomy是否为自定义类型的方法

在 WordPress 中,判断分类法(Taxonomy)是否为自定义类型的方法与判断文章类型类似,可以通过检查分类法对象的 _builtin 属性实现。以下是具体方法:


方法说明

  1. 获取当前分类法名称
    根据上下文(如分类存档页、文章关联的分类等)获取分类法名称。
  2. 获取分类法对象
    使用 get_taxonomy() 函数。
  3. 检查 _builtin 属性
    若为 true 是系统默认分类法(如 categorypost_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()
    根据分类法名称返回其对象,包含 _builtinlabelspublic 等属性。
  • _builtin 属性
    WordPress 内置分类法(如 categorypost_tag)的此属性为 true,自定义分类法则为 false

内置分类法列表

WordPress 默认包含以下内置分类法:

  • category:文章分类
  • post_tag:文章标签
  • nav_menu:导航菜单(特殊用途)
  • link_category:链接分类(旧版功能)

其他均为通过 register_taxonomy() 注册的自定义分类法。


注意事项

  1. 上下文适配
    在非分类页(如单篇文章页)中,需通过 get_the_terms()wp_get_post_terms() 获取文章关联的分类法。
  2. 属性有效性
    始终检查 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;
    }
}

通过这种方法,可以灵活判断任意上下文中的分类法类型。