ACF get_field在Woocommerce分类遍历函数中无法返回值排查
问题原因及解决方案
1. ACF分类字段调用参数错误
ACF获取自定义分类字段时,第二个参数不能只传term_id,需要传入术语的完整标识字符串(格式为{taxonomy}_{term_id}),或者直接传入WP_Term对象。你当前代码里仅传递$term->term_id,ACF无法正确匹配到对应分类的字段,导致返回空值。
修复方式二选一:
方式一:传入术语标识字符串
将$cat_icon = get_field( 'cat_icon', $term->term_id );修改为:
$cat_icon = get_field( 'cat_icon', "{$taxonomy}_{$term->term_id}" );
利用已定义的$taxonomy变量,生成product_cat_XXX格式的标识,让ACF能精准定位分类字段。
方式二:直接传入WP_Term对象
循环中的$term本身就是WP_Term实例,直接传递该对象即可:
$cat_icon = get_field( 'cat_icon', $term );
2. 额外排查要点
- 确认ACF字段
cat_icon的位置规则已绑定到「产品分类(product_cat)」上,避免字段关联错误。 - 检查目标子分类的后台编辑页,确认
cat_icon字段已上传并保存了图标内容。 - 可临时添加调试代码(如
var_dump(get_field('cat_icon', $term));),直接输出字段返回值,辅助定位问题。
修复后的完整代码示例
function pab_display_subcategories() { if ( is_product_category() ) { $term_id = get_queried_object_id(); $taxonomy = 'product_cat'; // 获取当前分类的子分类 $terms = get_terms([ 'taxonomy' => $taxonomy, 'hide_empty' => false, 'parent' => get_queried_object_id() ]); $output = ' <div class="bde-wooproductslist breakdance-woocommerce"> <div class="woocommerce"> <ul class="products">'; // 遍历子分类WP_Term对象 foreach ( $terms as $term ) { $term_link = get_term_link( $term, $taxonomy ); $output .= '<li class="product-category product pab-cat-list"><a href="'. $term_link .'">'; // 修正ACF字段调用参数 $cat_icon = get_field( 'cat_icon', $term ); if ( $cat_icon ) : $output .= '<div class=""><img src="'. esc_url( $cat_icon['url'] ). '" alt="'. esc_attr( $cat_icon['alt'] ) .'" class="pab-wc-category-icon"></div>'; endif; $output .= '<div class="pab-cat-list-text">'. $term->name .' '. $term->term_id .'<i class="fa-solid fa-chevron-right"></i></div> </a></li>'; } echo $output . ' </ul> </div> </div>'; } } add_shortcode( 'pab_display_subcategories_content','pab_display_subcategories' );
内容的提问来源于stack exchange,提问作者perqedelius
相关产品推荐
相关产品推荐

