添加!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; } }
错误原因
- 逻辑运算符使用错误:你用了按位或运算符
|,这是用于二进制数值运算的,条件判断应该用逻辑或||。 - 运算优先级混乱:
&&的优先级高于|,导致条件被解析为(!is_admin() && is_product()) | is_shop() | ...,逻辑完全不符合预期。 - 用户权限判断不准确:
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
相关产品推荐
相关产品推荐

