基于用户自定义元数据实现WordPress/WooCommerce登录后重定向
WordPress 用户登录后基于自定义元数据的重定向方案
既然你已经能正常获取用户的acCustomerName自定义元数据,那实现登录后的定向跳转就非常直接了。我们可以借助WordPress内置的login_redirect钩子来完成这个需求,这个钩子就是专门用来修改用户登录后的跳转目标的。
下面是完整的实现代码,你可以把它添加到主题的functions.php文件中,或者放到自定义插件里(更推荐后者,避免主题更新丢失代码):
function custom_login_redirect($redirect_to, $request, $user) { // 确保用户已登录且是有效用户 if (is_a($user, 'WP_User')) { // 获取用户的自定义元数据 acCustomerName $customer_name = get_user_meta($user->ID, 'acCustomerName', true); // 根据元数据值设置对应的重定向URL if ($customer_name === 'foo') { return home_url('/foo/'); // 跳转到foo页面 } elseif ($customer_name === 'bar') { return home_url('/bar/'); // 跳转到bar页面 } else { // 如果元数据不存在或值不匹配,返回默认跳转地址(这里是仪表盘) return admin_url(); } } // 若用户未登录,返回原默认地址 return $redirect_to; } add_filter('login_redirect', 'custom_login_redirect', 10, 3);
代码关键说明:
login_redirect钩子接收三个参数:$redirect_to(原默认跳转地址)、$request(登录前的请求地址)、$user(当前登录的用户对象)get_user_meta的第三个参数设为true,确保返回的是字符串而不是数组,方便直接做等值判断- 我们先判断用户是否是有效的
WP_User对象,避免未登录状态下的错误 - 默认情况可以根据你的需求修改,比如改成首页
home_url()或者其他页面
额外注意事项:
- 如果你设置的
foo或bar页面需要用户登录才能访问,记得避免无限重定向:可以在条件判断里加一个检查,比如当前请求的URL不是目标页面时才跳转 - 测试前建议先备份
functions.php文件,避免语法错误导致网站无法访问 - 如果你的自定义元数据是数组类型,记得调整
get_user_meta的第三个参数或者修改判断逻辑
内容的提问来源于stack exchange,提问作者hrdy
相关产品推荐
相关产品推荐

