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

WooCommerce周末禁用加入购物车按钮代码无效,求解决

问题分析与修复方案

核心问题

  1. 触发逻辑未生效:你把add_action('wp', 'cross_remove_add_to_cart_product_categories');放在了widget函数里,但这个函数只有WordPress渲染Widget时才会执行,导致移除加购按钮的代码根本没被触发。
  2. 时区冲突风险:直接用date_default_timezone_set会覆盖WordPress后台设置的时区,应该用WP内置函数获取正确日期时间。
  3. 覆盖范围不全:当前代码只限制了「Regular Menu Items」分类页面,用户仍能通过单个产品页、购物车/结账页完成下单,需要补充这些场景的限制。

修复后的代码

// 判断店铺是否营业
function is_shop_open() {
    // 用WordPress后台时区获取当前星期几(1=周一,7=周日)
    $current_day = current_time('w');
    $days_opened = array(1, 2, 3, 4, 5); // 周一至周五
    
    return in_array($current_day, $days_opened, true);
}

// 移除加购按钮并限制下单
function restrict_weekend_orders() {
    if (!is_shop_open()) {
        // 移除分类页的加购按钮
        remove_action('woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart');
        // 移除单个产品页的加购按钮
        remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30);
        
        // 限制购物车和结账页
        add_action('woocommerce_check_cart_items', 'block_weekend_checkout');
        add_action('woocommerce_checkout_process', 'block_weekend_checkout');
    }
}
// 用woocommerce_init钩子触发,确保在WooCommerce初始化后执行
add_action('woocommerce_init', 'restrict_weekend_orders');

// 阻止周末结账并提示信息
function block_weekend_checkout() {
    if (!is_shop_open()) {
        wc_add_notice('我们仅在工作日接受订单,请于周一至周五下单。', 'error');
    }
}

代码说明

  • 时区处理:current_time('w')会自动匹配WordPress后台设置的时区,避免手动设置时区导致的偏差。
  • 触发时机:改用woocommerce_init钩子触发限制逻辑,确保在WooCommerce加载后立即执行,不会错过任何页面的处理。
  • 全面限制:
    • 同时移除分类页和单个产品页的加购按钮,从源头阻止下单;
    • 在购物车和结账页添加验证,即使用户通过特殊路径进入结账流程,也会被拦截并收到提示。

验证步骤

  1. 替换原有代码为修复后的版本,保存并激活Snippets;
  2. 把系统时间切换到周末测试:
    • 查看「Regular Menu Items」分类页和单个产品页,确认加购按钮已消失;
    • 尝试强制添加商品到购物车后进入结账页,会看到错误提示,无法完成下单。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:09:21