• Добрый день. Натягиваю шаблон html+css на WordPress.

    Испытал трудности с меню. В шаблоне оно выводится так:

    <div  id="nav">
      <ul>
       <li id="current"><a href="index.html">Home</a></li>
       <li><a href="page1.html">Page 1</a></li>
       <li><a href="page2.html">Page 2</a></li>
    </ul>

    WordPress же генерирует:

    <div class="menu">
      <ul>
       <li class="page_item page-item-6 current_page_item"><a href="ссылка">Страница</a></li>
       <li class="page_item page-item-8"><a href="ссылка">Страница</a></li>
    </ul>

    Собственно, получается совсем не по шаблону меню. Я знаю поверхностно CSS стили. И как понимаю, нужно редактировать их, а не вывод WordPress.

    Подскажите пожалуйста, чего нужно изменить. Вот кусок кода с меню из CSS:

    /*  navigation  */
    #header #nav {
    	position: absolute;
    	left: 15px;	top: 0px;
    	margin: 0; padding: 0;
    	overflow: hidden;
    	height: 60px;
    	width: 900px;
    }
    #header #nav ul {
    	float: left;
    	margin: 0;	padding: 0;
    	width: 100%;
    	list-style: none;
    }
    #header #nav ul li {
    	float: left;
    	margin: 0; padding: 0 0 0 5px;
    }
    #header #nav ul li a:link,
    #header #nav ul li a:visited {
    	float: left;
    	margin: 0;
    	padding: 30px 15px 17px 11px;
    	font: bold 12px 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, Sans-Serif;
    	text-transform: lowercase;
    	color: #867474;
    }
    #header #nav ul li a:hover,
    #header #nav ul li a:active {
    	border: none;
    	color: #fff;
    }
    #header #nav ul li#current_page_item {
    	background: url(../images/left-nav-bg.gif) no-repeat;
    }
    #header #nav ul li#current_page_item a {
    	background: url(../images/right-nav-bg.gif) no-repeat right top;
    	color: #f0e8e8;
    }

Просмотр 10 ответов — с 1 по 10 (всего 10)
  • Вообще, определить вывод требуемым образом не должно составить труда, все есть в кодексе. Однако, если нет желания править код вывода можно изменить css, суть не изменится.
    Все, что нужно сделать это #nav заменить на .menu. Единственное, что следует предусмотреть, так это то, что класс .menu может использоваться где-то еще в блоке #header.

    Пробовал ставить .menu — но не помогло. Нашёл какой-то вариант, якобы генерировать своё меню через Walker_Nav_Menu. Ок.

    Делаю такой код:

    class mainMenuWalker extends Walker_Nav_Menu {
      function start_el(&$output, $item, $depth, $args) { 
    
        // назначаем атрибуты a-элементу
        $attributes.= !empty( $item->url ) ? ' href="' .esc_attr($item->url). '"' : '';
        $item_output = $args->before; 
    
        // проверяем, на какой странице мы находимся
        $current_url = (is_ssl()?'https://':'http://').$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
        $item_url = esc_attr( $item->url );
        if ( $item_url != $current_url ) $item_output.= '<li><a'. $attributes .'>'.$item->title.'</a>';
        else $item_output.= $item->title; 
    
        // заканчиваем вывод элемента
        $item_output.= $args->after;
        $output.= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
      }
    }

    Выводит:

    <div class="menu-menu-container"><ul id="menu-menu" class="menu">Страница</li>
    <li><a href="ссылка">Страница</a></li>

    Что собственно, тоже не то. Но уже лучше.

    Скажите, как можно вывести простую конструкцию без всего лишнего. Просто:

    <ul>
       <li id="current"><a href="ссылка">Страница</a></li>
       <li><a href="ссылка">Страница</a></li>
       <li><a href="ссылка">Страница</a></li>
    </ul>

    Он все равно генерирует кучу лишнего, сколько я не пытался чего изменять. Документацию смотрел, но решения не нашёл.

    Я не готов прокомментировать php код, что Вы привели. Но я готов порекомендовать решение с использованием wp_nav_menu, возможно, оно окажется для Вас полезным.

    1. Регистрируем меню в functions.php:
      function register_my_menus() {
        register_nav_menus(
          array( 'header-menu' => ( 'Заглавное меню' )));
      	}
      add_action( 'init', 'register_my_menus' );
    2. Выводим его в нужном месте:
      wp_nav_menu( array(
        'theme_location' => 'header-menu',
        ...
        'menu_id'  => 'nav',
        ...
        )
       );
    3. В консоли «Внешний вид» > «Меню» настраивается порядок, количество и пункты меню.

    Что касается стилей, то оооочень странно, что не заработало. Возможно, не только этот кусок отвечает за формирование внешнего вида меню. Если есть ссылка и Вы ее дадите, я скажу как именно и где изменить стили.

    Все равно, не так работает. В стилях вроде ничего больше не отвечает за меню. Ладно, меню — можно сказать статическая часть сайта, не так часто меняется — пропишу вручную в коде, как надо. Так будет проще всего 🙂

    А я добил бы его до конца. Если есть функционал, то разобраться как он работает можно. Ссылку, я так понимаю, Вы не желаете публиковать или сайт локально?

    А знаете, кажется всё ещё проще. Я хотел натянуть на WordPress статичный шаблон Jungleland. Т.к. всё локально, хотел вам дать на него ссылку, а оказалось, что он есть под WordPress уже 🙂

    Надо было сразу погуглить 🙂 Всем спасибо!

    Кстати говоря, те кто делал тему схитрили. Вот как они реализовали меню:

    <div  id="nav">
    
    			<ul>
    
    				<li<?php if ( is_home() or is_archive() or is_single() or is_paged() or is_search() or (function_exists('is_tag') and is_tag()) ) { echo ' class="current_page_item"'; } ?>><a href="<?php echo get_option('home'); ?>/">Home</a></li>
    
    				<?php wp_list_pages('title_li=&depth=1'); ?>	
    
    			</ul>		
    
    		</div>

    Но честно говоря, я лучше скопирую у них нужный мне код. Что-то не нравится мне их реализация. Кнопку «Home» намертво зачем-то вставили.

    Довольно распространённый метод, кстати. На мой взгляд, это жуткая жуть. Но чуть ли не в половине тем меню реализовано именно так.

    Да, уж. Точно жуть. Поэтому, проще самому мне кажется, сделать WordPress шаблон какой надо из готового сверстанного макета в html.

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