Skip to content

Nuface Blog

隨意隨手記 Casual Notes

Menu
  • Home
  • About
  • Services
  • Blog
  • Contact
  • Privacy Policy
  • Login
Menu

【WordPress 筆記】前端選單動態切換登入/登出(支援 Ultimate Member 外掛)

Posted on 2025-11-042025-11-04 by Rico

在 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

  1. 後台 → Ultimate Member → 設定
  2. 點選「頁面 (Pages)」標籤
  3. 找到「登入頁」對應的頁面,複製固定網址(例如 /login/ 或 /member-login/)
  4. 將網址填入程式中: $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 登入/登出流程

📌 延伸參考

  • Ultimate Member 官方文件
  • WordPress Codex: wp_nav_menu_objects

Recent Posts

  • Postfix + Let’s Encrypt + BIND9 + DANE Fully Automated TLSA Update Guide
  • Postfix + Let’s Encrypt + BIND9 + DANE TLSA 指紋自動更新完整教學
  • Deploying DANE in Postfix
  • 如何在 Postfix 中部署 DANE
  • DANE: DNSSEC-Based TLS Protection

Recent Comments

  1. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on High Availability Architecture, Failover, GeoDNS, Monitoring, and Email Abuse Automation (SOAR)
  2. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on MariaDB + PostfixAdmin: The Core of Virtual Domain & Mailbox Management
  3. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on Daily Operations, Monitoring, and Performance Tuning for an Enterprise Mail System
  4. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on Final Chapter: Complete Troubleshooting Guide & Frequently Asked Questions (FAQ)
  5. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on Network Architecture, DNS Configuration, TLS Design, and Postfix/Dovecot SNI Explained

Archives

  • December 2025
  • November 2025
  • October 2025

Categories

  • AI
  • Apache
  • Cybersecurity
  • Database
  • DNS
  • Docker
  • Fail2Ban
  • FileSystem
  • Firewall
  • Linux
  • LLM
  • Mail
  • N8N
  • OpenLdap
  • OPNsense
  • PHP
  • QoS
  • Samba
  • Switch
  • Virtualization
  • VPN
  • WordPress
© 2025 Nuface Blog | Powered by Superbs Personal Blog theme