Меню Wordpress по умолчанию в базе данных
Теперь в моем wordpress(3.5) есть 3 меню.
- Главное меню (по умолчанию из wp)
- Меню нижнего колонтитула (по умолчанию из wp)
- Меню тестирования
Теперь я сохранил меню тестирования по умолчанию.
Где Wordpress хранит эту вещь?
Я хочу знать, где wordpress хранит информацию о текущем меню, которое отображается в интерфейсе.
1 answers
Меню само по себе является таксономией в WP. Это означает, что вы можете найти все меню в таблице 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';
Пункт меню - это пользовательский тип записи в WP. Они хранятся в таблице 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 = /*your menu 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"
.
Ключевым принципом здесь является то, что у нас всегда есть отдельная запись параметров для каждой темы WP. Такие параметры имеют одинаковую структуру имен: theme_mods_{your-theme-name}
.
P.S.: Чтобы изменить текущее меню в панели администратора, просто перейдите в Appearance
" Menus
страница и выберите нужное вам меню в Theme Locations
мета-поле: