WooCommerce登录后基于用户元数据自定义跳转功能异常排查
问题原因分析
woocommerce_login_redirect过滤器的回调函数缺少必要的$user参数,登录触发的瞬间get_current_user_id()可能无法正确获取刚完成登录的用户ID,导致用户元数据查询异常,逻辑判断失效。get_permalink()传入的页面ID为字符串格式'123',该函数要求传入整数类型的页面ID,会导致指定跳转页的链接获取失败。empty()对全角空格、换行等空白字符判断不严谨,若用户元数据仅存储空白内容会被误判为非空。
修正后可运行代码
add_filter('woocommerce_login_redirect', 'ac_my_acct_login_redirect', 10, 2); function ac_my_acct_login_redirect($redirect_to, $user) { // 过滤登录失败的无效用户对象 if (is_wp_error($user)) { return $redirect_to; } // 直接通过回调传入的用户对象获取ID $father = get_user_meta( $user->ID, 'fath_name', true ); // 传入整数类型的目标页面ID $update_pro = esc_url(get_permalink(123)); $my_acct = esc_url(get_permalink( wc_get_page_id( 'myaccount' ) )); // 先去除首尾空白字符再判断,避免空白内容误判 if(empty(trim($father))){ $redirect_to = $update_pro; } else { $redirect_to = $my_acct; } return $redirect_to; }
注意事项
- 请确认ID为123的页面对应站点内真实存在、状态为已发布的公开页面,否则跳转链接会默认 fallback 到站点首页。
- 若不需要过滤空白内容,可将判断条件改回
empty($father)即可。
内容的提问来源于stack exchange,提问作者KBD
相关产品推荐
相关产品推荐

