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

WoodMart主题下优化仅登录用户可加购商品的代码问题

优化方案:仅登录用户可添加商品至购物车

原有代码的问题分析

  1. 逻辑方向错误:add_to_cart_redirect是加购完成后的跳转钩子,原有代码里未登录用户的加购请求可能已经执行,才会跳转至登录页,无法真正阻止未登录用户加购。
  2. 硬编码地址:跳转地址写死为本地测试地址,未适配你的实际站点https://laundry-line.com。
  3. 冗余操作:登录用户场景下手动调用WC()->cart->add_to_cart()属于多余操作,WooCommerce本身会处理正常的加购流程。

优化后的代码实现

结合WooCommerce的前置验证钩子和跳转钩子,实现精准控制:

// 加购前拦截验证:未登录用户直接阻止加购并提示
function custom_restrict_add_to_cart() {
    if ( !is_user_logged_in() && !is_admin() ) {
        wc_add_notice( '请先登录账号,才能将商品加入购物车', 'error' );
        return false;
    }
    return true;
}
add_filter( 'woocommerce_add_to_cart_validation', 'custom_restrict_add_to_cart', 10, 3 );

// 未登录用户点击加购后跳转至登录页
function custom_add_to_cart_redirect( $url ) {
    if ( !is_user_logged_in() && !is_admin() ) {
        // 自动获取站点配置的登录页地址,适配你的站点
        $url = wc_get_page_permalink( 'myaccount' );
    }
    return $url;
}
add_filter( 'add_to_cart_redirect', 'custom_add_to_cart_redirect' );

代码说明

  • woocommerce_add_to_cart_validation:在商品加入购物车之前触发验证,未登录时返回false直接终止加购动作,同时通过wc_add_notice给出明确提示。
  • wc_get_page_permalink('myaccount'):自动读取你站点后台配置的「我的账户」页面地址,无需硬编码,完美适配https://laundry-line.com。
  • 兼容WoodMart主题:主题的AJAX加购按钮也能被上述代码拦截,错误提示会正常显示在页面上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 15:17:08