自定义WooCommerce datepicker检出字段已保存并显示在订单和电子邮件中

阿林·德拉戈埃斯库

我在WooCommerce结帐页面上添加了一个新的自定义datepicker字段。

我正在使用在Woocommerce结帐字段中启用日期选择器没关系,在结帐页面上。

但是现在我真的不知道该如何保存新的字段并将其添加到订单记录中。任何帮助表示赞赏。

LoicTheAztec

第一节

下面将在结帐时显示一个自定义datepicker字段,它将验证该字段并将其保存。

所选日期将显示在管理员订单,客户订单和电子邮件中

要将此日期包括在客户注释中,请使用末尾“第2节”中的代码

编码:

// Register main datepicker jQuery plugin script
add_action( 'wp_enqueue_scripts', 'enabling_date_picker' );
function enabling_date_picker() {
    // Only on front-end and checkout page
    if( is_admin() || ! is_checkout() ) return;

    // Load the datepicker jQuery-ui plugin script
    wp_enqueue_script('jquery-ui-datepicker');
    wp_enqueue_style('jquery-ui');
}

// Add custom checkout datepicker field
add_action( 'woocommerce_before_order_notes', 'checkout_display_datepicker_custom_field' );
function checkout_display_datepicker_custom_field( $checkout ) {
    $field_id = 'my_datepicker';

    echo '<div id="datepicker-wrapper">';

    woocommerce_form_field( $field_id, array(
        'type' => 'text',
        'class'=> array( 'form-row-wide'),
        'label' => __('Choose a date'),
        'required' => true, // Or false
        
    ), '' );

    echo '<br></div>';


    // Jquery: Enable the Datepicker
    ?>
    <script language="javascript">
    jQuery( function($){
        var a = '#<?php echo $field_id ?>';
        $(a).datepicker({
            dateFormat: 'dd-mm-yy', // ISO formatting date
        });
    });
    </script>
    <?php
}

// Field validation
add_action( 'woocommerce_after_checkout_validation', 'checkout_datepicker_custom_field_validation', 10, 2 );
function checkout_datepicker_custom_field_validation( $data, $errors ) {
    $field_id = 'my_datepicker';

    if ( isset($_POST[$field_id]) && empty($_POST[$field_id]) ) {
        $errors->add( 'validation', __('You must choose a date on datepicker field.', 'woocommerce') ); 
    }
}

// Save field
add_action( 'woocommerce_checkout_create_order', 'save_datepicker_custom_field_value', 10, 2 );
function save_datepicker_custom_field_value( $order, $data ){
    $field_id = 'my_datepicker';
    $meta_key = '_'.$field_id;

    if ( isset($_POST[$field_id]) && ! empty($_POST[$field_id]) ) {
        $order->update_meta_data( $meta_key, esc_attr($_POST[$field_id]) ); 
    }
}


// Display custom field value in admin order pages
add_action( 'woocommerce_admin_order_data_after_billing_address', 'admin_display_date_custom_field_value', 10, 1 );
function admin_display_date_custom_field_value( $order ) {
    $meta_key   = '_my_datepicker';
    $meta_value = $order->get_meta( $meta_key ); // Get carrier company

    if( ! empty($meta_value) ) {
        // Display
        echo '<p><strong>' . __("Date", "woocommerce") . '</strong>: ' . $meta_value . '</p>';
    }
}

// Display custom field value after shipping line everywhere (orders and emails)
add_filter( 'woocommerce_get_order_item_totals', 'display_date_custom_field_value_on_order_item_totals', 10, 3 );
function display_date_custom_field_value_on_order_item_totals( $total_rows, $order, $tax_display ){
    $field_id   = 'my_datepicker';
    $meta_key   = '_my_datepicker';
    $meta_value = $order->get_meta( $meta_key ); // Get carrier company

    if( ! empty($meta_value) ) {
        $new_total_rows = [];

        // Loop through order total rows
        foreach( $total_rows as $key => $values ) {
            $new_total_rows[$key] = $values;

            // Inserting the carrier company under shipping method
            if( $key === 'shipping' ) {
                $new_total_rows[$field_id] = array(
                    'label' => __("Date", "woocommerce") . ':',
                    'value' => $meta_value,
                );
            }
        }
        return $new_total_rows;
    }
    return $total_rows;
}

代码进入您的活动子主题(或活动主题)的functions.php文件中。经过测试和工作。


第二节

要将此字段添加到客户订单注释中,请改用以下内容:

// Register main datepicker jQuery plugin script
add_action( 'wp_enqueue_scripts', 'enabling_date_picker' );
function enabling_date_picker() {
    // Only on front-end and checkout page
    if( is_admin() || ! is_checkout() ) return;

    // Load the datepicker jQuery-ui plugin script
    wp_enqueue_script('jquery-ui-datepicker');
    wp_enqueue_style('jquery-ui');
}

// Add custom checkout datepicker field
add_action( 'woocommerce_before_order_notes', 'checkout_display_datepicker_custom_field' );
function checkout_display_datepicker_custom_field( $checkout ) {
    $field_id = 'my_datepicker';

    echo '<div id="datepicker-wrapper">';

    woocommerce_form_field( $field_id, array(
        'type' => 'text',
        'class'=> array( 'form-row-wide'),
        'label' => __('Choose a date'),
        'required' => true, // Or false
        
    ), '' );

    echo '<br></div>';


    // Jquery: Enable the Datepicker
    ?>
    <script language="javascript">
    jQuery( function($){
        var a = '#<?php echo $field_id ?>';
        $(a).datepicker({
            dateFormat: 'dd-mm-yy', // ISO formatting date
        });
    });
    </script>
    <?php
}

// Field validation
add_action( 'woocommerce_after_checkout_validation', 'checkout_datepicker_custom_field_validation', 10, 2 );
function checkout_datepicker_custom_field_validation( $data, $errors ) {
    $field_id = 'my_datepicker';

    if ( isset($_POST[$field_id]) && empty($_POST[$field_id]) ) {
        $errors->add( 'validation', __('You must choose a date on datepicker field.', 'woocommerce') ); 
    }
}

// Save field
add_action( 'woocommerce_checkout_create_order', 'save_datepicker_custom_field_value', 10, 2 );
function save_datepicker_custom_field_value( $order, $data ){
    $field_id = 'my_datepicker';
    $meta_key = '_'.$field_id;

    if ( isset($_POST[$field_id]) && ! empty($_POST[$field_id]) ) {
        $date = esc_attr($_POST[$field_id]);
        
        $order->update_meta_data( $meta_key, $date ); // Save date as order meta data
        
        $note = sprintf(__("Chosen date: %s.", "woocommerce"), $date );
        $note = isset($data['order_comments']) && ! empty($data['order_comments']) ? $data['order_comments'] . '. ' . $note : $note;
        
        // Save date on customer order note
        $order->set_customer_note( $note );

    }
}


// Display custom field value in admin order pages
add_action( 'woocommerce_admin_order_data_after_billing_address', 'admin_display_date_custom_field_value', 10, 1 );
function admin_display_date_custom_field_value( $order ) {
    $meta_key   = '_my_datepicker';
    $meta_value = $order->get_meta( $meta_key ); // Get carrier company

    if( ! empty($meta_value) ) {
        // Display
        echo '<p><strong>' . __("Chosen date", "woocommerce") . '</strong>: ' . $meta_value . '</p>';
    }
}

代码进入您的活动子主题(或活动主题)的functions.php文件中。经过测试和工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

订单自定义字段未显示在WooCommerce电子邮件通知中

来自分类Dev

在woocommerce订单电子邮件中显示多个产品的自定义字段

来自分类Dev

在Woocommerce订单和电子邮件中的订单总数之后添加自定义文本

来自分类Dev

如何在woocommerce中的新订单电子邮件中显示高级自定义字段数据

来自分类Dev

在WooCommerce订单和电子邮件通知上显示自定义交货通知

来自分类Dev

在WooCommerce订单和电子邮件中添加和显示自定义购物车项目数据

来自分类Dev

WooCommerce:使用自定义电子邮件通知添加自定义订单状态

来自分类Dev

在WooCommerce电子邮件通知中为管理员显示自定义字段

来自分类Dev

获取要在 Woocommerce 电子邮件通知中显示的自定义字段值

来自分类Dev

WooCommerce中的自定义订单操作

来自分类Dev

如何在WooCommerce订单中显示产品自定义字段(自定义SKU)

来自分类Dev

仅在 Woocommerce 中针对本地运输和已完成订单的自定义电子邮件通知

来自分类Dev

在 WooCommerce 中隐藏自定义字段

来自分类Dev

在特定的WooCommerce电子邮件通知上显示自定义字段

来自分类Dev

在WooCommerce电子邮件通知上显示第二个自定义字段

来自分类Dev

增加WooCommerce电子邮件自定义字段的显示文本大小

来自分类Dev

Woocommerce 新订单自定义主题

来自分类Dev

Woocommerce自定义电子邮件结帐

来自分类Dev

产品标签的WooCommerce自定义电子邮件

来自分类Dev

Woocommerce的自定义电子邮件(Wordpress)

来自分类Dev

Woocommerce自定义电子邮件结帐

来自分类Dev

WooCommerce-每个产品的自定义电子邮件

来自分类Dev

WooCommerce-发送有关自定义订单状态更改的自定义电子邮件

来自分类Dev

通过添加自定义表来自定义WooCommerce电子邮件

来自分类Dev

当订单状态更改为自定义订单状态时,从WooCommerce发送电子邮件

来自分类Dev

当订单状态更改为自定义订单状态时,从WooCommerce发送电子邮件

来自分类Dev

woocommerce自定义字段配置

来自分类Dev

woocommerce BACS 添加自定义字段

来自分类Dev

WooCommerce电子邮件模板中的ACF自定义字段

Related 相关文章

  1. 1

    订单自定义字段未显示在WooCommerce电子邮件通知中

  2. 2

    在woocommerce订单电子邮件中显示多个产品的自定义字段

  3. 3

    在Woocommerce订单和电子邮件中的订单总数之后添加自定义文本

  4. 4

    如何在woocommerce中的新订单电子邮件中显示高级自定义字段数据

  5. 5

    在WooCommerce订单和电子邮件通知上显示自定义交货通知

  6. 6

    在WooCommerce订单和电子邮件中添加和显示自定义购物车项目数据

  7. 7

    WooCommerce:使用自定义电子邮件通知添加自定义订单状态

  8. 8

    在WooCommerce电子邮件通知中为管理员显示自定义字段

  9. 9

    获取要在 Woocommerce 电子邮件通知中显示的自定义字段值

  10. 10

    WooCommerce中的自定义订单操作

  11. 11

    如何在WooCommerce订单中显示产品自定义字段(自定义SKU)

  12. 12

    仅在 Woocommerce 中针对本地运输和已完成订单的自定义电子邮件通知

  13. 13

    在 WooCommerce 中隐藏自定义字段

  14. 14

    在特定的WooCommerce电子邮件通知上显示自定义字段

  15. 15

    在WooCommerce电子邮件通知上显示第二个自定义字段

  16. 16

    增加WooCommerce电子邮件自定义字段的显示文本大小

  17. 17

    Woocommerce 新订单自定义主题

  18. 18

    Woocommerce自定义电子邮件结帐

  19. 19

    产品标签的WooCommerce自定义电子邮件

  20. 20

    Woocommerce的自定义电子邮件(Wordpress)

  21. 21

    Woocommerce自定义电子邮件结帐

  22. 22

    WooCommerce-每个产品的自定义电子邮件

  23. 23

    WooCommerce-发送有关自定义订单状态更改的自定义电子邮件

  24. 24

    通过添加自定义表来自定义WooCommerce电子邮件

  25. 25

    当订单状态更改为自定义订单状态时,从WooCommerce发送电子邮件

  26. 26

    当订单状态更改为自定义订单状态时,从WooCommerce发送电子邮件

  27. 27

    woocommerce自定义字段配置

  28. 28

    woocommerce BACS 添加自定义字段

  29. 29

    WooCommerce电子邮件模板中的ACF自定义字段

热门标签

归档