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

WooCommerce单产品页显示ACF字段:创建函数时获取post ID遇阻

解决WooCommerce单个产品页面显示ACF额外文本的问题

嘿,我明白你现在卡在哪了——你代码里的wp_get_post_terms()完全用错场景啦!这个函数是用来拉取文章的分类、标签这类术语的,根本不是用来获取产品ID的,这就是为啥你怎么调都没效果的原因😎

第一步:正确获取单个产品页面的产品ID

在WooCommerce的单个产品页面,WordPress已经帮我们准备好了当前产品的上下文,有两种简单靠谱的方式获取ID:

  • 最省心的方式:用get_the_ID()函数,它会自动获取当前页面的帖子(产品)ID,不需要额外处理全局变量
  • 依赖全局变量的方式:先声明global $post;,再用$post->ID拿到ID,但不如前者简洁

第二步:正确调用ACF的get_field()函数

ACF的get_field()第二个参数需要的是整数类型的帖子ID,所以把正确拿到的产品ID传进去就行。这里给你一个完整的可运行代码示例:

// 把自定义文本挂到WooCommerce产品摘要区域的钩子上,优先级25会让它显示在价格、加购按钮之后
add_action('woocommerce_single_product_summary', 'display_custom_product_text', 25);
function display_custom_product_text() {
    // 获取当前产品ID
    $product_id = get_the_ID();
    // 调用ACF字段,第二个参数传入产品ID
    $text = get_field('product_text', $product_id);
    
    // 只有当字段有内容时才输出,避免生成空标签
    if (!empty($text)) {
        echo '<div class="custom-product-text">';
        // 如果你用的是纯文本字段,用esc_html();富文本字段用wp_kses_post()保证安全
        echo wp_kses_post($text);
        echo '</div>';
    }
}

为啥你的原代码不行?

你写的$product_id = wp_get_post_terms($post_id);会返回一个分类/标签对象的数组,而ACF的get_field()需要的是单个整数ID,类型不匹配自然拿不到内容。

把这段代码加到你的主题functions.php文件里,或者用自定义代码插件添加,就能在单个产品页面显示你的额外文本啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:30:04