Я искал и искал свою базу данных sql в phpmyadmin, но я не могу найти, где пользовательские меню хранятся в базе данных. Кто-нибудь знает, где он хранится? У меня есть большое меню в основном, которое требуется навсегда для создания. Я сейчас в разработке и вместо того, чтобы воссоздавать его в процессе производства, я хочу попробовать и скопировать sql, чтобы увидеть, работает ли он. Спасибо!
Где находятся пользовательские меню, сохраненные в базе данных для Wordpress 3.0?
Ответ 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'";