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

基于Advanced Custom Field+Advanced Forms,如何动态禁用日期选择器前两周?

嘿,我刚好有过用ACF + Advanced Forms做类似日期限制的经验,给你分享个靠谱的实现方案,分前端限制和后端验证两步来,确保万无一失:

1. 用ACF过滤器设置日期选择器的最小日期(前端限制)

ACF的日期选择器基于jQuery UI,我们可以通过acf/fields/date_picker/settings过滤器直接修改它的minDate参数,这样用户在选择日期时就看不到前两周的选项了,从源头限制无效选择。

代码示例:

add_filter('acf/fields/date_picker/settings', 'restrict_date_picker_to_two_weeks_later', 10, 3);
function restrict_date_picker_to_two_weeks_later($settings, $field, $post_id) {
    // 替换成你自己的日期字段键,避免影响其他日期字段
    $target_field_key = 'field_123456789abc';
    if ($field['key'] !== $target_field_key) {
        return $settings;
    }

    // 用DateTime类计算当前时间后推14天的日期,比strtotime更严谨(适配跨月/跨年场景)
    $current_date = new DateTime();
    $current_date->add(new DateInterval('P14D'));
    $min_valid_date = $current_date->format('Y-m-d');

    // 给日期选择器设置最小可选日期
    $settings['minDate'] = $min_valid_date;

    return $settings;
}

2. 后端验证防止手动输入绕过限制

虽然前端已经限制了选择,但用户还是可能通过浏览器控制台修改DOM或者手动输入不符合要求的日期,所以必须加后端验证兜底。用ACF的acf/validate_value钩子来做:

add_filter('acf/validate_value', 'validate_date_is_two_weeks_later', 10, 4);
function validate_date_is_two_weeks_later($valid, $value, $field, $input) {
    $target_field_key = 'field_123456789abc';
    if ($field['key'] !== $target_field_key) {
        return $valid;
    }

    // 先验证日期格式是否正确
    $selected_date = DateTime::createFromFormat('Y-m-d', $value);
    if (!$selected_date) {
        return '请选择有效的日期(格式:YYYY-MM-DD)';
    }

    // 计算最小允许日期
    $min_date = new DateTime();
    $min_date->add(new DateInterval('P14D'));

    // 比较选中日期是否小于最小允许日期
    if ($selected_date < $min_date) {
        $valid = '抱歉,只能选择两周后的日期,请重新选择';
    }

    return $valid;
}

额外注意事项

  • 时区适配:如果你的网站设置了特定时区,记得在创建DateTime对象时指定,避免服务器时区和用户时区不一致导致的日期偏差:
    $current_date = new DateTime('now', new DateTimeZone('Asia/Shanghai'));
    
  • 字段键替换:一定要把代码里的field_123456789abc换成你实际的日期字段键,你可以在ACF字段编辑页面的「字段」选项卡下找到它。

这个方案完全基于ACF和Advanced Forms的原生钩子,不需要额外引入JS或插件,每次加载表单时都会重新计算两周后的日期,完全是动态的,刚好匹配你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:08:30