如何修改代码在WooCommerce短描述区显示ACF自定义字段组?
解决WooCommerce单商品页显示ACF字段组所有字段(带标签)的问题
原代码不生效的原因
你的原代码用get_post_meta()其实也能获取ACF字段值,但可能存在以下问题:
- 钩子位置
woocommerce_before_add_to_cart_form是加购表单前的位置,不符合你要在短描述之后显示的需求 - 未处理ACF字段的格式化逻辑,部分字段(如选择框、图片)直接用
get_post_meta()拿到的是原始值而非格式化后的数据 - 可能字段名拼写错误,或者当前商品不属于字段组指定的分类,导致没有值输出
实现步骤与代码
要显示特定ACF字段组的所有字段(带标签),并放在短描述之后,按以下操作:
1. 获取你的ACF字段组键
打开ACF的字段组编辑页面,点击右上角「屏幕选项」,勾选「字段组键」,即可看到类似group_64abc123def456的唯一键值,记下来。
2. 添加代码到子主题functions.php
将以下代码添加到子主题的functions.php中,替换YOUR_FIELD_GROUP_KEY为你刚才拿到的字段组键:
function display_acf_field_group_on_product() { // 仅在WooCommerce单商品页执行 if ( ! is_product() ) return; global $product; $product_id = $product->get_id(); // 替换为你的ACF字段组键 $field_group_key = 'YOUR_FIELD_GROUP_KEY'; // 获取字段组内的所有字段 $fields = acf_get_fields( $field_group_key ); if ( empty( $fields ) ) return; // 输出字段容器 echo '<div class="product-acf-fields">'; echo '<h3>商品详情</h3>'; // 可自定义标题 foreach ( $fields as $field ) { // 获取字段的标签和格式化后的值 $field_object = get_field_object( $field['key'], $product_id ); if ( empty( $field_object['value'] ) ) continue; // 跳过空值字段 // 输出字段标签和值 echo '<div class="acf-field-item">'; echo '<span class="acf-field-label">' . esc_html( $field_object['label'] ) . ':</span>'; echo '<span class="acf-field-value">' . wp_kses_post( $field_object['value'] ) . '</span>'; echo '</div>'; } echo '</div>'; } // 钩子优先级20,确保在短描述(优先级10)之后显示 add_action( 'woocommerce_single_product_summary', 'display_acf_field_group_on_product', 20 );
3. 自定义样式(可选)
可以在子主题的style.css中添加样式,让字段显示更美观:
.product-acf-fields { margin: 20px 0; padding: 15px; border-top: 1px solid #eee; } .product-acf-fields h3 { margin-top: 0; font-size: 1.2em; } .acf-field-item { margin: 8px 0; line-height: 1.5; } .acf-field-label { font-weight: 600; margin-right: 8px; }
关键说明
- 用
acf_get_fields()获取指定字段组的所有字段,无需逐个写字段名 get_field_object()同时获取字段的标签和格式化后的值,完美解决你要显示标签的需求- 钩子
woocommerce_single_product_summary的优先级设为20,刚好在短描述(优先级10)之后、加购按钮(优先级30)之前显示 - 代码里做了判断:仅在单商品页执行、跳过空值字段,避免无效输出
关于ACF短代码在商品页不生效的问题
ACF短代码[acf field="field_name"]在WooCommerce商品页是可以生效的,如果你之前用了没显示,可能是:
- 字段名拼写错误
- 当前商品不在字段组的显示条件范围内
- 主题或插件有过滤短代码的逻辑,可尝试切换默认主题测试
内容的提问来源于stack exchange,提问作者Webwp
相关产品推荐
相关产品推荐

