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

时间:2010-09-22 09:02:45

标签: mysql wordpress

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

9 个答案:

答案 0 :(得分:63)

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

  1. 表格_term_taxonomy,其中包含taxonomy列和值nav_menu
  2. 来自1)term_id也在表格中:_terms,其菜单标题显示在管理面板中
  3. 表格:_term_relationship将包含来自1的term_texonomy_id以及与所有object_id的连接,该对象将链接到具有_post及以下级别菜单的所有sub_menu表格。
  4. 表格:_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_postspost_type nav_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

在创建完所有内容后,我们现在可以将该菜单项与菜单相关联。我们需要从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'";