使用其他表单数据更新Woo商务结帐页面

时间:2018-04-19 11:18:09

标签: php wordpress woocommerce checkout custom-fields

我正在为我的Woo商业结帐页面收集额外的用户元数据。

woocommerce_form_field('myName', array(
    'type' =>'text',
    'class'=>array('my-field-class form-row-wide'),
    'label'=>__('First Name'),
    'placeholder'=>__('Please enter your name'),
), $checkout->get_value('myName'));

我正在使用以下代码更新数据库:

/*Update the info with the checkout*/
add_action('woocommerce_checkout_field_update_order_meta','my_custom_checkout_field_update_meta');
function my_custom_checkout_field_update_meta($order_id){
    if($_POST['MyName'])
        update_post_meta($order_id, 'First Name',esc_attr($POST['MyName']));
}

每次提交时,即使我在本地计算机上工作,也会收到内部服务器错误。我需要收集这些数据并将其保存到数据库中。有人帮忙吗?

1 个答案:

答案 0 :(得分:1)

更新:通常情况下,帖子meta_key不应使用空格和大写字母...

此外,您的附加字段应该在结帐表单中,如果没有提交任何内容,则无法保存任何内容。

要显示自定义文本字段并在提交后将其保存在数据库中,最好的方法是使用以下内容:

// Add checkout custom text field
add_action( 'woocommerce_before_order_notes', 'add_checkout_custom_field', 20, 1 );
function add_checkout_custom_field( $checkout) {

    // Text field
    woocommerce_form_field('my_name', array(
        'type'        => 'text',
        'class'       => array('my-field-class form-row-wide'),
        'label'       => __('First Name'),
        'placeholder' =>__('Please enter your name'),
    ), $checkout->get_value('my_name') );
}

// Save the data to the order
add_action('woocommerce_checkout_create_order','my_custom_checkout_field_update_meta');
function my_custom_checkout_field_update_meta( $order ){
    if( isset($_POST['my_name']) && ! empty($_POST['my_name']) )
        $order->update_meta_data( '_my_name', sanitize_text_field($POST['my_name']) );
}

代码放在活动子主题(或活动主题)的function.php文件中。经过测试和工作......

要在订单中保存此数据后,请使用get_post_meta( $order_id, '_my_name', true );其中$order_id是动态订单ID ...

您的其他文字字段将位于“订单备注”字段之前:

enter image description here

  

现在您的附加字段令人困惑,因为结帐页面中已存在结算和发货名字字段。