如何为WooCommerce订单添加客户自定义资料字段greentree_id并后台展示
WooCommerce 实现客户
greentree_id字段在后台订单页展示的正确方案 原有代码的问题
- 变量未定义:调用
update_post_meta()时传入的$greentree是未声明的变量,应该使用已经读取到的用户元值$user_meta_value - 钩子覆盖不全:仅用
woocommerce_thankyou钩子只能覆盖用户前端下单走到感谢页的场景,后台手动创建订单、第三方支付回调未跳转感谢页的场景都无法触发字段保存 - 操作方法不兼容:WooCommerce 3.0+版本推荐使用内置CRUD方法操作订单元数据,使用
update_post_meta可能存在高版本兼容性问题 - 缺少展示逻辑:原有代码仅做了字段保存,没有编写后台订单页的字段输出逻辑,自然看不到对应内容
完整实现代码
将以下代码添加到主题functions.php文件,替换掉你之前添加的旧代码即可:
// 前端下单时同步用户greentree_id到订单元数据 add_action( 'woocommerce_checkout_create_order', 'sync_greentree_id_to_order', 10, 2 ); function sync_greentree_id_to_order( $order, $data ) { $user_id = $order->get_user_id(); if ( $user_id ) { $greentree_id = get_user_meta( $user_id, 'greentree_id', true ); if ( ! empty( $greentree_id ) ) { $order->update_meta_data( 'greentree_id', $greentree_id ); } } } // 兼容后台手动创建订单的同步场景 add_action( 'woocommerce_process_shop_order_meta', 'sync_greentree_id_admin_order', 10, 2 ); function sync_greentree_id_admin_order( $order_id, $post ) { $order = wc_get_order( $order_id ); $user_id = $order->get_user_id(); if ( $user_id ) { $greentree_id = get_user_meta( $user_id, 'greentree_id', true ); if ( ! empty( $greentree_id ) ) { $order->update_meta_data( 'greentree_id', $greentree_id ); $order->save(); } } } // 后台订单详情页输出greentree_id字段 add_action( 'woocommerce_admin_order_data_after_billing_address', 'display_greentree_id_in_admin_order', 10, 1 ); function display_greentree_id_in_admin_order( $order ) { $greentree_id = $order->get_meta( 'greentree_id', true ); if ( ! empty( $greentree_id ) ) { echo '<p><strong>Greentree ID:</strong>' . esc_html( $greentree_id ) . '</p>'; } }
生效说明
代码添加后新生成的订单会自动同步用户的greentree_id并在订单详情页的账单地址下方展示。如果需要历史订单也显示该字段,打开对应历史订单点击更新按钮即可触发同步。
内容的提问来源于stack exchange,提问作者Jordan h
相关产品推荐
相关产品推荐

