web-dev-qa-db-ja.com

データベース内のWordpressのデフォルトメニュー

私のwordpress(3.5)には3つのメニューがあります。

  • メインメニュー(デフォルトはwpから)
  • フッターメニュー(デフォルトはwpから)
  • テストメニュー

テストメニューはデフォルトのままにしました。

Wordpressはこのことをどこに保存していますか?

フロントエンドに表示されている現在のメニューについて、ワードプレスがどこに格納しているのか知りたいのです。

17
Hiren Rathod

メニュー自体は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メタボックスで必要なメニューを選択してください。

enter image description here

43
Eugene Manuilov