如何在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
相关产品推荐
相关产品推荐

