You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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>

关键修改说明

  1. Locale配置修改:使用Object.assign合并原有locale配置和firstDayOfWeek:1,确保不覆盖插件原有语言设置的同时,设置周一为一周的第一天。
  2. 禁用规则合并:
    • 先初始化包含周末禁用函数的规则数组
    • 如果插件已有自定义禁用日期,将其与周末禁用函数合并到fpCfg.disable中
    • 如果没有自定义禁用日期,直接将周末禁用函数赋值给fpCfg.disable

内容的提问来源于stack exchange,提问作者Leon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 06:00:10