問題描述

我的 wordpress(3.5) 現在有 3 個選單。

  • 主選單 (預設來自 wp)

  • 頁尾選單 (預設來自 wp)

  • 測試選單

現在我將測試選單保持預設。

WordPress 在哪裡存放這個東西?

我想知道 wordpress 儲存關於在前端顯示的當前選單的位置。

最佳解決方案

選單本身是 WP 中的分類法。這意味著您可以透過執行以下查詢來查詢 wp_terms 表中的所有選單:

SELECT *
  FROM wp_terms AS t
  LEFT JOIN wp_term_taxonomy AS tt ON tt.term_id = t.term_id
 WHERE tt.taxonomy = 'nav_menu';

選單項是 WP 中的自定義帖子型別。它們儲存在 wp_posts 表中。您可以使用此查詢找到所有這些:

SELECT *
  FROM wp_posts
 WHERE post_type = 'nav_menu_item';

選單和選單項之間的關係儲存在 wp_term_relationships 表中。要查詢特定選單的所有專案,您可以使用此查詢:

SELECT p.*
  FROM wp_posts AS p
  LEFT JOIN wp_term_relationships AS tr ON tr.object_id = p.ID
  LEFT JOIN wp_term_taxonomy AS tt ON tt.term_taxonomy_id = tr.term_taxonomy_id
 WHERE p.post_type = 'nav_menu_item'
   AND tt.term_id = /*your menu ID*/;

關於當前選擇選單的資訊位於 wp_options 表中,作為序列化 PHP 陣列。例如,如果我們使用 TwentyEleven 主題,那麼我們將在 wp_options 表中建立一個記錄,option_name 列等於 theme_mod_twentyelevenoption_value 列等於...;s:18:"nav_menu_locations";a:1:{s:7:"primary";i:103;}}。在這裡可以看到 term_id 等於 103 的選單目前被選為"primary"選單。

這裡的關鍵原則是,我們每個 WP 主題總是有不同的選項記錄。這樣的選項具有相同的名稱結構:theme_mods_{your-theme-name}

P.S .: 要更改管理面板中的當前選單,只需轉到 Appearance»Menus 頁面,然後在 Theme Locations 元框中選擇所需的選單:

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。