【问题标题】:Updating Woo commerce checkout Page with Additional Form Data使用其他表单数据更新 Woo 商务结帐页面
【发布时间】:2018-09-29 21:07:15
【问题描述】:

我正在为我的 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']));
}

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

【问题讨论】:

  • esc_attr($POST['MyName']) 不是数组。我想应该是esc_attr($_POST['MyName']) 还要检查apache error_logs 一定有语法错误。 500 internal server Error 简单来说就是脚本错误。
  • 是的,你是对的,服务器错误消失了,但我没有在我的订单详细信息中获得附加字段。我错过了什么吗?
  • 你想要这个字段在哪里?

标签: php wordpress woocommerce checkout custom-fields


【解决方案1】:

更新: 通常 postmeta 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……

您的附加文本字段将位于“订单备注”字段之前:

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

【讨论】:

  • 我仍然没有得到前端的附加字段。请进一步建议。
  • @olasunkanmi 我在我的回答中添加了一些细节……这段代码已经过测试并且可以工作。您可以在this test server 中查看它,您可以在其中将产品添加到购物车并查看结帐...
  • 我已经纠正了我的错误,到目前为止我已经设法收集存储和更新,但是现在,我只有列名显示在订单中,没有收集到自己的数据。喜欢名字:空白。
  • 用这个 get_post_meta( $order->id, '_my_name', true )
猜你喜欢
  • 2021-11-02
  • 1970-01-01
  • 1970-01-01
  • 2017-07-30
  • 2011-06-29
  • 1970-01-01
  • 2014-08-09
  • 2016-02-07
  • 1970-01-01
相关资源
最近更新 更多