我一直在phpmyadmin中搜索和搜索我的sql数据库,但我似乎无法找到自定义菜单存储在数据库中的位置。有人知道它存放在哪里吗?我有一个基本的大菜单,需要永远创建。我现在正在开发中,而不是在生产中重新创建它我想尝试复制sql以查看它是否有效。谢谢!
答案 0 :(得分:63)
添加新的自定义菜单后,其条目将添加到多个表格中。
_term_taxonomy
,其中包含taxonomy
列和值nav_menu
。term_id
也在表格中:_terms
,其菜单标题显示在管理面板中_term_relationship
将包含来自1的term_texonomy_id
以及与所有object_id的连接,该对象将链接到具有_post
及以下级别菜单的所有sub_menu
表格。_postmeta
将包含与object_id
表格中每个_posts
的菜单和子菜单相关的所有详细信息。答案 1 :(得分:30)
导航菜单项目存储在带有post_type = 'nav_menu_item'
的wp_posts表中。
答案 2 :(得分:17)
实际的菜单标题,ID和名称存储在wp_terms表中。
答案 3 :(得分:14)
我讨厌碰到旧线程。但是,如果有人遇到此问题,就像我一直在搜索答案一样,从WP 3.2
开始,post_type
菜单现在在nav_menu_item
表中被称为wp_posts
。他们在wp页面上没有这个,他们只有nav_menu
。我找不到。
答案 4 :(得分:10)
自定义菜单链接位于wp_postmeta
下的"meta_value"
表格中
meta_key = _menu_item_url
答案 5 :(得分:5)
我想为像我这样偶然发现这篇文章的人提供更完整和最新的答案。如果您想手动插入或更新菜单项,数据库中有几个地方需要检查/更新。
第一步是找到主菜单容器。这存储在wp_terms
中。只需按name
搜索菜单名称即可。记下身份证。在我的示例中,这将是33
。同样,您可以在此处插入新行以创建新菜单。 slu in中不能有空格。只需替换-
即可。
现在我们将在该菜单中找到项目。这些内容存储在wp_posts
中post_type
nav_menu_item
。此表中没有任何内容与上面的ID相关联,因此您必须经过post_title
。如果目标是插入新的菜单项,使用phpMyAdmin,您只需点击任意菜单中现有项目的Copy
,然后更改post_title
和post_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
。
在创建完所有内容后,我们现在可以将该菜单项与菜单相关联。我们需要从term_taxonomy_id
获取wp_term_taxonomy
。只需使用第一步中的ID搜索term_id
,为我搜索33。 term_taxonomy_id
对我来说恰好是33。不,我们需要在wp_term_relationships
中插入新行。 object_id
将成为您的帖子ID(9179),term_taxonomy_id
就是我们刚刚查到的内容(33)。
现在,您的新项目应该在您的菜单中。
答案 6 :(得分:2)
每个菜单项都保存在帖子表中,属于这些项目的菜单层次结构/选项/ URL等存储在postmeta表中。在postmeta表中,您可以看到属于posts表项的post_id列。
答案 7 :(得分:0)
这是我使用的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替换为上面查询中的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 :(得分:-3)
$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'";