Woocommerce 交货日期选择器启用某些日期,禁用其余日期

问题描述

我正在尝试实现一个日期选择器,以便客户可以选择交货日期。问题是我只希望某些日期可用。例如 10-2-2021 到 16-2-2021。其余时间的所有日期都应禁用且不可点击。

一个问题是,如果有人在 22 点之后在该日期范围内下订单,则第二天也需要禁用。如果有人在 22:00 之前下订单,则该日期范围内的第二天可用。

有人能指出我正确的方向吗?


  
add_action( 'woocommerce_review_order_before_payment','bbloomer_echo_acf_date_picker' );
  
function bbloomer_echo_acf_date_picker( $checkout ) {
     
   echo '<div id="show-if-shipping" style="display:none"><h3>Delivery Date</h3>';
     
   woocommerce_form_field( 'delivery_date',array(
        'type'          => 'text','class'         => array('form-row-wide'),'id'            => 'datepicker','required'      => true,'label'         => __('Select Delivery Date'),'placeholder'       => __('Click to open calendar'),));
     
   echo '</div>';
     
}
  
add_action( 'woocommerce_after_checkout_form','bbloomer_show_hide_calendar' );
   
function bbloomer_show_hide_calendar( $available_gateways ) {
     
?>
  
<script type="text/javascript">
     
   function show_calendar( val ) {
      if ( val.match("^flat_rate") || val.match("^free_shipping") ) {
         jQuery('#show-if-shipping').fadeIn();
      } else {
         jQuery('#show-if-shipping').fadeIn();
      }   
   }
     
   jQuery(document).ajaxComplete(function() {
       var val = jQuery('input[name^="shipping_method"]:checked').val();
      show_calendar( val );
   });
     
</script>
  
<?PHP
     
}
  
add_action( 'woocommerce_checkout_process','bbloomer_validate_new_checkout_fields' );
   
function bbloomer_validate_new_checkout_fields() {   
     
   if ( isset( $_POST['delivery_date'] ) && empty( $_POST['delivery_date'] ) ) wc_add_notice( __( 'Please select the Delivery Date' ),'error' );
   
}
  
// -------------------------------
// 2. Load JQuery Datepicker
  
add_action( 'woocommerce_after_checkout_form','bbloomer_enable_datepicker',10 );
   
function bbloomer_enable_datepicker() {
     
  ?>
  
   <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
  
  <?PHP    
     
}
  
// -------------------------------
// 3. Load Calendar Dates
  
add_action( 'woocommerce_after_checkout_form','bbloomer_load_calendar_dates',20 );
   
function bbloomer_load_calendar_dates( $available_gateways ) {
  
   ?>

 


  
   <script type="text/javascript">
  
      jQuery(document).ready(function($) {
              
         $('#datepicker').click(function() {
                     

  
            $('#datepicker').datepicker({

                //beforeShowDay: function(date) { return [date.getDay() == 1,""];},//beforeShowDay: function (date) { var dateString = jQuery.datepicker.formatDate('yy-mm-dd',date); return [daterange.indexOf(dateString) == -1];},showOtherMonths: false,selectOtherMonths: false,changeMonth: false,changeYear: false,dateFormat: 'dd-mm-yy',//maxDate: "+1d",minDate: 0,}).datepicker( "show" );
              
         });
  
      });
  
   </script>
  
   <?PHP
   
}
  
// -------------------------------
// 4. Save & show date as order Meta
  
add_action( 'woocommerce_checkout_update_order_Meta','bbloomer_save_date_weight_order' );
  
function bbloomer_save_date_weight_order( $order_id ) {
     
    global $woocommerce;
     
    if ( $_POST['delivery_date'] ) update_post_Meta( $order_id,'_delivery_date',esc_attr( $_POST['delivery_date'] ) );
     
}
  
add_action( 'woocommerce_admin_order_data_after_billing_address','bbloomer_delivery_weight_display_admin_order_Meta' );
   
function bbloomer_delivery_weight_display_admin_order_Meta( $order ) {    
     
   echo '<p><strong>Delivery Date:</strong> ' . get_post_meta( $order->get_id(),true ) . '</p>';
     
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)