私のwordpress(3.5)には3つのメニューがあります。
テストメニューはデフォルトのままにしました。
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*/;
現在選択されているメニューに関する情報は、シリアル化されたPHP配列としてwp_options
テーブルにあります。たとえば、TwentyElevenテーマを使用する場合、wp_options
列はoption_name
に等しく、theme_mod_twentyeleven
列はoption_value
に等しいレコードが...;s:18:"nav_menu_locations";a:1:{s:7:"primary";i:103;}}
テーブルにあります。ここでは、term_id
が103に等しいメニューが現在"primary"
menuとして選択されていることがわかります。
ここでの重要な原則は、WPテーマごとに別々のオプションレコードが常にあるということです。そのようなオプションは同じ名前構造theme_mods_{your-theme-name}
を持っています。
P.S .:管理パネルの現在のメニューを変更するには、Appearance
"Menus
ページに行き、Theme Locations
メタボックスで必要なメニューを選択してください。