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

