如何在wordpress中将上一页重定向到上一页


How to redirect on previous to previous page in wordpress

我是wordpress的新手。我目前正在进行注册和登录。我有一个页面限制url让http://xyz.com/abc。此url需要登录/注册。

我需要当用户注册或登录时,它应该重定向到以前的url上。

在登录中,我添加了以下挂钩:

add_filter('login_redirect', 'redirect_previous_page', 10);
function redirect_previous_page(){
    global $user;
    $request = $_SERVER["HTTP_REFERER"];
    if ( in_array( $user->roles[0], array( 'administrator') ) ) {
        return admin_url();
        return $redirect_to;
    } elseif ( in_array( $user->roles[0], array( 'subscriber') ) ) {
        return $request;
        return $redirect_to;
    } 
}

它对我有效,但我不知道如何在成功注册后重定向到这个url。我在登录页面上有注册链接

docs中所述,您可以使用:<?php wp_get_referer() ?>获取用户在注销前或登录后访问的最后一个URL。

if ( (isset($_GET['action']) && $_GET['action'] != 'logout') || (isset($_POST['login_location']) && !empty($_POST['login_location'])) ) {
    add_filter('login_redirect', 'my_login_redirect', 10, 3);
    function my_login_redirect() {
        $location = $_SERVER['HTTP_REFERER'];
        wp_safe_redirect($location);
        exit();
    }
}

这是一种粗略的方法,但您可以创建$_SESSION['your_registration_referrer']并将您的$_SERVER["HTTP_REFERER"]粘贴到那里,注册后重定向到此url。

我需要当用户注册或登录时,它应该重定向到以前的url上。

如果你不需要对某些页面进行永久重定向,你可以在wp_login_url() 中使用重定向

// current page with get parameters
$redirect_after_login = home_url( add_query_arg( null, null ) ); 
// or just
$redirect_after_login = get_the_permalink();
$link_to_login = wp_login_url( $redirect_after_login );

你可以在wp_safe_redirect()中使用这个链接,或者只是在的某个地方回显

以下是登录后重定向的更正代码:

add_filter( 'login_redirect', 'redirect_previous_page', 10, 1 );
function redirect_previous_page( $redirect_to ) {
    // don't change url if current user is admin or if user inside admin page
    if ( is_admin() || current_user_can( 'administrator' ) ) {
        return $redirect_to;
    }
    // also, we can check is current user has some role
    // if (current_user_can( 'subscriber' ))
    
    // change redirect url to previus page for non-administrators
    $redirect_to= wp_get_referer();
    // referer can return 'false' so add fallback
    return $redirect_to ? $redirect_to : home_url();
}

附言:不幸的是,没有人写过这两个";返回";。第二个";返回";不发送,因为无法实现