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

如何修改代码在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 17:43:24