• Здравствуйте.

    Проблема такая: есть сайт. Тема используется Magnificent. В меню выводятся страницы основные, с выпадающим списком зависимых страниц (надеюсь, понятно объяснил). В меню они идут по алфавитному порядку, а мне надо, чтобы порядок был мой собственный (даже не по id). Какие есть варианты решения этой проблемы?

    Я прочел про wp_list_categories, но куда и как вставить — не знаю. В хэдере меню вот так выводится:

    <div id="menu">
    			<div class="container clearfix">
    				<?php $menuClass = 'nav';
    					$menuID = 'primary';
    					$primaryNav = '';
    					if (function_exists('wp_nav_menu')) {
    						$primaryNav = wp_nav_menu( array( 'theme_location' => 'primary-menu', 'container' => '', 'fallback_cb' => '', 'menu_class' => $menuClass, 'menu_id' => $menuID, 'echo' => false ) );
    					};
    					if ($primaryNav == '') { ?>
    						<ul id="<?php echo $menuID; ?>" class="<?php echo $menuClass; ?>">
    							<?php if (get_option('magnificent_home_link') == 'on') { ?>
    								<li <?php if (is_home()) echo('class="current_page_item"') ?>><a href="<?php bloginfo('url'); ?>"><?php _e('Home','Magnificent') ?></a></li>
    							<?php }; ?>
    
    							<?php show_page_menu($menuClass,false,false); ?>
    
    							<?php show_categories_menu($menuClass,false); ?>
    						</ul> <!-- end ul#nav -->
    					<?php }
    					else echo($primaryNav); ?>
    			</div> <!-- end .container -->
    		</div> <!-- end #menu -->

    Что делать? Вопрос нужно решить срочно.

Просмотр 15 ответов — с 1 по 15 (всего 18)
  • Модератор Юрій

    (@yube)

    Что делать?

    Для начала перестать путать страницы и категории.

    На вопрос о порядке страниц в т.н. «меню» я отвечал вчера в теме про «полусайт».

    Ссылку на эту тему дать было вообще здорово.

    Модератор Юрій

    (@yube)

    Извините, но задаром работать интерфейсом к Яндексу я не хочу и не буду. Ключевое слово я дал. Ищите, и обрящете.

    Просто будь ссылка — я бы нашел тему быстрее. Ну да ладно, бог с ней.

    Тему я нашел, прочел. Там сказано ровно тоже, что я говорю. Я понимаю, что это страницы, я понимаю, что надо их в порядке определенном сделать. Но в том то и проблема, что порядок я установить не могу. Например, на плагин My Page Order никак не реагируют страницы (в меню остается все точно так же). А с wp_list_pages() мне непонятно вообще, если честно. В самом файл хэдера такой переменной нет (посмотрите код выше). Как и куда его вставлять? Объясните подробнее, пожалуйста.

    Кстати, в кодекс я ходил, но т.к. с английским у меня неважно дела обстоят, то я ничего не понял.

    Неужели никто не знает? 🙁

    Модератор Юрій

    (@yube)

    Объясняю.

    Есть стат.страницы. Их список можно вывести функцией wp_list_pages() или wp_page_menu(). Порядок можно поменять циферками в админке и параметром у функции. Или таскать мышой в плагине.

    Есть категории (рубрики). Их список выводится функцией wp_list_categories(). Порядок можно менять плагином My Category Order.

    Есть навигационное меню. Его нужно создать в админке ручками. Выводится функцией wp_nav_menu().

    Параметры этих функций описаны в Кодексе http://codex.wordpress.org/Function_Reference/

    Какие из этих функций использовать в шаблоне, зависит от того, что Вам нужно выводить, и от Ваших личных предпочтений.

    Для перевода описаний можно воспользоваться http://translate.google.com/ Или нанять переводчика :))))

    Lurisman
    wp_list_pages(‘title_li=’) — выводить страницы. В простом варианте достаточно так. Но есть ещё несколько параметров (сортировка и т.п.) — читайте документацию на оф. сайте WP.
    wp_list_categories — выводить категории.
    Вышеописанный Вами код обычно помещается в Файл «header.php».
    Пример, — просто показать страницы:
    <?php wp_list_pages('title_li=') ?>
    <?php — начало php-кода, ну и ?> соответсвенно конец — читайте мануал по PHP, хоть мельком.
    Что за функции show_page_menu и show_categories_menu смотрите в functions.php Вашей темы.
    P.S.
    Если не понимаете англ. язык — используйте программы-переводчики.
    WP не Drupal и не ModX — разберетесь 🙂

    Юрий, может быть я не доступно объясняю? Давайте я попробую еще раз:

    Навигационное меню в моем случае — это родительские страницы со страницами дочерними. Их вывод обеспечивает код в header.php, который выглядит вот так (привожу header.php частично):

    <div id="menu">
    			<div class="container clearfix">
    				<?php $menuClass = 'nav';
    					$menuID = 'primary';
    					$primaryNav = '';
    					if (function_exists('wp_nav_menu')) {
    						$primaryNav = wp_nav_menu( array( 'theme_location' => 'primary-menu', 'container' => '', 'fallback_cb' => '', 'menu_class' => $menuClass, 'menu_id' => $menuID, 'echo' => false ) );
    					};
    					if ($primaryNav == '') { ?>
    						<ul id="<?php echo $menuID; ?>" class="<?php echo $menuClass; ?>">
    							<?php if (get_option('magnificent_home_link') == 'on') { ?>
    								<li <?php if (is_home()) echo('class="current_page_item"') ?>><a href="<?php bloginfo('url'); ?>"><?php _e('Home','Magnificent') ?></a></li>
    							<?php }; ?>
    
    							<?php show_page_menu($menuClass,false,false); ?>
    
    							<?php show_categories_menu($menuClass,false); ?>
    						</ul> <!-- end ul#nav -->
    					<?php }
    					else echo($primaryNav); ?>
    			</div> <!-- end .container -->
    		</div> <!-- end #menu -->

    В данном случае нет ни wp_list_pages(), ни wp_page_menu(). Но есть wp_nav_menu(). Если я правильно понимаю, то именно вот это выводит мое меню:

    if (function_exists('wp_nav_menu')) {
    						$primaryNav = wp_nav_menu(array( 'theme_location' => 'primary-menu', 'container' => '', 'fallback_cb' => '', 'menu_class' => $menuClass, 'menu_id' => $menuID, 'echo' => false ) );
    					};

    Что мне прописать-то надо там? Обратите внимание именно на код, пожалуйста. Я так понимаю, что в него как раз никто и не смотрит. Теорию, о которой вы мне говорите, я и сам знаю. Я не знаю какой конкретно надо менять параметр, чтобы выводилось то, что мне надо (странице в определенном порядке, пусть по id, черт с ним).

    if (function_exists('wp_nav_menu')) {
    						$primaryNav = wp_nav_menu(array( 'theme_location' => 'primary-menu', 'container' => '', 'fallback_cb' => '', 'menu_class' => $menuClass, 'menu_id' => $menuID, 'echo' => false ) );
    					};

    это проверка сущ-я ф-и wp_nav_menu.
    Далее типа как массив.
    См. show_page_menu и show_categories_menu в functions.php.

    <?php show_page_menu($menuClass,false,false); ?>
    
    							<?php show_categories_menu($menuClass,false); ?>

    show_page_menu — переводится примерно как «показать меню страниц).

    Все, я окончательно запутался 🙁

    В function.php есть только это:

    function register_main_menus() {
    	register_nav_menus(
    		array(
    			'primary-menu' => __( 'Primary Menu' )
    		)
    	);
    }
    if (function_exists('register_nav_menus')) add_action( 'init', 'register_main_menus' );

    А про перевод show_page_menu я в курсе, не настолько уж плох мой язык 🙂 Причем там стоят параметры false, которые непонятно к чему относятся вообще. Меню-то показывается. Менял на true — ничего не происходит.

    Если используете Notepad ++, то можно запустить поиск show_page_menu
    в папке темы. Или «метод научного тыка»:

    <div id="menu">
    			<div class="container clearfix">
    				<?php $menuClass = 'nav';
    					$menuID = 'primary';
    					$primaryNav = '';
    					if (function_exists('wp_nav_menu')) {
    						$primaryNav = wp_nav_menu( array( 'theme_location' => 'primary-menu', 'container' => '', 'fallback_cb' => '', 'menu_class' => $menuClass, 'menu_id' => $menuID, 'echo' => false ) );
    					};
    					if ($primaryNav == '') { ?>
    						<ul id="<?php echo $menuID; ?>" class="<?php echo $menuClass; ?>">
    							<?php if (get_option('magnificent_home_link') == 'on') { ?>
    								<li <?php if (is_home()) echo('class="current_page_item"') ?>><a href="<?php bloginfo('url'); ?>"><?php _e('Home','Magnificent') ?></a></li>
    							<?php }; ?>
    
    							<?php
    <?php wp_list_pages('title_li=');
    #show_page_menu($menuClass,false,false);
    ?>
    
    							<?php #show_categories_menu($menuClass,false); ?>
    						</ul> <!-- end ul#nav -->
    					<?php }
    					else echo($primaryNav); ?>
    			</div> <!-- end .container -->
    		</div> <!-- end #menu -->

    Но по-моему стиль меню слетит.
    По крайней мере это выводит дом. страницу 1-й:

    <?php if (get_option('magnificent_home_link') == 'on') { ?>
    								<li <?php if (is_home()) echo('class="current_page_item"') ?>><a href="<?php bloginfo('url'); ?>"><?php _e('Home','Magnificent') ?></a></li>
    							<?php }; ?>

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

    <?php show_page_menu($menuClass,false,false); ?>
    
    							<?php show_categories_menu($menuClass,false); ?>

    if (function_exists('wp_nav_menu')) {
    						$primaryNav = wp_nav_menu( array( 'theme_location' => 'primary-menu', 'container' => '', 'fallback_cb' => '', 'menu_class' => $menuClass, 'menu_id' => $menuID, 'echo' => false ) );
    					};

    Эта штука точно отвечает за сортировку меню.
    Можно подредактировать,но сначала на всякий пожарный сохранить исходные данные.
    ‘menu_id’ = $menuID и т.п. Методом тыка опять же.

    Как понял переменная primaryNav отвечает за «приоритет» пункта меню.
    Как Вы вначале заметили — if (function_exists(‘wp_nav_menu’)) {
    — здесь копать…

    Да я понял, что здесь копать. Но что ни меняю — все остается по прежнему. Либо вообще меню пропадает

Просмотр 15 ответов — с 1 по 15 (всего 18)
  • Тема «Изменение порядка пунктов в меню навигации» закрыта для новых ответов.