自定义菜单保存在 Wordpress 3.0 数据库中的啥位置?

Posted

技术标签:

【中文标题】自定义菜单保存在 Wordpress 3.0 数据库中的啥位置?【英文标题】:Where are Custom Menus saved in the Database for Wordpress 3.0?自定义菜单保存在 Wordpress 3.0 数据库中的什么位置? 【发布时间】:2011-04-15 15:03:25 【问题描述】:

我一直在 phpmyadmin 中搜索和搜索我的 sql 数据库,但我似乎无法找到自定义菜单在数据库中的存储位置。有谁知道它存放在哪里?我有一个大菜单,基本上需要很长时间才能创建。我现在正在开发中,而不是在生产中重新创建它,我想尝试复制 sql 以查看它是否有效。谢谢!

【问题讨论】:

【参考方案1】:

添加新的自定义菜单时,其条目会添加到多个表格中。

    表:_term_taxonomy,列taxonomy,值nav_menu。 来自 1) term_id 也在表中:_terms,菜单标题显示在管理面板中 table:_term_relationship 将包含来自 1) 的 term_texonomy_id 以及与所有 object_id 的连接,该 object_id 将链接到具有 sub_menu 及以下级别菜单的所有 _post 表。 table:_postmeta 将包含与来自_posts 表的每个object_id 的菜单和子菜单相关的所有详细信息。

【讨论】:

我不明白这怎么不被赞成。我正在寻找一种导出和导入菜单的方法。我知道我的答案。别。我会手动完成。 应该澄清第 3 步,说 term_relationships 中的 object_id 等于 wp_post 中的 id 字段 我已经卸载了 WP Fastest Cache,完成卸载过程后在左侧菜单中留下了一个条目,我在你说的表格上的任何地方都找不到它...【参考方案2】:

导航菜单项以post_type = 'nav_menu_item' 存储在 wp_posts 表中。

【讨论】:

但是什么自定义帖子类型? 这是多么错误,wordpress 膨胀了 _posts 和 _options 表,将各种东西扔在那里,应该放在一个单独的表中,以便更好的数据库管理和加载速度 是的,数据库的标准化非常差,这个答案只是部分正确。它标识组成菜单的对象,但不提供与菜单关联的值(例如菜单文本)。我仍在挖掘以尝试找到该数据。【参考方案3】:

实际的菜单标题、ID 和名称存储在 wp_terms 表中。

【讨论】:

$menu_list = get_terms('nav_menu'); 将返回所有菜单。 此查询仅返回菜单 ID。什么查询返回具有足够信息的每个菜单项来重新生成菜单? 一旦你有了菜单ID,你就可以运行$wp_menu_items = wp_get_nav_menu_items( $id );【参考方案4】:

我讨厌碰到一个旧线程。但是,如果有人像我在寻找答案时遇到这种情况,从WP 3.2 开始,菜单的post_type 现在在wp_posts 表中称为nav_menu_item。他们在 wp 页面上没有那个,他们只有nav_menu。我找不到。

【讨论】:

谢谢老兄!很高兴知道这一点。【参考方案5】:

自定义菜单链接位于"meta_value" 下的wp_postmeta 表中 meta_key = _menu_item_url

【讨论】:

查看 WordPress Answers,Stack Exchange 的 WordPress 问答网站。如果您能分享您的一些专业知识,那就太好了。顺便说一句,凤凰城 WordCamp 很棒! @Chris_O 嘿伙计!谢谢..我见过它我只是很少上堆栈.....网站。我应该尝试更频繁地在那里闲逛:/ #toobusy @Chris_O fyi,我确实有一个帐户:wordpress.stackexchange.com/users/2173/ryno【参考方案6】:

我想为像我一样偶然发现这篇文章的人提供更完整和最新的答案。如果您想手动插入或更新菜单项,数据库中有几个地方需要检查/更新。

第一步是找到您的主菜单容器。这存储在wp_terms 中。只需通过 name 搜索菜单名称即可。记下身份证。在我的示例中,这将是33。同样,您可以在此处插入新行以创建新菜单。蛞蝓里面不能有空格。只需替换为-

现在我们将开始在该菜单中查找项目。这些存储在wp_posts 中,post_typenav_menu_item。此表中没有任何内容与您上面的 ID 相关联,因此您必须使用 post_title。如果目标是插入一个新的菜单项,使用 phpMyAdmin 您只需在任何菜单中的现有项上单击Copy 并更改post_titlepost_name。现在记下您插入的项目的 ID。我的是 9179。最好记下您复制的项目的 ID(如果它来自同一个菜单,那就更好了),因为我们将在下一步中使用它。

现在转到wp_postmeta 并在post_id 字段中搜索我们刚刚复制的项目。这将显示所有需要填写的字段,以获取我们新菜单项的信息。使用 phpMyAdmin 复制每个条目并根据需要进行更改。 _menu_item_menu_item_parent_menu_item_target_menu_item_classes 是最有可能需要更改的字段。并确保将新项目的 ID (9179) 放入 _menu_item_object_id

创建完这些之后,我们现在可以将该菜单项绑定到我们的菜单。我们需要从wp_term_taxonomy 获取term_taxonomy_id。只需使用第一步中的 ID 搜索 term_id,我是 33。 term_taxonomy_id 对我来说也恰好是 33 岁。不,我们需要在wp_term_relationships 中插入一个新行。 object_id 将是您的帖子 ID (9179),term_taxonomy_id 是我们刚刚查找的 (33)。

现在您的新项目应该在您的菜单中。

【讨论】:

可怕的模式。不过还是谢谢。【参考方案7】:

这是我使用的 SQL 脚本:

从 wp_term 表中获取菜单:

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'

使用 term_id 从所有其他连接的表中获取所有菜单标题/链接。在我看来,这是一个糟糕的关系数据库。只需将上面查询中的 tt.term_id 替换为您的,下面是 11。

SELECT p.post_title, p.post_name, p.menu_order, pm.meta_value 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 INNER JOIN wp_postmeta AS pm ON p.Id = pm.post_id WHERE p.post_type = 'nav_menu_item' AND tt.term_id = 11 AND pm.meta_key = '_menu_item_url'

【讨论】:

【参考方案8】:

每个菜单项都保存在posts表中,属于这些项的菜单层次结构/选项/url等存储在postmeta表中。在 postmeta 表中,您可以看到 post_id 列属于帖子表项。

【讨论】:

【参考方案9】:
$postId = $wpdb->get_var($wpdb->prepare("SELECT post_id FROM `wp_postmeta` WHERE meta_key='_menu_item_object_id' AND `meta_value`='$id'"));
$postIdc = $wpdb->get_var($wpdb->prepare("SELECT post_id FROM `wp_postmeta` WHERE meta_key='_menu_item_object_id' AND `meta_value`='$a[1]'"));
$sql2 = "SELECT * FROM `wp_postmeta` WHERE meta_key='_menu_item_menu_item_parent' AND `meta_value`='$postId'";
$sql2c = "SELECT * FROM `wp_postmeta` WHERE meta_key='_menu_item_menu_item_parent' AND `meta_value`='$postIdc'";

【讨论】:

尝试在您的答案中加入更多信息。 “只是代码”并不能帮助我们理解为什么或如何解决这个问题。 @GeorgeStocker 这到底是个怎样的答案?

以上是关于自定义菜单保存在 Wordpress 3.0 数据库中的啥位置?的主要内容,如果未能解决你的问题,请参考以下文章

带上传的 WordPress 3.0 自定义帖子类型

php 一个自定义的WordPress导航助手类,使用我内置的WordPress在自定义主题中完全实现Bootstrap 3.0+导航样式

Wordpress - 从自定义帖子类型中删除子菜单

在 Wordpress 中使用 ACF(高级自定义字段)显示自定义帖子标题的下拉菜单

WordPress入门 之 设置导航菜单

Wordpress:自定义徽标和菜单/侧边栏切换的问题