问题描述

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