我创建了在帐单后将复选框添加到WooCommerce结帐功能。
出现复选框,前端一切正常。
add_filter( 'woocommerce_after_checkout_billing_form' , 'add_field_sendy_woocommerce_agree', 9);
function add_field_sendy_woocommerce_agree( ) {
woocommerce_form_field( 'sendy_woocommerce_agree', array(
'type' => 'checkbox',
'label' => __('Subscribe to our Newsletter.'),
'required' => false,
'default' => 1
), WC()->checkout->get_value( 'sendy_woocommerce_agree' ));
}
问题在于该复选框未另存为元数据。在wp_postmeta
表中,_sendy_woocommerce_agree
提交后缺少元密钥。
所以我无法使用 $xyz = $order->get_meta( '_sendy_woocommerce_agree' );
我究竟做错了什么?
请尝试以下方式
function add_field_sendy_woocommerce_agree( $checkout ) {
woocommerce_form_field( 'sendy_woocommerce_agree', array(
'type' => 'checkbox',
'label' => __('Subscribe to our Newsletter.'),
'required' => false,
'default' => 1
), $checkout->get_value( 'sendy_woocommerce_agree' ));
}
add_filter( 'woocommerce_after_checkout_billing_form' , 'add_field_sendy_woocommerce_agree', 10, 1 );
// Save
function action_woocommerce_checkout_create_order( $order, $data ) {
if ( isset($_POST['sendy_woocommerce_agree']) && ! empty($_POST['sendy_woocommerce_agree']) ) {
$order->update_meta_data( 'sendy_woocommerce_agree', sanitize_text_field( $_POST['sendy_woocommerce_agree'] ) );
}
}
add_action( 'woocommerce_checkout_create_order', 'action_woocommerce_checkout_create_order', 10, 2 );
// Display the custom field value on admin order pages after billing adress:
function action_woocommerce_admin_order_data_after_billing_address( $order ) {
echo '<p><strong>'.__('Sendy').':</strong> ' . $order->get_meta('sendy_woocommerce_agree') . '</p>';
}
add_action( 'woocommerce_admin_order_data_after_billing_address', 'action_woocommerce_admin_order_data_after_billing_address', 10, 1 );
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句