Создание кастомного меню с помощью wordpress

127
23 марта 2019, 09:20

Может кто-то посоветовать, как можно средствами wordpress создать данное меню:

      <nav class="header__nav">
        <a class="header__link active" href="#">О компании</a>
        <a class="header__link" href="#">Продукты и решения</a>
        <a class="header__link" href="#">Услуги</a>
        <a class="header__link" href="#">Технологии</a>
        <a class="header__link" href="#">Применение</a>
        <a class="header__link" href="#">Новости</a>
        <a class="header__link" href="#">Контакты</a>
        <a class="header__link" href="#">FAQ </a>
      </nav>

Проблема в том, что от класса active зависит befor данной кнопки. Я сделан следующий код:

<?php
        $defaults = array(
            'theme_location' => 'top_menu',
            'container' => 'nav',
            'container_class' => 'header__nav',
            'echo' => false,
            'fallback_cb' => false,
            'items_wrap' => '%3$s',
            'depth' => 0
        );
        $menu = strip_tags(wp_nav_menu($defaults), '<nav><a>');
        $find = array('<a');
        $replace = array('<a class="header__link"');
        echo str_replace($find, $replace, $menu);
        ?>

И он на первый взгляд отлично справляется, но вся проблема в том, что я не могу вешать класс active на текущей странице. Это наверняка можно сделать как то с помощью walker, но у меня получалось создать только ссылку внутри li. Но все равно получал не то, что нужно. Так же была мысль сохранять состояние в сессию. Но не знаю как, это сделать на wordpress. Может у кого-то была похожая задача.

Обновлено. Я нашел решение, может кому то пригодится... html:

            <?php
        $menu_items = wp_get_nav_menu_items( 2 ); // id or name of menu
        foreach ( (array) $menu_items as $key => $menu_item ) {
            if ( ! $menu_item->menu_item_parent ) {
                echo '<a class=" header__link ' . vince_check_active_menu($menu_item) . '" href='.$menu_item->url.'>';
                echo $menu_item->title;
                echo "</a>";
            }
        }
        ?>

function.php

function vince_check_active_menu( $menu_item ) {
$actual_link = ( isset( $_SERVER['HTTPS'] ) ? "https" : "http" ) . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
if ( $actual_link == $menu_item->url ) {
    return ' active';
}
return '';
READ ALSO
При запросе через Guzzle, источник использует бд от инициатора запроса

При запросе через Guzzle, источник использует бд от инициатора запроса

Такая дилемма: есть 2 проекта на laravel, работают на openserver, и с проекта 1 нужно сделать http запрос на проект 2, про при запросе получается вот такой...

154
Как сократить код PHP?

Как сократить код PHP?

Вопрос новичкаПонимаю, что он может быть банальным, но всё же

158
Высылка переменных из Javascript на e-mail

Высылка переменных из Javascript на e-mail

Есть у меня html страница с формами inputС помощью JS у меня генерируются некоторые переменные

161
Как решить задачи в E-olymp c помощью php?

Как решить задачи в E-olymp c помощью php?

Есть такой замечательный сайт: https://wwwe-olymp

147