派对租赁设备网站。在 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);
喜欢这个我吗?
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');