如果未指定其他重定向,则将用户重定向到主页

时间:2018-06-28 作者:Philipp K

基本上,我想写一些代码来决定是将用户重定向到网站的主页还是用户登录之前来自的页面。

我有一段代码,如果指定了重定向回该页面,它可以成功地将用户重定向到他们来自的页面。但是,如果没有特定的重定向请求,则会将用户发送到后端管理面板。

<?php
function login_redirect( $redirect_to, $request, $user ) {

    if (isset($user->roles) && is_array($user->roles)) {

        if (in_array(\'subscriber\', $user->roles)) {

            if($request){
                $redirect_to = $request;
            } else {
                $redirect_to =  home_url();
            }

        }
    }

    return $redirect_to;
}

add_filter( \'login_redirect\', \'login_redirect\', 10, 3 );
我如何调整它,让用户看不到管理面板?

1 个回复
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成

好的,让我们更深入地了解一下,这个钩子是如何在WP中使用的。。。它在wp-login.php (on line 901):

$requested_redirect_to = isset( $_REQUEST[\'redirect_to\'] ) ? $_REQUEST[\'redirect_to\'] : \'\';
// ...
$redirect_to = apply_filters( \'login_redirect\', $redirect_to, $requested_redirect_to, $user );
那么,您调用的变量$request (这有点误导,应该称为$requested_redirect_to) 应该为空,因此您的代码应该可以正常工作。但是总有一个but;)

如果你有wp-login.php 仔细看一下登录表单,就会发现有一个隐藏的输入,名为redirect_to 其中包含的URLwp-admin. 所以这个条件if($request){ 永远是真的。

您可以通过以下方式进行修复:

function login_redirect( $redirect_to, $requested_redirect_to, $user ) {
    if ( isset($user->roles) && is_array($user->roles) ) {

        if ( in_array(\'subscriber\', $user->roles) ) {

            if ( $requested_redirect_to && admin_url() != $requested_redirect_to ) {
                $redirect_to = $requested_redirect_to;
            } else {
                $redirect_to =  home_url();
            }

        }
    }
    return $redirect_to;
}
add_filter( \'login_redirect\', \'login_redirect\', 10, 3 );

结束

相关推荐

redirect if shortcode exists

WordPress初学者。我试图检查用户请求的页面中是否存在短代码,如果存在,则在用户未登录时重定向。function redirect_to_home() { if (has_shortcode(get_the_content(), \'shortcode\')) { if(!is_admin() && !is_user_logged_in()) { //redirect exit(); }