目錄
文章
分類
標籤
AI ai android bettercap Bitbucket C# C++ CDN Certbot ChatGPT Cloudflare Code Runner CPE CPU排程 cron Daphne Django DNS設定 Docker ftp fused-location Git Gmail API GPT hashcat HTML HTTPS hydra kotlin Line Bot Linux location-app Mac macOS MySQL n8n Next.js Nginx nmap NVIDIA OpenAI openssl permissions Python Python Django Python Email Pytorch pytorch PyTorch R2 rclone React Redis Replit SSL streamlit Swap Traefik Ubuntu Unity Vector Vera CPU VM設定 VPS VSCode WebSocket Wi-Fi WordPress Wordpress wordpress-備份 yolo YOLOv9 中位數 代理型 AI 企業市值 伺服器設定 修復 儲存空間 最佳住址 利率 前端 動態生成 即時通訊 卷積神經網路 台股 場景切換 學習 安全性 實作 專案管理 帳號建立 影像分類 後台 性能 惡意軟體 成績查詢 成績管理 技巧 投資 排序 操作系統 效率 教學 本地測試 殖利率 深度學習 清理 滲透測試 演算法 版本控制 物件偵測 神經網路 科技產業 程式解題 程式設計 競程 系統管理 終端機 統計 經濟成長 網域綁定 網站恢復 網頁框架 股票 自動化 自駕車 財務 資料共享 資料庫 資料結構 資訊安全 距離計算 路由 遊戲開發 選單 部署 郵件發送 開發 開發技巧 開發環境 開發者 雲端備份 靜態文件
目錄
目錄
1610 字
8 分鐘
Wordpress 動態選單
步驟 1:連結對應選單
1$menu_items = wp_get_nav_menu_items('首頁選單');這段程式碼使用了 wp_get_nav_menu_items() 函數,傳入選單的名稱 '首頁選單',該名稱對應的是你在 WordPress 後台中設定的選單名稱。
👇🏻 後台長這樣 👇🏻

範例:
假設你在 WordPress 後台建立了一個選單,並命名為「首頁選單」,該選單中包含以下專案:
- Home
- Services
- Web Development
- App Development
- About Us
- Contact
wp_get_nav_menu_items() 會返回這些選單專案作為一個物件陣列,每個專案包含:
ID:選單專案的唯一標識符title:選單專案的標題(如 “Home”, “Services”)url:選單專案的連結menu_item_parent:父選單專案的 ID(若是頂層專案則為 0)
步驟 2:組織選單層次結構
接下來,你需要將這些選單專案按父子關係組織起來,以便生成一個層次結構清晰的選單。這段程式碼的目的是將選單專案分類為父選單和子選單。
1$tree_menu_items = array();2
3foreach ($menu_items as $menu_item) {4 if ($menu_item->menu_item_parent == 0) {5 // 父選單專案6 $tree_menu_items[$menu_item->ID] = $menu_item;7 $tree_menu_items[$menu_item->ID]->children = array(); // 初始化子選單陣列8 } else {9 // 子選單專案,添加到父選單專案的 children 陣列中10 $tree_menu_items[$menu_item->menu_item_parent]->children[] = $menu_item;11 }12}範例:
- 假設 “Services” 是一個父選單專案,它的
menu_item_parent是0。 - “Web Development” 和 “App Development” 是它的子選單專案,它們的
menu_item_parent為 “Services” 的 ID。
程式會將這些專案組織為:
Home:無子選單Services:- 子選單:
Web Development,App Development
- 子選單:
About Us:無子選單Contact:無子選單
步驟 3:生成 HTML 選單
這裡的程式碼將已整理好的選單結構動態地生成 HTML。
1<?php if (isset($tree_menu_items)): ?>2 <?php foreach ($tree_menu_items as $menu_item): ?>3 <li class="menu-item <?php if($hasSubmenu): ?>has-children<?php endif; ?>">4 <a id="menu-item-<?php echo $menu_item->ID; ?>" href="<?php echo $menu_item->url; ?>">5 <?php echo esc_html($menu_item->title); ?>6 <?php if ($hasSubmenu): ?>7 <span class="angle-down-wrap"><i class="fa fa-angle-down" aria-hidden="true"></i></span>8 <?php endif; ?>9 </a>10
11 <?php if ($hasSubmenu): ?>12 <ul class="menu-dropdown-list list-unstyled">13 <?php foreach ($menu_item->children as $child_menu_item): ?>14 <li class="dropdown-list-item">15 <a id="menu-item-<?php echo $child_menu_item->ID; ?>" href="<?php echo $child_menu_item->url; ?>">16 <?php echo esc_html($child_menu_item->title); ?>17 </a>18 </li>19 <?php endforeach; ?>20 </ul>21 <?php endif; ?>22 </li>23 <?php endforeach; ?>24<?php endif; ?>這段程式碼會生成以下的 HTML:
1<ul class="menu-box list-unstyled">2 <li class="menu-item">3 <a id="menu-item-1" href="/home">Home</a>4 </li>5 <li class="menu-item has-children">6 <a id="menu-item-2" href="/services"7 >Services8 <span class="angle-down-wrap"9 ><i class="fa fa-angle-down" aria-hidden="true"></i10 ></span>11 </a>12 <ul class="menu-dropdown-list list-unstyled">13 <li class="dropdown-list-item">14 <a id="menu-item-3" href="/services/web-development">Web Development</a>15 </li>16 <li class="dropdown-list-item">17 <a id="menu-item-4" href="/services/app-development">App Development</a>18 </li>19 </ul>20 </li>21 <li class="menu-item">22 <a id="menu-item-5" href="/about-us">About Us</a>23 </li>24 <li class="menu-item">25 <a id="menu-item-6" href="/contact">Contact</a>26 </li>27</ul>menu-item-2是Services,因為它有子選單,所以會附加has-childrenclass,並顯示一個下拉圖標(<span class="angle-down-wrap">)。- 其子選單(
Web Development和App Development)被放在一個內嵌的<ul class="menu-dropdown-list">中。
步驟 4:顯示和樣式
這段程式碼最終將選單顯示在 <header> 中,並包含基於層次結構的樣式(如子選單的下拉圖標和層次結構的縮排)。
補充 wp_get_nav_menu_items() 得到的結構
在 WordPress 中,wp_get_nav_menu_items() 函數返回一個包含選單專案($menu_items)的陣列。每個選單專案都是一個物件,包含許多屬性,這些屬性描述了選單中的每個專案。以下是 $menu_items 中每個選單專案的內容:
$menu_items 每個專案的結構:
每個選單專案會包含以下常見屬性:
- ID (
$menu_item->ID)- 每個選單專案的唯一識別符。這個值可以用來區分不同的選單專案。
- title (
$menu_item->title)- 選單專案的名稱,這是會顯示在前端的文字。
- url (
$menu_item->url)- 選單專案的連結地址(例如,指向頁面的 URL)。
- menu_item_parent (
$menu_item->menu_item_parent)- 父選單專案的 ID。如果該選單專案是頂層選單,
menu_item_parent會是0;如果它是子選單,menu_item_parent會是其父選單專案的 ID。
- 父選單專案的 ID。如果該選單專案是頂層選單,
- post_type (
$menu_item->post_type)- 指定該選單專案的類型,一般為
nav_menu_item。
- 指定該選單專案的類型,一般為
- object (
$menu_item->object)- 選單專案的目標對象類型,例如
page或category。這表示選單連結指向的是一個頁面還是分類目錄等。
- 選單專案的目標對象類型,例如
- object_id (
$menu_item->object_id)- 目標對象的 ID,例如,如果該選單專案連接到一個頁面,這裡會顯示該頁面的 ID。
- type (
$menu_item->type)- 選單專案的類型。通常為
post_type或taxonomy,指的是該選單專案連結到的對象是否是一個文章類型或分類法。
- 選單專案的類型。通常為
- classes (
$menu_item->classes)- 選單專案所包含的 CSS class。這是一個陣列,通常可用於為選單專案添加自定義樣式。
- target (
$menu_item->target)- 指定連結是否在新視窗或當前視窗打開,這與 HTML 的
target="_blank"類似。
- 指定連結是否在新視窗或當前視窗打開,這與 HTML 的
- attr_title (
$menu_item->attr_title)- 為選單專案提供的
title屬性,用來顯示在鼠標懸停在連結上時的提示文字。
- 為選單專案提供的
- description (
$menu_item->description)- 選單專案的描述,通常不會顯示在前端,但在一些主題中可能會用於輔助說明。
- xfn (
$menu_item->xfn)- 用於指定連結關係(XFN,“XHTML Friends Network”),例如指定連結到該頁面的使用者關係(朋友、合作夥伴等)。
- db_id (
$menu_item->db_id)- 選單專案的資料庫 ID,與
ID相同,用來唯一識別該選單專案。
- 選單專案的資料庫 ID,與
- menu_order (
$menu_item->menu_order)- 選單專案的順序,用來指定該專案在選單中的顯示順序。
範例:$menu_items 的內容範例
假設有一個選單名為「首頁選單」,其中包含以下專案:
- Home(頂層選單)
- Services(頂層選單)
- Web Development(子選單)
- App Development(子選單)
- About Us(頂層選單)
那麼,$menu_items 中的內容可能類似以下結構:
1Array (2 [0] => stdClass Object (3 [ID] => 14 [title] => Home5 [url] => http://example.com/home6 [menu_item_parent] => 07 [post_type] => nav_menu_item8 [object] => page9 [object_id] => 510 [type] => post_type11 [classes] => Array ( )12 [target] =>13 [attr_title] =>14 [description] =>15 [xfn] =>16 [db_id] => 117 [menu_order] => 118 )19 [1] => stdClass Object (20 [ID] => 221 [title] => Services22 [url] => http://example.com/services23 [menu_item_parent] => 024 [post_type] => nav_menu_item25 [object] => page26 [object_id] => 627 [type] => post_type28 [classes] => Array ( )29 [target] =>30 [attr_title] =>31 [description] =>32 [xfn] =>33 [db_id] => 234 [menu_order] => 235 )36 [2] => stdClass Object (37 [ID] => 338 [title] => Web Development39 [url] => http://example.com/web-development40 [menu_item_parent] => 241 [post_type] => nav_menu_item42 [object] => page43 [object_id] => 744 [type] => post_type45 [classes] => Array ( )46 [target] =>47 [attr_title] =>48 [description] =>49 [xfn] =>50 [db_id] => 351 [menu_order] => 352 )53 [3] => stdClass Object (54 [ID] => 455 [title] => App Development56 [url] => http://example.com/app-development57 [menu_item_parent] => 258 [post_type] => nav_menu_item59 [object] => page60 [object_id] => 861 [type] => post_type62 [classes] => Array ( )63 [target] =>64 [attr_title] =>65 [description] =>66 [xfn] =>67 [db_id] => 468 [menu_order] => 469 )70 [4] => stdClass Object (71 [ID] => 572 [title] => About Us73 [url] => http://example.com/about-us74 [menu_item_parent] => 075 [post_type] => nav_menu_item76 [object] => page77 [object_id] => 978 [type] => post_type79 [classes] => Array ( )80 [target] =>81 [attr_title] =>82 [description] =>83 [xfn] =>84 [db_id] => 585 [menu_order] => 586 )87)說明:
Home:是一個頂層選單專案,menu_item_parent為0。Services:也是一個頂層選單專案,menu_item_parent為0,並且有子專案。Web Development:是Services的子選單,menu_item_parent是Services的ID(即2)。App Development:也是Services的子選單,menu_item_parent是Services的ID(即2)。About Us:是一個頂層選單專案,menu_item_parent為0。
部分資訊可能已經過時
目錄
文章
分類
標籤
AI ai android bettercap Bitbucket C# C++ CDN Certbot ChatGPT Cloudflare Code Runner CPE CPU排程 cron Daphne Django DNS設定 Docker ftp fused-location Git Gmail API GPT hashcat HTML HTTPS hydra kotlin Line Bot Linux location-app Mac macOS MySQL n8n Next.js Nginx nmap NVIDIA OpenAI openssl permissions Python Python Django Python Email Pytorch pytorch PyTorch R2 rclone React Redis Replit SSL streamlit Swap Traefik Ubuntu Unity Vector Vera CPU VM設定 VPS VSCode WebSocket Wi-Fi WordPress Wordpress wordpress-備份 yolo YOLOv9 中位數 代理型 AI 企業市值 伺服器設定 修復 儲存空間 最佳住址 利率 前端 動態生成 即時通訊 卷積神經網路 台股 場景切換 學習 安全性 實作 專案管理 帳號建立 影像分類 後台 性能 惡意軟體 成績查詢 成績管理 技巧 投資 排序 操作系統 效率 教學 本地測試 殖利率 深度學習 清理 滲透測試 演算法 版本控制 物件偵測 神經網路 科技產業 程式解題 程式設計 競程 系統管理 終端機 統計 經濟成長 網域綁定 網站恢復 網頁框架 股票 自動化 自駕車 財務 資料共享 資料庫 資料結構 資訊安全 距離計算 路由 遊戲開發 選單 部署 郵件發送 開發 開發技巧 開發環境 開發者 雲端備份 靜態文件
目錄