2013-08-28 152 views
0

我有一個腳本,添加一個登錄菜單。但登錄後它不能正確重定向。我想在登錄頁面之前登錄到頁面後重定向。WordPress的重定向登錄/註銷

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; 
} 

我希望有人能幫助我!謝謝。

回答

0

所以,如果我正確地理解了你,有人可能會在主頁上,然後從菜單中單擊「登錄」,登錄頁面出現。如果在某個時候用戶決定再次註銷,他應該返回到主頁(因爲這是他在登錄頁面之前所在的頁面)。

如果是這種情況,您應該查看PHP中的$_SERVER$_SESSION變量。爲了更精確一點,請查看$_SEVER['HTTP_REFERER']變量,該變量保存將用戶代理引用到當前頁面的頁面地址(如果有)。

的官方文檔位於:http://php.net/manual/en/reserved.variables.server.php

因爲你需要這個網址的時候你應該將其存儲裏面,你可以在當用戶想要的註銷呼叫會話較長的時間。

雖然這個解決方案有一個小缺點,但是如果你的WordPress站點的管理員在他嘗試登錄之前更改了用戶是一個頁面的永久鏈接,會發生什麼?那麼你從$_SEVER['HTTP_REFERER']存儲的網址不正確,將導致404頁面。但是發生這種情況的可能性非常小,所以希望這個解決方案能幫助你解決問題。