You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WordPress中实现自定义分类列表以&为最后分隔符

解决WordPress自定义分类列表的正确格式输出问题

首先,你原代码的核心问题是wp_sprintf_l()需要传入字符串数组,但get_the_terms()返回的是WP_Term对象数组,直接传入会导致无输出;另外变量名$post可能和全局$post变量冲突,建议改用$post_id避免问题。

下面是适配1/2/3个分类场景的正确实现代码,会自动处理分隔符逻辑:

<?php
// 获取当前文章ID,避免全局变量冲突
$post_id = get_the_ID();
// 获取自定义分类"project-category"的术语对象数组
$terms = get_the_terms( $post_id, 'project-category' );

// 处理无分类或获取失败的情况
if ( ! $terms || is_wp_error( $terms ) ) {
    echo '';
    return;
}

// 提取术语名称到字符串数组
$term_names = wp_list_pluck( $terms, 'name' );
$term_count = count( $term_names );

// 根据分类数量输出对应格式
if ( $term_count === 1 ) {
    // 单分类直接输出名称
    echo esc_html( $term_names[0] );
} elseif ( $term_count === 2 ) {
    // 两个分类用"and"连接
    echo esc_html( implode( ' and ', $term_names ) );
} else {
    // 三个及以上分类:前n-1个用逗号分隔,最后一个用"and"连接
    $last_term = array_pop( $term_names );
    echo esc_html( implode( ', ', $term_names ) ) . ' and ' . esc_html( $last_term );
}
?>

代码说明:

  • 使用get_the_ID()获取当前文章ID,比get_queried_object_id()更稳妥(后者在非单文章页面可能返回其他对象ID)。
  • wp_list_pluck()快速从术语对象数组中提取名称,得到纯字符串数组。
  • 分情况处理不同数量的分类,彻底避免单分类时出现多余的"and"。
  • 用esc_html()转义输出内容,避免XSS安全问题。

内容的提问来源于stack exchange,提问作者Scott Goodacre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 14:41:12