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

如何修改PHP代码实现WooCommerce店铺按指定日期时段关闭?

修改WooCommerce店铺营业时间的代码方案

问题修正与说明

你原来的代码逻辑存在反向问题(当前逻辑是周一、周日允许下单,和你说的「周一和周日全天关闭」不符),下面我会先修正这个问题,同时添加自定义时段的功能,比如实现周五仅00:00-14:00营业的需求。

修改后的完整代码

直接替换你原来的is_shop_open函数即可,其他代码保持不变:

// 自定义判断店铺是否营业的函数
function is_shop_open() {
    // 设置时区(保持和你原来一致)
    date_default_timezone_set('Europe/Paris');
    
    $now = current_time('timestamp'); // 获取当前时间戳
    $today = date('N'); // 获取当前星期几:1=周一,2=周二,...,7=周日

    // 定义每天的营业时段,格式:[星期几 => [[开始小时, 开始分钟], [结束小时, 结束分钟]]]
    // 如果某天没有定义,默认全天关闭;如果某天有多个营业时段,可继续添加数组项
    $business_hours = array(
        // 周二到周四:全天营业(00:00-24:00)
        2 => array(array(0, 0), array(24, 0)),
        3 => array(array(0, 0), array(24, 0)),
        4 => array(array(0, 0), array(24, 0)),
        // 周五:仅00:00-14:00营业
        5 => array(array(0, 0), array(14, 0)),
        // 周六:全天营业(可根据需要修改)
        6 => array(array(0, 0), array(24, 0)),
        // 周一、周日:不设置,默认关闭
    );

    // 如果当天不在营业日期列表里,直接返回关闭状态
    if (!isset($business_hours[$today])) {
        return false;
    }

    // 检查当前时间是否在当天的任意一个营业时段内
    foreach ($business_hours[$today] as $index => $hours) {
        // 成对读取时段的开始/结束时间
        if ($index % 2 === 0) {
            list($start_hour, $start_minute) = $hours;
            list($end_hour, $end_minute) = $business_hours[$today][$index+1];
            
            $start_time = mktime($start_hour, $start_minute, 0, date('m'), date('d'), date('Y'));
            $end_time = mktime($end_hour, $end_minute, 0, date('m'), date('d'), date('Y'));
            
            if ($now >= $start_time && $now <= $end_time) {
                return true;
            }
        }
    }

    // 不在任何营业时段内,返回关闭状态
    return false;
}

自定义修改指南

  • 星期几对应规则:1=周一,2=周二,3=周三,4=周四,5=周五,6=周六,7=周日
  • 修改单时段:比如要让周六改成10:00-18:00营业,就把6 => array(array(0, 0), array(24, 0))改成6 => array(array(10, 0), array(18, 0))
  • 添加多时段:如果某天有两个营业时段(比如10:00-12:00和14:00-18:00),可以写成5 => array(array(10,0), array(12,0), array(14,0), array(18,0))
  • 设置全天关闭:直接不在$business_hours数组中写入对应的星期几即可

其他说明

剩下的代码(禁用购买、提示信息等)不需要修改,保持你原来的版本即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 22:45:42