Поддержка Проблемы и решения Автоматическое создание иерархического меню

  • Всех приветствую!

    Ребят, подскажите, пожалуйста, возможно ли сделать так, чтобы при добавлении элементов в меню через «Внешний вид» — «Меню» эти элементы автоматически образовывали структуру согласно иерархии страниц?

    Пример.

    При добавлении выделенных элементов получаю меню 1-го уровня, хотя Наука должна включать Аспирантуру, Инновационную деятельность, Магистратуру.

    Понимаю, что это драгами все в ручном режиме переставляется, но все-таки интересно возможно ли это настроить в автоматике.

    Спасибо!

Просмотр 12 ответов — с 1 по 12 (всего 12)
  • Понимаю, что это драгами все в ручном режиме переставляется, но все-таки интересно возможно ли это настроить в автоматике.

    Вы понимаете, что создание меню таким образом — это ручное его создание? Соответственно для автоматического создания меню надо применять другие методы.
    Для страниц это wp_list_pages

    SeVlad, в header.php обнаружил wp_nav_menu(), но согласно описанию, это альтернатива.

    Не могу понять, каким образом задается список страниц (их id), которые надо отображать в меню. Насколько помню, ранее для этого в WP был интерефейс, где задавались id, которые надо отправить в меню. Сейчас же такого обнаружить не могу… Где это могло спрятаться?

    в header.php обнаружил wp_nav_menu(), но согласно описанию, это альтернатива.

    Так и есть. Точнее обычно так делается. Если есть вручную созданное меню и помещено в соответствующую область темы (т.е. там где выводится эта функция), то оно и выводится. Иначе выводится или список страниц или список рубрик.

    каким образом задается список страниц (их id), которые надо отображать в меню.

    Описание функции почитайте.
    Интересующие Вас параметры:
    child_of — показывать дочек
    depth — уровень вложенности.
    exclude или include — взаимоисключающие параметры.

    Насколько помню, ранее для этого в WP был интерефейс, где задавались id, которые надо отправить в меню.

    Не поленился и откатился на версию 2.8.4 с соответствующей версией темы F2. И действительно там можно было задавать исключаемые страницы в меню. Зачем такую фичу убрали — непонятно =/

    SeVlad,

    child_of — показывать дочек
    depth — уровень вложенности.
    exclude или include — взаимоисключающие параметры.

    — таких параметров у функции wp_nav_menu() не обнаружил.

    Как я понимаю, надо копать в сторону wp_page_menu(), так?

    таких параметров у функции wp_nav_menu() не обнаружил

    Я говорил о списке страниц. Те wp_list_pages.

    Пытаюсь понять как работает wp_nav_menu().

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

    1. Меню, подходящее по ID, слагу или описанию переданному в параметре ‘menu’ и если в этом меню есть хоть одна ссылка (один элемент);
    2. иначе, первое не пустое меню;
    3. или, выведет значение возвращаемое функцией указанной в параметре «fallback_cb» (по умолчанию там указано функция wp_page_menu);
    4. если ничего не подошло, функция ничего и не выведет

    Сейчас у меня в header.php сидит вот такое:
    <?php wp_nav_menu( array( 'theme_location' => 'primary' ) ); ?>
    В «Внешний вид» — «Меню» я удалил все меню.

    Проверяю меню сайта — там автоматически создалось меню из первого уровня. Вопрос: почему? По вышеуказанному алгоритму должен был сработать пункт 3. Проверяю содержимое wp_page_menu в файле wp-includes/post-template.php:

    function wp_page_menu( $args = array() ) {
    	$defaults = array('sort_column' => 'menu_order, post_title', 'menu_class' => 'menu', 'echo' => true, 'link_before' => '', 'link_after' => '');

    Судя по параметрам в меню должны отображаться все страницы, однако

    SeVlad, т.е. Вы предлагает заменить wp_nav_menu на wp_list_pages? Я пробовал так, но wp_nav_menu все равно срабатывает, хотя я комментировал вызов данной функции в header.php, а после писал wp_list_pages (…).

    Поэтому пытаюсь понять как работает wp_nav_menu().

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

    1. Меню, подходящее по ID, слагу или описанию переданному в параметре ‘menu’ и если в этом меню есть хоть одна ссылка (один элемент);
    2. иначе, первое не пустое меню;
    3. или, выведет значение возвращаемое функцией указанной в параметре «fallback_cb» (по умолчанию там указано функция wp_page_menu);
    4. если ничего не подошло, функция ничего и не выведет

    Сейчас у меня в header.php сидит вот такое:
    <?php wp_nav_menu( array( 'theme_location' => 'primary' ) ); ?>
    В «Внешний вид» — «Меню» я удалил все меню.

    Проверяю меню сайта — там автоматически создалось меню из первого уровня. Вопрос: почему? По вышеуказанному алгоритму должен был сработать пункт 3. Проверяю содержимое wp_page_menu в файле wp-includes/post-template.php:

    function wp_page_menu( $args = array() ) {
    	$defaults = array('sort_column' => 'menu_order, post_title', 'menu_class' => 'menu', 'echo' => true, 'link_before' => '', 'link_after' => '');
    ...
    }

    Судя по параметрам в меню должны отображаться все страницы, однако

    Проверяю меню сайта — там автоматически создалось меню из первого уровня. Вопрос: почему?

    P.S. Просьба удалить предыдущее сообщение, накосячил.

    Immick, извини, можно задать вопрос не в тему. У тебя при нажатии на родительские страницы в меню они открываются? Например, если нажать «Наука», не выбирая «Аспирантура» и пр., то что откроется — страница?

    Egmalt,

    если нажать «Наука», не выбирая «Аспирантура» и пр., то что откроется — страница?

    Само собой. Откроется страница «Наука», т.к. это ссылка.

    Спасибо. У меня просто с этим беда, но я уже понял, что тема виновата.:(

    Egmalt, но вообще штука бесполезная (по крайней мере у меня), т.к. на родительских страницах тупо перечислены ссылки на дочерние 🙂 Так что в принципе можно ссылкой не делать, хотя не знаю возможно ли сделать родителя бессылочным, т.е. просто надписью.

    Вы предлагает заменить wp_nav_menu на wp_list_pages?

    Да.

    Я пробовал так, но wp_nav_menu все равно срабатывает, хотя я комментировал вызов данной функции в header.php, а после писал wp_list_pages (…).

    Покажите код как Вы делали.

    Вопрос: почему?

    В 371 (с 37 наверное. А мб и раньше), если я правильно понял, в произвольном меню по умолчанию создаётся меню из страниц (возможно только первого ур-ня).

    Тут для меня новшество, в котором я не разбирался.
    Я вообще противник создавать множество стат.страниц в ВП. В 90% случаев это говорит о неправильном планировании сайта.

Просмотр 12 ответов — с 1 по 12 (всего 12)
  • Тема «Автоматическое создание иерархического меню» закрыта для новых ответов.