Меню по умолчанию WordPress в базе данных

5 янв. 2013 г., 13:40:09
Просмотры: 63.7K
Голосов: 22

В моем WordPress (3.5) сейчас есть 3 меню.

  • Главное меню (по умолчанию из WP)
  • Меню подвала (по умолчанию из WP)
  • Тестовое меню

Сейчас я установил тестовое меню как меню по умолчанию.

Где WordPress хранит эту информацию?

Я хочу узнать, где WordPress хранит информацию о текущем меню, которое отображается во фронтенде.

0
Все ответы на вопрос 1
4
59

Меню в 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.: Чтобы изменить текущее меню в админ-панели, перейдите на страницу Внешний вид » Меню и выберите нужное меню в метабоксе Расположение меню:

Выбор расположения меню в WordPress

5 янв. 2013 г. 13:56:52
Комментарии

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

Hiren Rathod Hiren Rathod
5 янв. 2013 г. 14:04:06

@HirenRathod Я обновил свой ответ

Eugene Manuilov Eugene Manuilov
5 янв. 2013 г. 14:23:45

Да, я получил ответ. Я использую тему 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 :)

Hiren Rathod Hiren Rathod
6 янв. 2013 г. 21:13:48

Как выбрать пункты меню (страницы/записи/ссылки) для заданного term_id?

Xeoncross Xeoncross
19 сент. 2015 г. 04:26:47