0

我有一个向菜单添加登录名的脚本。但是登录后它没有正确重定向。我想在登录后重定向到登录页面之前的页面。

function sv_get_logout_redirect_url() {
    $badurls = array('submit-form', 'dashboard', 'profile', 'guidelines');
    $current_url = get_permalink();
    $isgood = true;
    foreach ($badurls as $bad) {
        $pos = strpos($current_url,$bad);
        if (! $pos === false) {
            $isgood = false;
            break;  // no need to check any more "bads"
        }
    }
    if ($isgood) {
        return wp_logout_url(get_permalink());
    } else {
        return wp_logout_url(home_url());
    }
}

add_filter( 'wp_nav_menu_items', 'sv_add_usermenu', 10, 2 );

function sv_add_usermenu( $items, $args ) {
    global $current_user;

    if (is_user_logged_in() && $args->theme_location == 'primary-menu') {
        // menu items for logged in user
        $guidelines_url = site_url() . '/guidelines/';
        $dashboard_url = site_url() . '/dashboard/' . $current_user->user_nicename;
        $profile_url = site_url() . '/profile/' . $current_user->user_nicename; 

        //  http://fortawesome.github.com/Font-Awesome/
        //  some fontawesome names icon-arrow-down, icon-chevron-down, icon-caret-down
        $items .= "<li class='menu-item'><a href='#'>$current_user->display_name <span class='icon-caret-down'> </span> </a>";
        //$items .= "<li class='menu-item'><a href='#'>$current_user->display_name</a>";
        $items .= "<ul>";
        $items .= "<li class='sub-menu'><a href='$guidelines_url'>Usage Guidelines</a></li>";
        $items .= "<li class='sub-menu'><a href='$dashboard_url'>My Dashboard</a></li>";
        $items .= "<li class='sub-menu'><a href='$profile_url'>My Profile</a></li>";
        $items .= "<li class='sub-menu'><a href='" . sv_get_logout_redirect_url()  . "'>Uitloggen</a></li>";
        $items .= "</ul>";
        $items .= "</li>";
    } elseif (!is_user_logged_in() && $args->theme_location == 'primary-menu') {
        //menu items for NOT logged in user
        //$login_url = site_url('/a-page-name/');       // get login url and redirect to a specific page
        //$login_url = wp_login_url( home_url() );      // get login url and redirect to home page
        $login_url = wp_login_url( get_permalink() );   // get login url and redirect to current page
        //the contents of <a href""  must be a url
        $items .= "<li class='sub-menu'> <a href='$login_url' class='simplemodal-login'>Log In</a></li>";
    }
    return $items;
}

我希望有一个人可以帮助我!谢谢。

4

1 回答 1

0

因此,如果我对您的理解正确,则可能有人在主页上,然后从菜单中单击“登录”,然后出现登录页面。如果在某个时候用户决定再次注销,他应该返回到主页(因为这是他在进入登录页面之前所在的页面)。

如果是这种情况,您应该查看PHP 中$_SERVER$_SESSION变量。更准确地说,看一下$_SEVER['HTTP_REFERER']保存将用户代理指向当前页面的页面地址(如果有)的变量。

官方文档位于:http: //php.net/manual/en/reserved.variables.server.php

因为您需要此 url 较长时间,您应该将其存储在会话中,您可以在用户想要注销时调用它。

不过,这个解决方案有一个小的缺点,如果您的 WordPress 站点的管理员在用户尝试登录之前更改了用户所在页面的永久链接,会发生什么情况?那么您存储的 url$_SEVER['HTTP_REFERER']不正确,将导致 404 页面。但是发生这种情况的可能性非常小,所以希望这个解决方案可以帮助您解决问题。

于 2013-08-28T12:15:28.420 回答