根据自定义日期选择器字段选择显示自定义 woocommerce 购物车费用

问题描述 投票:0回答:1

派对租赁设备网站。在 3 个 woocommerce_form_field 中使用 JQuery 日期选择器,其中一个用于事件日期,一个用于交付日期,一个用于取货日期。如果用户选择周日作为送货日期或取货日期,我将尝试收取 440 美元的额外费用。在此日期选择器中,星期日是一周的第一天,即第 0 天。

费用在客户结帐并收到订单元或订单电子邮件后出现,但我无法让它在 ajax 更新的结帐页面上显示,这很重要,因为我希望他们在结帐之前知道需要花多少钱。我希望有人能慷慨地帮助我,:)

这是我正在使用的代码 - 如前所述,费用在处理结帐时可见,但在实际结帐页面上不可见,即使在 update_cart 之后也是如此。这是我的子主题functions.php

//DATEPICKER STUFF
//
//
//
// enqueue jquery script
function enqueue_datepicker_scripts() {
    // Enqueue jQuery UI
    wp_enqueue_script('jquery-ui-datepicker');
}
add_action('wp_enqueue_scripts', 'enqueue_datepicker_scripts');

// Enqueue jquery options
function enqueue_datepicker_script() {
    ?>
    <script>
    jQuery(function ($) {
        // Datepicker options
        var datepickerOptions = {
            dateFormat: 'mm/dd/yy',
            minDate: '+3d', // Minimum date is today + 3 days
            firstDay: 0, // Start week with Sunday
            onSelect: function (dateText, inst) {
                setTimeout(function () {
                    $('body').trigger('update_checkout');
                }, 1);
            }
        };

        // Event Date
        $('#event_date').datepicker($.extend({}, datepickerOptions));

        // Delivery Date
        $('#delivery_date').datepicker($.extend({}, datepickerOptions));

        // Pickup Date
        $('#pickup_date').datepicker($.extend({}, datepickerOptions));
    });
    </script>
    <?php
}
add_action('wp_footer', 'enqueue_datepicker_script');

// Add datepicker to checkout fields
function custom_add_date_picker_fields($checkout) {
    echo '<div id="custom_date_picker"><h2>' . __('Delivery and Pickup Details') . '</h2>';

    // Event Date
    woocommerce_form_field('event_date', array(
        'type' => 'text',
        'class' => array('form-row-wide datepicker'),
        'label' => __('Event Date'),
        'required' => true,
        'default' => date('m/d/Y', strtotime('+3 days')), // Default is 3 days from today
        'custom_attributes' => array(
            'min' => date('m/d/Y', strtotime('+3 days')), // Minimum date is 3 days from today
            'max' => date('m/d/Y', strtotime('+2 years')), // Maximum date is 2 years from today
        ),
    ), $checkout->get_value('event_date'));

    // Delivery Date
    woocommerce_form_field('delivery_date', array(
        'type' => 'text',
        'class' => array('form-row-wide datepicker'),
        'label' => __('Delivery Date'),
        'required' => true,
        'default' => date('m/d/Y', strtotime('+2 days')), // Default is 1 day before the event date
    ), $checkout->get_value('delivery_date'));

    // Pickup Date
    woocommerce_form_field('pickup_date', array(
        'type' => 'text',
        'class' => array('form-row-wide datepicker'),
        'label' => __('Pickup Date'),
        'required' => true,
        'default' => date('m/d/Y', strtotime('+4 days')), // Default is 1 day after the event date
    ), $checkout->get_value('pickup_date'));

    echo '</div>';
}
add_action('woocommerce_before_order_notes', 'custom_add_date_picker_fields');


function custom_process_date_picker_fields() {
}
add_action('woocommerce_checkout_process', 'custom_process_date_picker_fields');

// save to order meta
function custom_update_date_picker_fields($order_id) {
    // Save Event Date
    if (!empty($_POST['event_date'])) {
        update_post_meta($order_id, 'Event Date', sanitize_text_field($_POST['event_date']));
    }

    // Save Delivery Date
    if (!empty($_POST['delivery_date'])) {
        update_post_meta($order_id, 'Delivery Date', sanitize_text_field($_POST['delivery_date']));
    }

    // Save Pickup Date
    if (!empty($_POST['pickup_date'])) {
        update_post_meta($order_id, 'Pickup Date', sanitize_text_field($_POST['pickup_date']));
    }
}
add_action('woocommerce_checkout_update_order_meta', 'custom_update_date_picker_fields');

// Add fee with standard tax
function custom_add_sunday_delivery_fee() {
    // Check if delivery date is set
    if (isset($_POST['delivery_date'])) {
        $delivery_date = sanitize_text_field($_POST['delivery_date']);
        $delivery_day = date('w', strtotime($delivery_date));

        // Check if delivery date is Sunday
        if ($delivery_day == 0) { // Sunday
            WC()->cart->add_fee(__('Sunday Delivery', 'woocommerce'), 440, true, 'standard');
        }
    }
}
add_action('woocommerce_cart_calculate_fees', 'custom_add_sunday_delivery_fee', 10);

// pickup fee
function custom_add_sunday_pickup_fee() {
    // Check if pickup date is set
    if (isset($_POST['pickup_date'])) {
        $pickup_date = sanitize_text_field($_POST['pickup_date']);
        $pickup_day = date('w', strtotime($pickup_date));


        // Check if pickup date is Sunday
        if ($pickup_day == 0) { // Sunday
            WC()->cart->add_fee(__('Sunday Pickup', 'woocommerce'), 440, true, 'standard');
        }
    }
}
add_action('woocommerce_cart_calculate_fees', 'custom_add_sunday_pickup_fee', 10);

javascript php woocommerce jquery-ui-datepicker fee
1个回答
0
投票

喜欢这个我吗?

function enqueue_datepicker_scripts() {
    wp_enqueue_script('jquery-ui-datepicker');
}
add_action('wp_enqueue_scripts', 'enqueue_datepicker_scripts');

function enqueue_datepicker_script() {
    ?>
    <script>
        jQuery(function ($) {
            var datepickerOptions = {
                dateFormat: 'mm/dd/yy',
                minDate: '+3d',
                firstDay: 0,
                onSelect: function (dateText, inst) {
                    updateCheckoutWithFee();
                }
            };

            $('#event_date').datepicker($.extend({}, datepickerOptions));
            $('#delivery_date').datepicker($.extend({}, datepickerOptions));
            $('#pickup_date').datepicker($.extend({}, datepickerOptions));

            function updateCheckoutWithFee() {
                var deliveryDate = $('#delivery_date').val();
                var pickupDate = $('#pickup_date').val();
                var deliveryDay = new Date(deliveryDate).getDay();
                var pickupDay = new Date(pickupDate).getDay();
                var extraFee = 440;

                if (deliveryDay === 0 || pickupDay === 0) {
                    $('body').trigger('update_checkout');
                    alert('Extra fee of $' + extraFee + ' added for Sunday delivery or pickup.');
                }
            }
        });
    </script>
    <?php
}
add_action('wp_footer', 'enqueue_datepicker_script');

© www.soinside.com 2019 - 2024. All rights reserved.