在 WordPress 網站的導覽列中,我希望使用者未登入時顯示「登入」,登入後則自動變成**「登出」**。
以下記錄整個設定過程,方便日後備查。
🎯 實現目標
- 前端導覽選單中,根據登入狀態自動顯示「登入」或「登出」
- 登入後可自動導回指定頁面
- 支援 Ultimate Member 外掛的自訂登入頁
🧱 方法一:在選單中加入佔位項目
Step 1:建立選單項目
到 外觀 → 選單
新增一個自訂連結:
- URL:
#loginout - 連結文字:
登入/登出(隨便填,稍後會被覆蓋)
儲存選單。
Step 2:加入下列程式碼
將以下程式碼貼到主題的 functions.php 或用「Code Snippets」外掛執行。
add_filter('wp_nav_menu_objects', function($items, $args){
foreach ($items as &$item) {
if ($item->url === '#loginout') {
if ( is_user_logged_in() ) {
// ✅ 已登入:顯示「登出」
// 若想使用 Ultimate Member 的登出機制,可改為 home_url('/?um_action=logout')
$item->title = '登出';
$item->url = home_url('/?um_action=logout');
} else {
// ✅ 未登入:顯示「登入」
// 改成你 Ultimate Member 登入頁的實際網址
$um_login_page = site_url('/login/');
$item->title = '登入';
$item->url = $um_login_page;
}
}
}
return $items;
}, 10, 2);
🧩 如何找到 Ultimate Member 的登入頁 URL
- 後台 → Ultimate Member → 設定
- 點選「頁面 (Pages)」標籤
- 找到「登入頁」對應的頁面,複製固定網址(例如
/login/或/member-login/) - 將網址填入程式中:
$um_login_page = site_url('/login/');
💡 其他建議
- 若網站有快取外掛或 CDN,記得設定「已登入使用者不快取」,否則登入狀態不會即時更新。
- 若要指定登出後導向頁,可改寫:
$item->url = wp_logout_url( home_url('/') );或:$item->url = home_url('/?um_action=logout');依照你使用 WordPress 或 Ultimate Member 的登出邏輯決定。
🚀 結論
這個方法簡單又穩定,不需額外外掛即可實現:
- 使用者登入前顯示「登入」
- 使用者登入後自動變成「登出」
- 完全支援 Ultimate Member 登入/登出流程
📌 延伸參考