如何修改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
相关产品推荐
相关产品推荐

