WooCommerce结账自定义复选框未勾选时无返回值的解决求助
解决WooCommerce自定义复选框未勾选时无返回值的问题
问题核心在于复选框未勾选时,$_POST数组里不会包含pricematch_policy这个键,导致原代码中的if条件不触发,也就不会写入"No"的元数据。
只需修改更新订单元数据的函数,移除isset和!empty的限制,直接根据字段是否存在赋值:
// PRICE MATCH - Update the order meta with field value add_action( 'woocommerce_checkout_create_order', 'sab_pricematch_checkout_field_update_order_meta', 10, 2 ); function sab_pricematch_checkout_field_update_order_meta( $order, $data ) { // 判断复选框是否勾选,未勾选则赋值"No" $opt_in = isset($_POST['pricematch_policy']) && $_POST['pricematch_policy'] == 1 ? 'Yes' : 'No'; $order->update_meta_data( 'pricematch_policy', sanitize_text_field( $opt_in ) ); }
另外,为了兼容没有该元数据的旧订单,建议在显示函数中添加默认值判断,避免显示空白:
// PRICE MATCH - Display optin on the order edit page/my account pages add_action( 'woocommerce_admin_order_data_after_billing_address', 'sab_display_pricematch', 10, 1 ); add_action( 'woocommerce_order_details_after_customer_details', 'sab_display_pricematch', 10, 1 ); function sab_display_pricematch( $order ) { $opt_in_value = $order->get_meta('pricematch_policy'); // 元数据不存在时默认显示"No" $opt_in_value = empty($opt_in_value) ? 'No' : $opt_in_value; echo '<p><strong>'.__('Price Match Guarantee Opt-In').':</strong> ' . $opt_in_value . '</p>'; }
补充说明
复选框的原生特性是:只有被勾选时才会向服务器提交字段名和对应值;未勾选时,该字段不会出现在$_POST数组中。移除原代码的条件限制后,无论复选框状态如何,都会执行元数据写入操作,确保未勾选时也能写入"No"。
内容的提问来源于stack exchange,提问作者DSmit
相关产品推荐
相关产品推荐

