当前位置: 首页 > 知识库问答 >
问题:

在WooCommerce中向客户订单注释添加自定义结账字段值

卢黎明
2023-03-14

简言之:

  1. 我想在“daypart”上显示一个新字段。这是一个具有3个选项的下拉字段

其他信息:

我需要将daypart保存在core签出字段中,因为商店会同步到另一个不同步订单元数据的配送服务。

这是代码:

//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>';

}

共有1个答案

公风史
2023-03-14

要将“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']) );
    }
}
 类似资料:
  • 我正试图在结帐时将定制费用计入订单总额。我在woocommerce中添加了一个复选框 包含一个自定义js文件,可用于处理事件 和一个php费用处理函数 由于某些原因,$_POST['state']的值没有被添加,当我给出一个硬编码值时,函数会工作,我尝试了很多选项,但无法让它工作。 我看过类似的帖子,但没有一个有答案。

  • 我正在为一个自定义的woocommerce结帐表单的多选字段而挣扎。 我通过函数创建了自定义multislect字段: 请注意,woocommerce函数无法创建自定义多选字段,因此这里有一个简单的选择字段。 我决定使用jQuery以这种方式添加多个缺失的属性: 现在我有了multiselect字段,它看起来像: 问题是,顺序元值没有正确更新,它每次只显示一个值,而不是一个数组的值,如果人选择一个

  • 使用以下代码,我可以在WooCommerce产品上获得一个自定义字段,但是如何在订单、结帐和管理订单(后端)上显示它呢? 这是我在每个产品上的自定义字段 这是我的管理订单(后端)详细信息。我尝试显示我在每个产品帖子中输入的正确元数据。 如何在管理订单中显示我在自定义字段中输入的值?我也希望有人能帮助我显示在订单和结帐页面的元。。。或者引导我走向正确的方向。我意识到,为了在管理订单中显示它,我必须确

  • WooCommerce自定义结账字段的插件有Custom Checkout Fields for WooCommerce等,如果你想要更多的自由,就用代码来解决吧。本文介绍一种用代码来自定义WooCommerce结账字段的方法。 WooCommerce自定义结账字段代码 代码单独保存一个文件引入,或直接放到子主题的functions.php中,第二种方式请将 defined('WPINC') or

  • 大家好,我通过搜索并找到解决方案,对我在woocommerce上的结帐进行了一些编辑。 到目前为止,我已经做到了,所以我跳过购物车/篮子,直接去结账,并重命名了订单笔记文件。 我正在挣扎的是如何将订单注释字段移动到订单评论上方。我知道我需要使用这个woocommerce_checkout_before_order_review但我不知道如何使用。任何帮助都会很棒吗?

  • 我想将woocommerce结帐页面的“订单注释”文本字段更改为“特殊注释”。但是我找不到这个文件的确切位置。在我的localhost文件夹中可以在哪里找到此文件? 这是页面的截图: