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

WooCommerce如何实现跨天时间段禁用货到付款(COD)支付方式

问题原因

你原有代码的时间判断逻辑存在矛盾:date('H')返回0~23范围的整数值,不可能同时满足>=23和<=8两个条件,因此无法识别跨零点的时间段。
跨天时段的判断不能用「同时满足两个时间边界」的且逻辑,需要拆为两个独立时段做或逻辑判断。

修正方案

将时间判断逻辑调整为:只要当前时间处于当日23点及以后,或者处于次日8点以前,就属于需要禁用COD的时段。
另外不建议在过滤器回调中反复修改全局时区设置,容易干扰站点其他时间相关功能的运行,推荐用DateTime类单独指定时区获取时间,逻辑更隔离更稳定。

修正后的完整代码如下:

add_filter( 'woocommerce_available_payment_gateways', 'payment_gateways_based_on_hour', 1 );
function payment_gateways_based_on_hour( $gateways ) {
    // 指定对应时区获取当前时间,不修改全局时区
    $now = new DateTime( 'now', new DateTimeZone( 'America/Lima' ) );
    $current_hour = (int)$now->format( 'G' ); // 返回0~23不带前导零的小时数

    // 跨天时段判断:23点及以后 或 8点以前
    if ( isset( $gateways['cod'] ) && ( $current_hour >= 23 || $current_hour < 8 ) ) {
        unset( $gateways['cod'] );
    }
    return $gateways;
}
调整说明
  • 时间边界可按需修改:如果需要8点整也保持禁用,将判断里的$current_hour < 8改为$current_hour <= 8即可
  • 如果你的站点已经在WordPress后台设置好了正确的时区,可以删掉DateTimeZone传参部分,直接用new DateTime()获取当前时间,和全站时间逻辑保持一致
  • 测试时可以临时给$current_hour赋值固定值(比如赋值23、7、9这类边界值)快速验证逻辑是否生效,不需要等到对应时段测试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 09:48:27