如何保存WooCommerce购物车页面自定义礼品复选框的值?
WooCommerce购物车礼品复选框值保存及后台展示方案
你已经完成了购物车页面复选框的显示,接下来需要通过以下步骤实现值的保存和后台展示:
1. 保存复选框值到WooCommerce会话
购物车到结账页面的切换需要会话传递值,添加以下代码:
// 保存礼品复选框值到WooCommerce会话 add_action('woocommerce_cart_updated', 'save_gift_checkbox_value_to_session'); function save_gift_checkbox_value_to_session() { if (isset($_POST['is_gift'])) { WC()->session->set('is_gift', 'yes'); } else { WC()->session->set('is_gift', 'no'); } } // 结账页面加载时,从会话中恢复复选框值 add_filter('woocommerce_checkout_get_value', 'restore_gift_checkbox_value_from_session', 10, 2); function restore_gift_checkbox_value_from_session($value, $input) { if ($input === 'is_gift') { return WC()->session->get('is_gift') === 'yes' ? 'yes' : ''; } return $value; }
2. 将值永久保存到订单元数据
订单创建时,把会话中的值写入订单元数据:
// 将礼品复选框值保存到订单元数据 add_action('woocommerce_checkout_create_order', 'save_gift_checkbox_to_order_meta'); function save_gift_checkbox_to_order_meta($order) { $is_gift = WC()->session->get('is_gift'); if ($is_gift) { $order->update_meta_data('_is_gift', $is_gift); // 可选:清除会话中的值 WC()->session->__unset('is_gift'); } }
3. 在后台订单管理界面展示值
添加代码在后台订单详情页和订单列表显示礼品状态:
// 在后台订单详情页面显示礼品复选框的值 add_action('woocommerce_admin_order_data_after_billing_address', 'display_gift_checkbox_in_admin_order'); function display_gift_checkbox_in_admin_order($order) { $is_gift = $order->get_meta('_is_gift'); echo '<div class="address"> <p><strong>' . __('Is this a gift order?', 'your-theme-textdomain') . '</strong><br> ' . ($is_gift === 'yes' ? __('Yes', 'your-theme-textdomain') : __('No', 'your-theme-textdomain')) . '</p> </div>'; } // 可选:在订单列表添加列显示礼品状态 add_filter('manage_edit-shop_order_columns', 'add_gift_order_column'); function add_gift_order_column($columns) { $columns['is_gift'] = __('Gift Order', 'your-theme-textdomain'); return $columns; } add_action('manage_shop_order_posts_custom_column', 'display_gift_order_column_value'); function display_gift_order_column_value($column) { global $post; if ($column === 'is_gift') { $order = wc_get_order($post->ID); $is_gift = $order->get_meta('_is_gift'); echo $is_gift === 'yes' ? __('Yes', 'your-theme-textdomain') : __('No', 'your-theme-textdomain'); } }
整合代码
将以上所有代码(包括你原来的复选框显示代码)添加到主题的functions.php文件,或者自定义的PHP插件文件中即可生效。
内容的提问来源于stack exchange,提问作者Bijay Sharma
相关产品推荐
相关产品推荐

