前言
在开发WordPress主题或插件时,经常需要获取当前文章所属的自定义分类法(Custom Taxonomy)的名称。例如,在开发一个网址导航网站时,你可能需要在详情页显示当前网址所属的分类。本文将介绍一种标准且健壮的方法来实现这一功能。
获取当前文章自定义分类法名称的方法
以下是一个经过优化和修正的PHP函数,它可以安全地获取并输出当前文章所属的第一个自定义分类法的名称。
function get_current_post_taxonomy_name() {
// 获取当前文章对象
global $post;
if ( ! isset( $post ) || ! is_single() ) {
return '';
}
// 获取当前文章的文章类型
$post_type = $post->post_type;
// 获取与该文章类型关联的所有分类法对象
$taxonomies = get_object_taxonomies( $post_type, 'objects' );
// 遍历分类法,找到第一个非内置的“category”和“post_tag”的分类法
foreach ( $taxonomies as $taxonomy_slug => $taxonomy ) {
// 通常我们想排除默认的“文章”分类和标签
if ( in_array( $taxonomy_slug, array( 'category', 'post_tag' ) ) ) {
continue;
}
// 获取当前文章在此分类法下的所有关联项
$terms = wp_get_post_terms( $post->ID, $taxonomy_slug, array( 'fields' => 'all' ) );
// 如果存在关联项,则返回第一个项的名称
if ( ! is_wp_error( $terms ) && ! empty( $terms ) ) {
return $terms[0]->name;
}
}
// 如果没有找到自定义分类法项,可以返回空或默认值
return '';
}
// 在模板中使用示例:
// $tax_name = get_current_post_taxonomy_name();
// if ( ! empty( $tax_name ) ) {
// echo esc_html( $tax_name );
// }
代码说明与优化点
与原始代码相比,此版本进行了以下重要改进:
- 安全性检查:添加了全局
$post对象检查和is_single()判断,确保只在文章单页执行。 - 排除默认分类法:通过条件判断跳过了默认的“分类目录”(category)和“标签”(post_tag),专注于自定义分类法。
- 错误处理:使用
is_wp_error()检查wp_get_post_terms的返回结果,避免因分类法不存在而导致错误。 - 清晰的函数名:函数名
get_current_post_taxonomy_name更清晰地表明了其用途。 - 输出转义:在示例用法中使用了
esc_html()进行输出转义,这是WordPress开发的安全最佳实践。
使用场景与扩展
此函数适用于多种场景:
- 网址导航站:显示当前网址所属的目录分类。
- 产品展示站:显示产品的系列或品牌(自定义分类法)。
- 新闻/博客站:在文章元数据中显示自定义的文章系列或专题。
你可以根据需要修改函数,例如返回所有分类法名称的数组,或返回带有链接的分类法项。
注意:如果你的文章同时属于多个自定义分类法,上述函数只返回第一个找到的项的名称。若需处理多个分类法,请修改循环逻辑,将结果存入数组后返回。