jQuery: How to Disable Certain Days on a Date Picker
jQuery is a popular method used in date pickers. In this example we restrict the only available processing days to Monday, Wednesday, and Friday. You will need to make sure you have a custom scripts directory and file and have enqued it correctly to your functions.php file first. This example uses Ben Frain's method of enquing the script as seen on his blog:
functions.php
// allow jQuery if ( !is_admin() ) { // instruction to only load if it is not the admin area // register your script location, dependencies and version wp_register_script('custom_script', get_bloginfo('stylesheet_directory') . '/js/custom_script.js', array('jquery'), '1.0' ); // enqueue the script wp_enqueue_script('custom_script'); }
After that, you will add the following snippet to your new custom_script.js file:
custom_script.js
// custom date picker jQuery( function ( $ ) { // Get the Date field. var nativeDate = $( "#autoship-next-occurrence" ); // Save the value var originalVal = $( "#autoship-next-occurrence" ).val(); // Create the custom notice box and add to body var noticeBox = $('<div class="native-alert" style="display:none" role="alert"></div>'); noticeBox.appendTo($('body')); // Function that checks if entered day is a weekend var dissableWeekends = function(e){ noticeBox.html(""); var day = new Date(this.value).getUTCDay(); if([6,0,2,4].includes(day)){ e.preventDefault(); this.value = originalVal; noticeBox.html("Please select a Monday, Wednesday, or Friday date only!").fadeIn(300).delay(2000).fadeOut(500); } }; // Catch the input action & run check nativeDate.on('input', dissableWeekends ); } );
Finally, you will just need to add custom style your notice box. Here we targeting the "native-alert" class:
style.css
/* Example CSS for Native Alert */ /* This CSS should be copied to the child theme style.css file. */ .native-alert { color: #ffffff; background-color: #ce2a71; border-color: #f5c6cb; -webkit-box-shadow: 0 30px 60px 0 rgba(0,0,0,0.2); box-shadow: 0 30px 60px 0 rgba(0,0,0,0.2); position: fixed; top: 10%; left: 30%; z-index: 9999; padding: 40px; margin-bottom: 1rem; border: 1px solid transparent; border-radius: .25rem; font-size: 21px; letter-spacing: 2px; }
When finished your date-picker will act like: