修改WooCommerce登录短代码实现按用户角色分配登录后跳转路径
代码修改方案
1. 替换原有登录页短代码
将你原本的登录页短代码替换为以下版本,移除固定跳转配置,交由后续角色判断逻辑统一处理跳转:
/** * @snippet WooCommerce 用户登录短代码 */ add_shortcode( 'wc_login_form', 'bbloomer_separate' ); function bbloomer_separate() { if ( is_admin() ) return; ob_start(); woocommerce_login_form(); return ob_get_clean(); }
2. 新增角色区分跳转逻辑
将以下代码添加到主题functions.php文件或者自定义代码片段插件中,实现不同角色登录后跳转不同页面:
add_filter( 'woocommerce_login_redirect', 'custom_role_based_login_redirect', 10, 2 ); function custom_role_based_login_redirect( $redirect_url, $user ) { // 校验用户对象是否有效 if ( !is_a( $user, 'WP_User' ) ) { return $redirect_url; } // 管理员角色跳转至后台仪表盘 if ( in_array( 'administrator', $user->roles ) ) { return admin_url(); } // 客户角色及其他用户跳转至我的账户页面 return wc_get_page_permalink( 'myaccount' ); }
可选:修复wp-admin默认登录页被强制跳转问题
如果你配置了访问wp-admin强制跳转至自建登录页的规则,可以添加以下逻辑避免管理员登录流程异常:
add_action( 'template_redirect', 'fix_admin_login_redirect_issue' ); function fix_admin_login_redirect_issue() { global $pagenow; // 仅非登录状态、非登录提交请求时执行跳转规则 if ( $pagenow === 'wp-login.php' && !is_user_logged_in() && !isset( $_POST['wp-submit'] ) ) { // 排除找回密码、重置密码等系统默认操作场景 $allowed_core_actions = [ 'lostpassword', 'retrievepassword', 'resetpass', 'rp', 'register' ]; if ( !isset( $_GET['action'] ) || !in_array( $_GET['action'], $allowed_core_actions ) ) { wp_redirect( home_url( '/login/' ) ); exit; } } }
内容的提问来源于stack exchange,提问作者Emmanuel Kuebu
相关产品推荐
相关产品推荐

