问题描述
我的 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_twentyeleven 和 option_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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。
