Подтвердить что ты не робот

Где находятся пользовательские меню, сохраненные в базе данных для Wordpress 3.0?

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

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

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

Теперь перейдите в 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. Просто выполните поиск term_id с помощью ID с первого шага, 33 для меня. term_taxonomy_id мне тоже 33 года. Нет необходимости вставлять новую строку в wp_term_relationships. object_id будет вашим идентификатором сообщения (9179), а term_taxonomy_id - это то, что мы только что искали (33).

Теперь ваш новый элемент должен находиться в вашем меню.

Ответ 7

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

Ответ 8

Вот сценарии 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'

Ответ 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'";