如何用WooCommerce Product Add-ons捕获必填字段数据并在感谢页展示
WooCommerce感谢页展示Product Add-ons自定义字段数据方案
核心逻辑
WooCommerce Product Add-ons插件的自定义字段数据会以序列化数组形式存储在订单项的元数据中,键名为_wc_product_addons,我们只需要解析这个元数据,提取目标字段内容即可。
方法一:修改感谢页模板(适合需要自定义布局的场景)
- 复制主题目录下的
woocommerce/checkout/thankyou.php文件到子主题的对应目录(your-child-theme/woocommerce/checkout/),避免主题更新覆盖修改。 - 在模板中合适的位置(比如订单商品列表之后)插入以下代码:
<?php $order = wc_get_order( $order_id ); if ( $order ) { foreach ( $order->get_items() as $item_id => $item ) { // 获取Add-ons元数据 $addons = $item->get_meta( '_wc_product_addons' ); if ( ! empty( $addons ) ) { echo '<h3>' . esc_html( $item->get_name() ) . ' 的特殊备注</h3>'; echo '<ul class="product-addons-list">'; foreach ( $addons as $addon ) { // 匹配目标字段名"Special Note" if ( $addon['name'] === 'Special Note' ) { echo '<li><strong>' . esc_html( $addon['name'] ) . ':</strong> ' . esc_html( $addon['value'] ) . '</li>'; } // 若要显示所有Add-ons字段,删除上面的if判断即可 } echo '</ul>'; } } } ?>
方法二:使用WooCommerce钩子(无需修改模板,更灵活)
在子主题的functions.php文件中添加以下代码,通过woocommerce_thankyou钩子将内容输出到感谢页:
add_action( 'woocommerce_thankyou', 'render_product_addons_on_thankyou', 10, 1 ); function render_product_addons_on_thankyou( $order_id ) { $order = wc_get_order( $order_id ); if ( ! $order ) return; echo '<div class="custom-addons-section">'; echo '<h2>您的自定义备注信息</h2>'; foreach ( $order->get_items() as $item ) { $addons = $item->get_meta( '_wc_product_addons' ); if ( empty( $addons ) ) continue; echo '<h3>' . esc_html( $item->get_name() ) . '</h3>'; echo '<ul>'; foreach ( $addons as $addon ) { if ( $addon['name'] === 'Special Note' ) { // 若允许用户输入HTML,用wp_kses_post替代esc_html echo '<li><strong>' . esc_html( $addon['name'] ) . ':</strong> ' . esc_html( $addon['value'] ) . '</li>'; } } echo '</ul>'; } echo '</div>'; }
注意事项
- 若有多个不同名称的Add-ons字段,可修改
if ( $addon['name'] === 'Special Note' )的条件,或直接删除该条件以显示所有字段。 - 建议使用子主题修改代码,避免主题更新导致代码丢失。
- 可通过自定义CSS美化显示样式,例如给
.custom-addons-section或.product-addons-list添加样式规则。
内容的提问来源于stack exchange,提问作者Pièpiè22
相关产品推荐
相关产品推荐

