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

添加!is_admin()后WordPress WooCommerce页面重定向失效排查

WooCommerce页面非管理员重定向失效问题排查

你想要实现的功能是:让所有非管理员用户访问WooCommerce页面时自动重定向到首页。原代码对所有用户生效,但添加!is_admin()后功能失效,问题出在逻辑运算符的优先级和类型错误,以及用户权限判断的准确性上。

原有效代码

add_action( 'wp', 'ts_redirect_product_pages', 99 );
 
function ts_redirect_product_pages() {
     
    if ( is_product() | is_shop() | is_product_category() | is_product_tag() | is_cart() | is_checkout() | is_account_page() ) {
        wp_safe_redirect( home_url() );
        exit;
    } 
}

修改后失效的代码

add_action( 'wp', 'ts_redirect_product_pages', 99 );
 
function ts_redirect_product_pages() {
     
    if ( !is_admin() && is_product() | is_shop() | is_product_category() | is_product_tag() | is_cart() | is_checkout() | is_account_page() ) {
        wp_safe_redirect( home_url() );
        exit;
    } 
}

错误原因

  1. 逻辑运算符使用错误:你用了按位或运算符|,这是用于二进制数值运算的,条件判断应该用逻辑或||。
  2. 运算优先级混乱:&&的优先级高于|,导致条件被解析为(!is_admin() && is_product()) | is_shop() | ...,逻辑完全不符合预期。
  3. 用户权限判断不准确:is_admin()是判断当前是否在WordPress后台管理界面,而不是判断用户是否为管理员。管理员在前台访问WooCommerce页面时,is_admin()会返回false,导致管理员也被错误重定向。

修正后的代码

add_action( 'wp', 'ts_redirect_product_pages', 99 );
 
function ts_redirect_product_pages() {
    // 判断当前用户不是管理员,且访问的是WooCommerce相关页面
    if ( !current_user_can( 'manage_options' ) && ( is_product() || is_shop() || is_product_category() || is_product_tag() || is_cart() || is_checkout() || is_account_page() ) ) {
        wp_safe_redirect( home_url() );
        exit;
    } 
}

修正说明

  • 用current_user_can('manage_options')判断用户权限:这是判断用户是否拥有管理员权限的标准方式,只有具备manage_options权限的用户(通常是管理员)才不会被重定向。
  • 给WooCommerce页面判断条件加括号:确保所有页面判断先完成逻辑或运算,再和用户权限条件进行逻辑与运算。
  • 替换|为||:使用正确的逻辑或运算符,保证条件判断的准确性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:40:36