如何在WordPress插件的flatpickr代码中添加禁用周末功能?
解决方案
要把禁用周末的功能整合到你的代码中,需要修改fpCfg的locale配置,并合并禁用规则(包括原有的禁用日期和周末禁用函数),以下是修改后的完整代码:
<script> jQuery( document ).ready( function( $ ) { 'use strict'; var cpoCfg; if (typeof window.UniCpo !== 'undefined') { cpoCfg = window.UniCpo; } else if (typeof window.UniCpoCart !== 'undefined') { cpoCfg = window.UniCpoCart; } var fpCfg = { // 合并原有locale配置,添加周一为一周第一天的设置 locale: Object.assign({}, cpoCfg.flatpickrCfg.locale, { firstDayOfWeek: 1 }), }; <?php if ( $is_datepicker_disabled && $is_timepicker ) { ?> fpCfg.enableTime = true; fpCfg.noCalendar = true; fpCfg.minTime = "<?php echo esc_html( $time_min ) ?>"; fpCfg.maxTime = "<?php echo esc_html( $time_max ) ?>"; fpCfg.minuteIncrement = "<?php echo esc_html( $minute_step ) ?>"; <?php if ( $time_24hr ) { ?> fpCfg.time_24hr = true; fpCfg.dateFormat = "H:i"; <?php } else { ?> fpCfg.dateFormat = "h:i K"; <?php } ?> <?php } else { ?> <?php if ( 'range' === $picker_type ) { ?> fpCfg.mode = 'range'; var defaultValue = '<?php echo esc_attr( $default_value ); ?>'.split(' - '); if (defaultValue[0].length > 0 && typeof defaultValue[1] !== 'undefined' && defaultValue[1].length > 0 && moment(defaultValue[0], 'YYYY-MM-DD', true).isValid() && moment(defaultValue[1], 'YYYY-MM-DD', true).isValid()) { fpCfg.defaultDate = defaultValue; } <?php } elseif ( 'single' === $picker_type ) { ?> fpCfg.defaultDate = '<?php echo esc_html( $default_value ); ?>'; <?php } elseif ( 'multiple' === $picker_type ) { ?> fpCfg.mode = 'multiple'; var defaultValue = '<?php echo esc_attr( $default_value ); ?>'.split(' - '); if (defaultValue[0].length > 0 && typeof defaultValue[1] !== 'undefined' && defaultValue[1].length > 0 && moment(defaultValue[0], 'YYYY-MM-DD', true).isValid() && moment(defaultValue[1], 'YYYY-MM-DD', true).isValid()) { fpCfg.defaultDate = defaultValue; } fpCfg.conjunction = "<?php echo $conjunction; ?>"; <?php } ?> <?php if ( $is_timepicker ) { ?> fpCfg.enableTime = true; fpCfg.minTime = "<?php echo esc_html( $time_min ) ?>"; fpCfg.maxTime = "<?php echo esc_html( $time_max ) ?>"; fpCfg.minuteIncrement = "<?php echo esc_html( $minute_step ) ?>"; <?php if ( $time_24hr ) { ?> fpCfg.time_24hr = true; fpCfg.dateFormat = "Y-m-d H:i"; <?php } else { ?> fpCfg.dateFormat = "Y-m-d h:i K"; <?php } ?> <?php } ?> <?php if ( false !== strpos( $date_min, 'moment' ) || false !== strpos( $date_min, 'Date' ) ) { ?> fpCfg.minDate = <?php echo esc_html( $date_min ) ?>; <?php } else { ?> fpCfg.minDate = '<?php echo esc_html( $date_min ) ?>'; <?php } ?> <?php if ( false !== strpos( $date_max, 'moment' ) || false !== strpos( $date_max, 'Date' ) ) { ?> fpCfg.maxDate = <?php echo esc_html( $date_max ) ?>; <?php } else { ?> fpCfg.maxDate = '<?php echo esc_html( $date_max ) ?>'; <?php } ?> <?php // 初始化禁用规则数组,先加入周末禁用函数 $disable_rules = '[function(date) { return (date.getDay() === 0 || date.getDay() === 6); }]'; // 如果有自定义禁用日期,合并到规则数组 if ( ! empty( $disabled_dates ) ) { ?> var disabled = '<?php echo esc_html( $disabled_dates ) ?>'; var disabledArr = disabled.split(', '); // 合并自定义禁用日期和周末禁用函数 fpCfg.disable = disabledArr.concat(<?php echo $disable_rules; ?>); <?php } else { ?> // 没有自定义禁用日期,直接使用周末禁用函数 fpCfg.disable = <?php echo $disable_rules; ?>; <?php } ?> <?php } ?> jQuery('#<?php echo esc_attr( $slug ) ?>-field').flatpickr(fpCfg); }); </script>
关键修改说明
- Locale配置修改:使用
Object.assign合并原有locale配置和firstDayOfWeek:1,确保不覆盖插件原有语言设置的同时,设置周一为一周的第一天。 - 禁用规则合并:
- 先初始化包含周末禁用函数的规则数组
- 如果插件已有自定义禁用日期,将其与周末禁用函数合并到
fpCfg.disable中 - 如果没有自定义禁用日期,直接将周末禁用函数赋值给
fpCfg.disable
内容的提问来源于stack exchange,提问作者Leon
相关产品推荐
相关产品推荐

