Меню по умолчанию WordPress в базе данных
В моем WordPress (3.5) сейчас есть 3 меню.
- Главное меню (по умолчанию из WP)
- Меню подвала (по умолчанию из WP)
- Тестовое меню
Сейчас я установил тестовое меню как меню по умолчанию.
Где WordPress хранит эту информацию?
Я хочу узнать, где WordPress хранит информацию о текущем меню, которое отображается во фронтенде.

Меню в WordPress само по себе является таксономией. Это означает, что все меню можно найти в таблице wp_terms
, выполнив следующий запрос:
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';
Элементы меню — это произвольный тип записи в WordPress. Они хранятся в таблице wp_posts
. Все элементы меню можно найти с помощью такого запроса:
SELECT *
FROM wp_posts
WHERE post_type = 'nav_menu_item';
Связи между меню и элементами меню хранятся в таблице wp_term_relationships
. Чтобы найти все элементы определённого меню, можно использовать следующий запрос:
SELECT p.*
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
WHERE p.post_type = 'nav_menu_item'
AND tt.term_id = /*ID вашего меню*/;
Информация о текущем выбранном меню находится в таблице wp_options
в виде сериализованного PHP-массива. Например, если используется тема TwentyEleven, то в таблице wp_options
будет запись, где колонка option_name
равна theme_mod_twentyeleven
, а option_value
содержит значение ...;s:18:"nav_menu_locations";a:1:{s:7:"primary";i:103;}}
. Здесь видно, что меню с term_id
равным 103 в данный момент выбрано как "primary"
(основное) меню.
Ключевой принцип здесь заключается в том, что для каждой темы WordPress всегда есть отдельная запись в настройках. Такие настройки имеют одинаковую структуру имени: theme_mods_{название-вашей-темы}
.
P.S.: Чтобы изменить текущее меню в админ-панели, перейдите на страницу Внешний вид
» Меню
и выберите нужное меню в метабоксе Расположение меню
:

Спасибо за ответ, но мне нужно узнать, где хранится меню, которое сейчас отображается по умолчанию (на фронтенде).

Да, я получил ответ. Я использую тему hypershot и установил основное меню как test menu. Оно хранится вот так: a:2:{i:0;b:0;s:18:"nav_menu_locations";a:2:{s:11:"header-menu";i:27;s:11:"footer-menu";i:0;}} Здесь i:27 означает, что 27 — это term_id из таблицы wp_terms. Спасибо @eugene-manuilov :)
