• драсьте! решил сделать два варианта второстепенного меню для гостей и зарегистрированных.

    вот, как у меня в файле header.php выводится второстепенное меню:

    <?php if($theme->display('menu_secondary')) { ?>
            <div class="clearfix">
                <?php $theme->hook('menu_secondary'); ?>
            </div>
        <?php } ?>

    найдя самый простейший код, который разграничивает данные для гостей и пользователей:

    <?php
    if (!is_user_logged_in()) :
        // Посетитель является анонимным гостем:
        wp_nav_menu(array('theme_location' => 'название-меню-1'));
    else :
        // Посетитель является авторизованным пользователем:
        wp_nav_menu(array('theme_location' => 'название-меню-2'));
    endif;
    ?>

    я методом ослиного скрещивания получил такой код:

    <?php if($theme->display('menu_secondary')) { ?>
            <div class="clearfix">
    <?php
    if (!is_user_logged_in()) :
        // Посетитель является анонимным гостем:
        wp_nav_menu(array('theme_location' => 'secondary-out'));
    else :
        // Посетитель является авторизованным пользователем:
        wp_nav_menu(array('theme_location' => 'secondary-in'));
    endif;
    ?>
            </div>
        <?php } ?>

    и все как бы круто, меню показывается такое какое где надо.
    но одна проблема — оба эти меню идут обычным списком — они не берут настройки внешнего вида для класса clearfix из тега div. даже пробовал два div‘a для каждого случая вписывать, не помогло.
    помогите, пожалуйста подредактировать код.

Просмотр 15 ответов — с 1 по 15 (всего 17)
  • а полный код, который в итоге получился приведите тут.
    не совсем понятно, на фига вы в див clearfix запихнули меню — этот класс, обычно, используется как раз для сброса всех установленных стилей, а не наоборот.

    PS код стиля тоже бы не помешало указать.

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

    последний — это тот, на который я его заменил.

    я пошаманил — поменял на такой код:

    <?php if (!is_user_logged_in()): ?>
    <div id="menu-secondary-container"> // в файле <strong>styles.css</strong> я нашел этот класс, но особо не помогло
    <?php wp_nav_menu(array('theme_location' => 'secondary-out')); ?>
    </div>
    <?php else: ?>
    <div id="menu-secondary-container">
    <?php wp_nav_menu(array('theme_location' => 'secondary-in')); ?>
    </div>
    <?php endif ?>

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

    вот что у меня написано в файле style.css по поводу второстепенного меню.

    /* Menu Secondary
    ----------------------------*/
    
    .menu-secondary-container {
        position:relative;
        height: 40px;
        z-index: 300;
        background: url(images/menu-secondary-bg.png) left top repeat-x;
        border-bottom: 3px solid #F8B530;
    }
    
    .menu-secondary {}
    
    .menu-secondary ul {
        min-width: 160px;
    }
    
    /* First Level - Menu Secondary */
    .menu-secondary li a {
        color: #FFFFFF;
        padding: 15px 15px 14px 15px;
    	text-decoration: none;
        font-family: 'LazurskiC', sans-serif;
        font-size: 13px;
        text-transform: uppercase;
        font-weight: normal;
        text-shadow: 0 1px 0 #4B4B4B;
    }
    
    .menu-secondary li a:hover, .menu-secondary li a:active, .menu-secondary li a:focus,
    .menu-secondary li:hover > a, .menu-secondary li.current-cat > a, .menu-secondary li.current_page_item > a, .menu-secondary li.current-menu-item > a {
        color: #FFFFFF;
        background: url(images/menu-secondary-bg.png) left -140px repeat-x;
        outline: 0;
        text-shadow: 0 1px 0 #4B4B4B;
    }
    
    /* Child Levels - Menu Secondary */
    
    .menu-secondary li li a {
    	color: #fff;
        background: #6D6D6D;
        padding: 10px 15px;
        text-transform: none;
        margin: 0;
        font-weight: normal;
        text-shadow: none;
    }
    
    .menu-secondary li li a:hover, .menu-secondary li li a:active, .menu-secondary li li a:focus,
    .menu-secondary li li:hover > a, .menu-secondary li li.current-cat > a, .menu-secondary li li.current_page_item > a, .menu-secondary li li.current-menu-item > a {
    	color: #fff;
        background: #F8B530;
        outline: 0;
        text-shadow: none;
    }
    
    /* Arrows - Menu Secondary */
    
    .menu-secondary a.sf-with-ul {
        padding-right: 26px;
        min-width: 1px;
    }
    .menu-secondary  .sf-sub-indicator {
        position: absolute;
        display: block;
        overflow: hidden;
        right: 0;
        top:  0;
        padding: 14px 13px 0 0;
    }
    
    .menu-secondary li li .sf-sub-indicator {
    
        padding: 9px 13px 0 0;
    }
    
    /* Shadows - Menu Secondary */
    
    .wrap-menu-secondary .sf-shadow ul {
        background:	url('images/menu-secondary-shadow.png') no-repeat bottom right;
    }

    в стилях .menu-secondary — в коде же ID, то есть #menu-secondary

    это как минимум, один косяк. с .menu-secondary-container тот же косяк.

    ну, косяк, косяком, но до того, как я решил сделать два secondary меню все показывало норм. это у меня тема такая интересная 🙂

    можете как-то посоветовать, чтобы стиль применялся к обоим меню?

    еще раз — или измените id на class или в styles вместо точки пишите #

    понял. я просто в этом синтаксисе не очень сведущ.. в принципе потому и обратился сюда.
    привел код к такому виду:

    <?php if($theme->display('menu_secondary')) { ?>
            <div class="menu-secondary">
    <?php
    if (!is_user_logged_in()) :
        wp_nav_menu(array('theme_location' => 'secondary-out'));
    else :
        wp_nav_menu(array('theme_location' => 'secondary-in'));
    endif;
    ?>
            </div>
        <?php } ?>

    немного помогло, но как-то не очень
    стиль применился, но формат остался в виде списка..
    одно понять не могу — там изначально никакой стиль не применялся, почему сейчас не применяется?

    вы издеваетесь? 🙂
    вот эта конструкция:

    <?php if($theme->display('menu_secondary')) { ?>
            <div class="menu-secondary">

    у вас вообще не срабатывает.
    а поэтому стили и не применяются.

    да нет, не издеваюсь, я пытаюсь решить проблему 🙂
    и сюда написал, вдруг помогут 🙂

    я просто в php коде вперемешку с html не шарю. я только html учил очень давно 🙂

    не ругайте, вот к чему я пришел — думаю, все будет верно, только у меня проблема с синтаксисом, я понимаю.
    я просто вставил код который у меня был в код выбора.

    <?php if (!is_user_logged_in()) {
    
        <?php if($theme->display('menu_secondary-in')) { ?>
            <div class="clearfix">
                <?php $theme->hook('menu_secondary'); ?>
            </div>
        <?php } ?>
    
    } else {
    
        <?php if($theme->display('menu_secondary-out')) { ?>
            <div class="clearfix">
                <?php $theme->hook('menu_secondary'); ?>
            </div>
        <?php } ?>
    
    } ?>

    ну вот, работает же 🙂

    не. с этим кодом вообще сайт не грузится.

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Попробуйте так:

    <?php if (!is_user_logged_in()) { ?>
    
        <?php if($theme->display('menu_secondary-in')) { ?>
            <div class="clearfix">
                <?php $theme->hook('menu_secondary'); ?>
            </div>
        <?php } ?>
    
    <?php } else { ?>
    
        <?php if($theme->display('menu_secondary-out')) { ?>
            <div class="clearfix">
                <?php $theme->hook('menu_secondary'); ?>
            </div>
        <?php } ?>
    
    <?php } ?>

    о! класс! все правильно! только одна проблема.
    у меня-то прописан только один класс — menu_secondary, подписи в конце — -in и -out не канают.
    оно ведь как раз этой строкой подхватывает стиль темы и пункты меню.
    теперь вопрос геммороя третьего уровня. как сделать, чтобы он подхватывал стиль от того меню, а само меню было другим…
    я в этом плане уже точно не знаю. за последние две недели с ног на голову код перелопатил….

    в стилях исправьте. например вместо

    .menu-secondary {}

    пишите

    .menu-secondary-out, .menu-secondary-in {}

    и так для всех стилей меню.

    я в стили вообще прописал копии от основной menu-secondary.

    нашел в просторах интернета другой вариант:

    //добавляем нужные кнопки в меню
    add_filter('wp_nav_menu_items', 'add_login_logout_link', 10, 2);
    
    function add_login_logout_link($items, $args) {
    $loginoutlink = wp_loginout('index.php', false);
    if(!is_user_logged_in())
    	 $items .= '';
    else
    	 $items .= '<li><a href="/pers/">Personal</a></li>';
    	 $items .= '<li><a href="/wp-admin/">Админка</a></li>';
    	 $items .= '<li>'. $loginoutlink .'</li>';
     return $items;
    }

    код, как ни странно, работает, добавляя кнопки, что мне нужны. правда я понять не могу, почему он как-то наоборот это делает. else — это же вроде «если в условии ответ нет».
    да и тем более он добавляет все равно кнопки «Админка» и «Вход», если пользователь не зарегистрирован — мне эти кнопки не нужны..

Просмотр 15 ответов — с 1 по 15 (всего 17)

Тема «двойное меню» закрыта для новых ответов.