Где хранятся пользовательские меню в базе данных для Wordpress 3.0? - PullRequest
21 голосов
/ 22 сентября 2010

Я искал и искал свою базу данных sql в phpmyadmin, но не могу найти, где в базе данных хранятся пользовательские меню. Кто-нибудь знает, где он хранится? У меня есть большое меню, на создание которого уходит целая вечность. Сейчас я нахожусь в разработке, и вместо того, чтобы воссоздавать его в производстве, я хочу попробовать скопировать sql, чтобы увидеть, работает ли он. Спасибо!

Ответы [ 9 ]

64 голосов
/ 05 января 2013

Когда добавляется новое пользовательское меню, его запись добавляется в несколько таблиц.

  1. таблица: _term_taxonomy со столбцом taxonomy и значением nav_menu.
  2. из 1) term_id также находится в таблице: _terms с названием меню, которое отображается в панели администратора
  3. таблица: _term_relationship будет содержать term_texonomy_id из 1) и соединение со всеми object_id, которые будут связаны со всей таблицей _post, имеющей sub_menu и меню уровня ниже.
  4. таблица: _postmeta будет содержать все детали, связанные с меню и подменю для каждой object_id из _posts таблицы.
31 голосов
/ 22 сентября 2010

Элементы меню навигации хранятся в таблице wp_posts с post_type = 'nav_menu_item'.

18 голосов
/ 21 декабря 2010

Фактические заголовки меню, идентификаторы и имена хранятся в таблице wp_terms.

14 голосов
/ 12 июля 2011

Ненавижу натыкаться на старую ветку.Но если кто-то столкнется с этим, как я искал ответ, то с WP 3.2 меню post_type теперь называется nav_menu_item в таблице wp_posts.У них не было этого на странице wp, у них просто было nav_menu.Который я не смог найти.

11 голосов
/ 20 мая 2011

Пользовательские ссылки меню находятся в таблице wp_postmeta под "meta_value" meta_key = _menu_item_url

5 голосов
/ 30 октября 2014

Я хотел бы предоставить более полный и актуальный ответ для людей, которые наткнулись на этот пост, как и я. В базе данных есть несколько мест, которые необходимо проверить / обновить, если вы хотите вручную вставить или обновить пункты меню.

Первый шаг - найти контейнер главного меню. Это хранится в wp_terms. Просто по name найдите название вашего меню. Запомните удостоверение личности. В моем примере это будет 33. Кроме того, вы можете вставить новую строку здесь, чтобы создать новое меню. У слизняка не должно быть пробелов. Вместо этого просто введите -.

Теперь перейдем к поиску пунктов в этом меню. Они хранятся в wp_posts с post_type из nav_menu_item. В этой таблице нет ничего, что связывало бы это с вашим идентификатором выше, поэтому вам придется пройти по post_title. Если целью является вставка нового пункта меню, с помощью phpMyAdmin вы можете просто нажать Copy на существующем пункте в любом меню и изменить post_title и post_name. Теперь запомните идентификатор вставленного вами предмета. У меня 9179. Также было бы неплохо принять к сведению ID скопированного вами предмета (даже лучше, если он был из того же меню), поскольку мы будем использовать его на следующем шаге.

Теперь перейдите к wp_postmeta и найдите в поле post_id элемент, который мы только что скопировали. Это откроет все поля, которые необходимо заполнить, чтобы получить информацию для нашего нового пункта меню. С помощью phpMyAdmin скопируйте каждую из этих записей и при необходимости измените. _menu_item_menu_item_parent, _menu_item_target и _menu_item_classes - это поля, которые, скорее всего, нужно будет изменить. И убедитесь, что вы вводите идентификатор вашего нового предмета (9179) в _menu_item_object_id.

После того, как они все созданы, мы можем привязать этот пункт меню к нашему меню. Нам нужно получить term_taxonomy_id от wp_term_taxonomy. Просто найдите term_id, используя идентификатор с первого шага, 33 для меня. term_taxonomy_id для меня тоже 33. Нет, нам нужно вставить новую строку в wp_term_relationships. object_id будет вашим почтовым идентификатором (9179), а term_taxonomy_id - это то, что мы только что искали (33).

Теперь ваш новый пункт должен быть в вашем меню.

2 голосов
/ 12 января 2012

Каждый элемент меню сохраняется в таблице сообщений, а иерархия меню / опции / URL и т. Д., Принадлежащие этим элементам, сохраняются в таблице postmeta.В таблице postmeta вы можете видеть столбец post_id, принадлежащий элементам таблицы сообщений.

0 голосов
/ 14 июня 2019

Вот сценарии 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'
0 голосов
/ 09 ноября 2012
$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'";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...