WordPress联盟站点登出跳转:如何传递当前用户ID至推荐链接
WordPress联盟站点登出跳转传参问题解决
问题描述
运营WordPress联盟站点时,需要实现:已登录的联盟成员点击按钮后,自动登出(跳过确认页),并跳转至带自身用户ID作为推荐参数的联盟注册页面(因登录用户无法访问注册表单,必须先登出)。
当前已实现登出跳转功能,但无法正确传递用户ID,跳转URL显示为https://www.website.co/join-now/?ref=%20wp_get_current_user,未获取到真实用户ID。
原代码如下:
add_action('check_admin_referer', 'logout_without_confirm', 10, 2); function logout_without_confirm($action, $result) { $user = wp_get_current_user(); if ($action == "log-out" && !isset($_GET['_wpnonce'])) { $redirect_to = isset($_REQUEST['redirect_to']) ? $_REQUEST['redirect_to'] : '/join-now/?ref=echo".$user->user_login."'; $location = str_replace('&', '&', wp_logout_url($redirect_to)); header("Location: $location"); die; } }
问题原因
原代码中$redirect_to的默认值错误地将PHP代码写入字符串中,没有正确解析$user->user_login变量,导致直接输出了echo".$user->user_login."文本,而非实际用户信息。
修正后的代码
add_action('check_admin_referer', 'logout_without_confirm', 10, 2); function logout_without_confirm($action, $result) { $user = wp_get_current_user(); // 确认当前用户已登录 if (!$user->ID) { return; } if ($action == "log-out" && !isset($_GET['_wpnonce'])) { // 拼接带用户ID的跳转URL,如需用user_login可替换为$user->user_login $default_redirect = '/join-now/?ref=' . $user->ID; $redirect_to = isset($_REQUEST['redirect_to']) ? $_REQUEST['redirect_to'] : $default_redirect; // 生成正确的登出跳转URL $location = wp_logout_url($redirect_to); // 修复HTML实体问题 $location = str_replace('&', '&', $location); header("Location: $location"); exit; } }
关键修改说明
- 正确获取用户ID:通过
$user->ID获取当前登录用户的ID,若需要传递用户登录名可替换为$user->user_login。 - 变量字符串拼接:使用字符串连接符
.将用户ID插入跳转URL中,确保变量被正确解析。 - 增加登录判断:添加
!$user->ID的判断,避免未登录时执行逻辑。 - 规范终止语句:用
exit替代die,更符合WordPress开发规范。
内容的提问来源于stack exchange,提问作者etim george
相关产品推荐
相关产品推荐

