logout_redirect
云策文档标注
概述
logout_redirect 是一个 WordPress 过滤器钩子,用于在用户注销时修改重定向 URL。它允许开发者根据用户角色或其他条件自定义注销后的跳转目标。
关键要点
- logout_redirect 钩子接收三个参数:$redirect_to(重定向 URL)、$requested_redirect_to(请求的重定向 URL)和 $user(WP_User 对象)。
- 通过此钩子,可以基于用户角色(如管理员或订阅者)动态设置不同的重定向 URL。
- 钩子自 WordPress 4.2.0 版本引入,使用时需通过 add_filter 函数注册回调函数。
代码示例
function wpdocs_logout_redirect( $redirect_to, $requested_redirect_to, $user ) {
$user_roles = $user->roles;
$user_has_admin_role = in_array( 'administrator', $user_roles );
if ( $user_has_admin_role ) :
$redirect_to = admin_url();
else:
$redirect_to = home_url();
endif;
return $redirect_to;
}
add_filter( 'logout_redirect', 'wpdocs_logout_redirect', 9999, 3 );注意事项
回调函数必须返回一个字符串类型的重定向 URL;参数顺序和数量需与钩子定义一致,避免错误。
原文内容
Filters the log out redirect URL.
Parameters
Source
$redirect_to = apply_filters( 'logout_redirect', $redirect_to, $requested_redirect_to, $user );
Changelog
| Version | Description |
|---|---|
| 4.2.0 | Introduced. |
Skip to note 3 content
Gabor Lippert
Logout function (that actually works) according user role:
function wpdocs_logout_redirect( $redirect_to, $requested_redirect_to, $user ) { $user_roles = $user->roles; $user_has_admin_role = in_array( 'administrator', $user_roles ); if ( $user_has_admin_role ) : $redirect_to = admin_url(); else: $redirect_to = home_url(); endif; return $redirect_to; } add_filter( 'logout_redirect', 'wpdocs_logout_redirect', 9999, 3 );Skip to note 4 content
mikelast
taken from the article at sourcexpress.com/logout_redirect-filter-hook-introduced-in-wordpress-4-2
This filter comes with 3 parameters,
string $redirect_toThe redirect destination URL,string $requested_redirect_toThe requested redirect destination URL passed as parameter,WP_User $userWP_User object for the user logging out.Using the third param we can target specific redirect locations depending on the user, user role etc.
function se_logout_redirect( $redirect_to, $requested_redirect_to, $user ) { if ( in_array( 'subscriber', $user->roles ) ) { $requested_redirect_to = home_url(); } else { $requested_redirect_to = home_url( '/hello-world' ); } return $requested_redirect_to; } add_filter( 'logout_redirect', 'se_logout_redirect', 10, 3 );