【问题标题】:Add a custom checkout field value to customer order notes in WooCommerce在 WooCommerce 中向客户订单备注添加自定义结帐字段值
【发布时间】:2020-09-14 13:49:43
【问题描述】:

简而言之:

  1. 我想在 Woocommerce Checkout 'daypart' 上显示一个新字段。这是一个包含 3 个选项的下拉字段。
  2. 代码正在运行,我可以在 WooCommerce 后端看到它,但我需要将数据保存在“客户备注”字段中,但作为客户 cmets(如果有)的补充,我被困在这里,不知道如何这样做。

其他信息:

我需要将时段保存在核心结帐字段中,因为商店会同步到另一个不同步订单元数据的配送服务。

代码如下:

//define current user status to display things on checkout
if( current_user_can( 'rethunk_retailers' ) ){
  // Retailers text
    //* Add select field to the checkout page
add_action('woocommerce_before_order_notes', 'wps_add_select_checkout_field');
function wps_add_select_checkout_field( $checkout ) {

    echo '<h2>'.__('Partial Shipment Options').'</h2>';
    echo '<p>'.__('Option 1: details for option 1').'</p>';
    echo '<p>'.__('Option 2: details for option 2').'</p>';
    echo '<p>'.__('Option 3: details for option 3').'</p>';

    woocommerce_form_field( 'daypart', array(
        'label'         => __( 'Delivery options' ),
        'type'          => 'select',
        'class'         => array( 'wps-drop' ),
        'required' => true,
        'options'       => array(
            'blank'     => __( 'Please choose one', 'wps' ),
            'Yes I want Partial Shipment'   => __( 'Option 1: I want a partial shipment', 'wps' ),
            'Please do not ship a partiel shipment' => __( 'Option 2: Do not ship a partial shipment to me.', 'wps' ),
            'I will Wait do not refund anything'    => __( 'Option 3: Do not refund anything', 'wps' )
        )
),
        $checkout->get_value( 'daypart' ));

}

    //* Process the checkout
 add_action('woocommerce_checkout_process', 'wps_select_checkout_field_process');
 function wps_select_checkout_field_process() {
    global $woocommerce;

    // Check if set, if its not set add an error.
    if ($_POST['daypart'] == "blank")
     wc_add_notice( '<strong>Please select a Partial Shipment Option </strong>', 'error' );

 }

    //* Update the order meta with field value
 add_action('woocommerce_checkout_update_order_meta', 'wps_select_checkout_field_update_order_meta');
 function wps_select_checkout_field_update_order_meta( $order_id ) {

   if ($_POST['daypart']) update_post_meta( $order_id, 'daypart', esc_attr($_POST['daypart']));
 }

} else {
   // not retailers text
}
//* Add selection field value to emails
add_filter('woocommerce_email_order_meta_keys', 'wps_select_order_meta_keys');
function wps_select_order_meta_keys( $keys ) {

    $keys['Shipping Option:'] = 'daypart';
    return $keys;

}
//* Display field value on the order edition page
add_action( 'woocommerce_admin_order_data_after_billing_address', 'wps_select_checkout_field_display_admin_order_meta', 10, 1 );
function wps_select_checkout_field_display_admin_order_meta($order){

    echo '<p><strong>'.__('Delivery option').':</strong> ' . get_post_meta( $order->id, 'daypart', true ) . '</p>';

}

【问题讨论】:

    标签: php wordpress woocommerce checkout hook-woocommerce


    【解决方案1】:

    要在客户订单备注中包含“daypart”选择的值,您将从您的代码中替换:

    // Update the order meta with field value
    add_action('woocommerce_checkout_update_order_meta', 'wps_select_checkout_field_update_order_meta');
    function wps_select_checkout_field_update_order_meta( $order_id ) {
    
        if ( $_POST['daypart']) update_post_meta( $order_id, 'daypart', esc_attr($_POST['daypart']));
    }
    

    通过以下方式:

    // Update the order meta with field value
    add_action( 'woocommerce_checkout_create_order', 'wps_update_order_meta', 20, 2 );
    function wps_update_order_meta( $order, $data ) {
        if ( isset($_POST['daypart']) && ! empty($_POST['daypart']) ) {
            // Add "daypart" selected value as custom order meta data
            $order->update_meta_data('daypart', esc_attr($_POST['daypart']));
    
            // Get customer note
            $customer_note = isset( $data['order_comments'] ) ? $data['order_comments'] . ' ' : '' );
    
            // add to existing customer note the "daypart" selected value
            $order->set_customer_note( $customer_note . esc_attr($_POST['daypart']) );
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-17
      • 2018-12-31
      • 2018-02-06
      • 2022-01-20
      • 2020-12-30
      • 2022-01-03
      • 1970-01-01
      相关资源
      最近更新 更多