Intereting Posts
Как удалить определенные слова из url slug WP-CLI внезапный пустой ответ Использование esc_url () на URL-адресе более одного раза Как создать всплывающее окно так же, как функция всплывающего окна WordPress Важно ли санировать данные в коротком коде, который будет использоваться на сайте, на который я только отправлю? Списки таксономии ссылаются на первый пост в этот срок Условные обозначения, если существуют теги? Когда администратор изменяет пароль для зарегистрированного пользователя, я не хочу отправлять электронное письмо с изменением пароля пользователям Я не в системе gform_after_submission добавить список названий форм после содержимого сообщения Админы регистрируются на нашем сайте WordPress по умолчанию на странице администратора Отключите функцию перетаскивания на виджетах панели управления для подписчиков. Как создать пользователя-администратора для сайта WordPress через MySQL (PHPMyAdmin)? Как правильно зарегистрировать загрузочный JavaScript в WordPress functions.php? Как перенаправить после входа в систему, получая переменную от url (например, с помощью языка)

register_nav_menus, затем программно создавать меню

У меня есть вызов register_nav_menus в функциях моей темы.php:

 //register nav menu and footer nav. register_nav_menus( array( 'main-nav' => 'Main Navigation', 'footer-nav' => 'Footer Navigation' ) ); 

Это отлично работает, но я хотел бы сделать дополнительный шаг по программному созданию меню и присвоить его «main-nav», чтобы автоматически добавлять новые страницы.

Эта тема используется в качестве отправной точки для установки wordpress, поэтому я хотел бы включить эту функцию, чтобы сохранить немного времени на повторяющихся задачах, таких как ручное создание этих меню через внешний вид -> меню.

Кто-нибудь знает как это сделать?

Solutions Collecting From Web of "register_nav_menus, затем программно создавать меню"

Нет необходимости создавать / обновлять пользовательские меню программно, просто чтобы сделать то, что вы пытаетесь сделать.

Просто wp_nav_menu() на wp_nav_menu() fallback, wp_page_menu() или определите свой собственный пользовательский обратный вызов, например, для вывода wp_list_pages() .

Вызов:

 `wp_nav_menu( array( 'theme_location' => 'main-nav' ) );` 

… будет, если пользовательское меню не было назначено в 'main-nav' темы 'main-nav' , выведите это:

 `wp_page_menu()`. 

Если вы хотите более мелкомасштабное управление, например, для явного контроля глубины меню, вы можете сделать следующее:

 wp_nav_menu( array( 'theme_location' => 'main-nav', 'depth' => 3, 'container_class' => 'nav', 'menu_id' => 'main-nav', 'fallback_cb' => 'wpse87933_main_nav_cb' ) ); 

… и затем определите свой обратный вызов следующим образом:

 function wpse87933_main_nav_cb() { ?> <div class="nav"> <ul id="main-nav"> <?php wp_list_pages( array( 'depth' => 3, 'title_li' => '' ) ); ?> </ul> </div> <?php } 

Вы даже упростили ситуацию, используя has_nav_menu() условное:

 if ( has_nav_menu( 'main-nav' ) ) { wp_nav_menu( array( 'theme_location' => 'main-nav', 'depth' => 3, 'container_class' => 'nav', 'menu_id' => 'main-nav' ) ); } else { ?> <div class="nav"> <ul id="main-nav"> <?php wp_list_pages( array( 'depth' => 3, 'title_li' => '' ) ); ?> </ul> </div> <?php } 

В этот момент вам просто нужно помнить о различиях классов CSS между тремя функциями:

  • wp_nav_menu() CSS-классы
  • wp_page_menu() Классы CSS
  • wp_list_pages() Классы CSS

Выяснилось, как это сделать на основе ответа на этот вопрос: программно добавить меню навигации и пункты меню

Я адаптировал свой ответ в соответствии со своими собственными потребностями, то есть просто для создания навигационного меню и присвоения его местоположению, которое я уже определил:

 //register nav menu and footer nav. register_nav_menus( array( 'main-nav' => 'Main Navigation', 'footer-nav' => 'Footer Navigation' ) ); //now see if the main navigation menu is there - if not, create it. if (!wp_get_nav_menu_object('Main Navigation')) { $menu_id = wp_create_nav_menu('Main Navigation'); //create the menu $locations = get_theme_mod('nav_menu_locations'); //get the menu locations $locations['main-nav'] = $menu_id; //set our new menu to be the main nav set_theme_mod('nav_menu_locations', $locations); //update } 

Недостатком этого является то, что если администратор удалит основное меню навигации, он снова будет создан (что может раздражать) – поэтому я включил код меню создания в функцию, которая работает только один раз, при установке темы. Страницы с этим кодом не добавлены, но наличие подходящих меню, определенных и уже назначенных для их тематических мест, упростит вопросы для не-кодеров, создающих сайты с моей темой, и больше вопросов о том, почему определенные страницы отображаются в навигационном меню, когда навигационное меню еще не создано 🙂