【发布时间】:2011-04-15 15:03:25
【问题描述】:
我一直在 phpmyadmin 中搜索和搜索我的 sql 数据库,但我似乎无法找到自定义菜单在数据库中的存储位置。有谁知道它存放在哪里?我有一个大菜单,基本上需要很长时间才能创建。我现在正在开发中,而不是在生产中重新创建它,我想尝试复制 sql 以查看它是否有效。谢谢!
【问题讨论】:
我一直在 phpmyadmin 中搜索和搜索我的 sql 数据库,但我似乎无法找到自定义菜单在数据库中的存储位置。有谁知道它存放在哪里?我有一个大菜单,基本上需要很长时间才能创建。我现在正在开发中,而不是在生产中重新创建它,我想尝试复制 sql 以查看它是否有效。谢谢!
【问题讨论】:
添加新的自定义菜单时,其条目会添加到多个表格中。
_term_taxonomy,列taxonomy,值nav_menu。term_id 也在表中:_terms,菜单标题显示在管理面板中_term_relationship 将包含来自 1) 的 term_texonomy_id 以及与所有 object_id 的连接,该 object_id 将链接到具有 sub_menu 及以下级别菜单的所有 _post 表。_postmeta 将包含与来自_posts 表的每个object_id 的菜单和子菜单相关的所有详细信息。【讨论】:
导航菜单项以post_type = 'nav_menu_item' 存储在 wp_posts 表中。
【讨论】:
实际的菜单标题、ID 和名称存储在 wp_terms 表中。
【讨论】:
$menu_list = get_terms('nav_menu'); 将返回所有菜单。
$wp_menu_items = wp_get_nav_menu_items( $id );
我讨厌碰到一个旧线程。但是,如果有人像我在寻找答案时遇到这种情况,从WP 3.2 开始,菜单的post_type 现在在wp_posts 表中称为nav_menu_item。他们在 wp 页面上没有那个,他们只有nav_menu。我找不到。
【讨论】:
自定义菜单链接位于"meta_value" 下的wp_postmeta 表中
meta_key = _menu_item_url
【讨论】:
我想为像我一样偶然发现这篇文章的人提供更完整和最新的答案。如果您想手动插入或更新菜单项,数据库中有几个地方需要检查/更新。
第一步是找到您的主菜单容器。这存储在wp_terms 中。只需通过 name 搜索菜单名称即可。记下身份证。在我的示例中,这将是33。同样,您可以在此处插入新行以创建新菜单。蛞蝓里面不能有空格。只需替换为-。
现在我们将开始在该菜单中查找项目。这些存储在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。
创建完这些之后,我们现在可以将该菜单项绑定到我们的菜单。我们需要从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)。
现在您的新项目应该在您的菜单中。
【讨论】:
这是我使用的 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'
【讨论】:
每个菜单项都保存在posts表中,属于这些项的菜单层次结构/选项/url等存储在postmeta表中。在 postmeta 表中,您可以看到 post_id 列属于帖子表项。
【讨论】:
$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'";
【讨论】: