Выделяем активные страницы в WordPress

pages

Название статьи говорит само за себя, сегодня я хочу рассказать как сделать в WordPress довольно простую, но все же весьма полезную функцию – выделение активной страницы.

Вы удивитесь, насколько просто и легко можно реализовать это в WordPress, дело в том что здесь для этого уже все предусмотрено, вам фактически нужно только прописать в css-файле стиль активной страницы.

Разберем это на простом примере. Ниже приведен небольшой фрагмент кода, для отображения навигации по страницам в WordPress.

[php]
<div id="menu">
<ul>
<li><a href="<?php echo get_settings(‘home’); ?>">Home</a></li>
<?php wp_list_pages(‘title_li=&depth=1’); ?>
</ul>
</div>
[/php]

Теперь, если сохранить страницу как html, или посмотреть фаербагом, мы увидим примерно следующее:

[html]
<div id="menu">
<ul>
<li><a href="http://example.com/">Home</a></li>
<li class="page_item"><a href="http://example.com/page-1/" title="Page 1">Page 1</a></li>
<li class="page_item"><a href="http://example.com/page-2/" title="Page 2">Page 2</a></li>
</ul>
</div>
[/html]

Обратите внимание, что класс page_item, присваивается только ссылкам, вызванным функцией wp_list_pages, то есть фактически последующие изменения не коснутся ссылки на главную страницу.

Далее, если мы перейдем по ссылке на другую страницу, код html измениться следующим образом:

[html]
<div id="menu">
<ul>
<li><a href="http://example.com/">Home</a></li>
<li class="page_item"><a href="http://example.com/page-1/" title="Page 1">Page 1</a></li>
<li class="page_item"><a href="http://example.com/page-2/" title="Page 2">Page 2</a></li>
</ul>
</div>
[/html]

То есть, к текущей активной странице добавляется класс “current_page_item”.  А дальше как говорится дело техники, достаточно назначить соответствующий стиль этому классу в css-файле:

[css]
#menu ul li.current_page_item {
background: #4A7EB8;
}
[/css]

В результате, мы получили выделение любой текущей активной страницы (кроме главной) светло-синим цветом (как на картинке в примере).

Если же вам нужно, чтобы главная страница также отмечалась в качестве активной, для этого нужно написать немного php-кода:

[php]
<div id="menu">
<ul>
<li class="<?php if (is_home()) { echo "current_page_item"; } ?>">
<a href="<?php echo get_settings(‘home’); ?>">Home</a>
</li>
<?php wp_list_pages(‘title_li=&depth=1’); ?>
</ul>
</div>
[/php]

В вышеприведенном коде, задействован условный тег Woprdpress is_home(), который проверяет является ли текущая страница домашней, то есть главной, и если это условие выполняется, то к ней также добавляется класс current_page_item.

С помощью условных тегов WordPress, можно делать и другие интересные вещи, но об этом мы поговорим в следующей статье.

Вольный перевод статьи: WordPress: Active Page Tabs


Posted

in

by

Comments

18 responses to “Выделяем активные страницы в WordPress”

  1. 166MMX Avatar

    Спасибо, буду разбираться

  2. Жомарт Avatar

    Спасибо большое за описанный пример. Но мне пришлось в дописывать в конец выражения в CSS “a”. Без этого не хотело работать.

    #menu ul li.current_page_item a {
    background: #4A7EB8;
    }

    1. dreamhelg Avatar
      dreamhelg

      В общем-то это немного странно, а попробуйте записать вот так:

      #menu li.current_page_item{
      background: #4A7EB8;
      }

      и если после этого заработает, то это видимо моя вина, ul здесь возможно лишний.

  3. Андрей Avatar

    dreamhelg, убрал ul, все равно работает только тогда, когда в конце a добавляю

  4. […] This post was mentioned on Twitter by Виталий Кулёв. Виталий Кулёв said: RT @ilya_kochnev: Выделяем активные страницы в WordPress http://dreamhelg.ru/2009/01/wordpress-active-page/ Помогла статья однажды… […]

  5. Grabowski Avatar

    Скажите, пожалуйста, а как поступить вот в таком случае?
    Есть некое количество страниц – скажем, А, Б и В. Страница Б имеет несколько дочерних страниц (1, 2 и 3). Для вывода списка страниц в сайдбаре используется , то есть будет отображаться только список родительских страниц. Хотелось бы сделать так, чтобы при посещении какой-либо из дочерних страниц (1, 2, 3) в качестве текущей выделялась бы ссылка на её родительскую (Б).

    Огромное спасибо за статью и прошу прощения за корявое объяснение. 🙂

  6. Grabowski Avatar

    Используется “depth” равная 1 — почему-то в предыдущем комментарии это пропало.

  7. rubas Avatar
    rubas

    спасибо огромное! вы оказали неоценимую помощь) +1

  8. Виктор Avatar

    Спасибо, почти все получилось.
    Если для страниц прописывается команда – current_page_item, то какая команда прописывается если в меню проставлены ссылки на страницу по тэгам?

  9. Mental Avatar
    Mental

    Здравствуйте!

    Спасибо огромное, всё работает, но мне нужно, чтоб активная страница имела другой цвет шрифта, а не фона, т.е. мне необходимо заменить “background:…” на “color:…”

    Но почему-то это не работает, может что-то с чем-то конфликтует?
    приведу часть кода:

    #menu a{
    color: #fff;
    }
    #menu a:hover{
    color:#AD7CA7;
    }
    #menu a:active{
    color:red;
    }
    #menu li{
    font: 14px Arial, Tahoma, Verdana, sans-serif;
    display: inline;
    padding: 5px 30px 5px 0px;
    }
    #menu .current_page_item {
    color: #FFFF00;
    font-weight:bold;
    }

    _____
    font-weight:bold; работает, а color нет.

    Помогите пожалуйста.

  10. Mental Avatar
    Mental

    Решил действовать по схеме товарища “Жомарт”, что отписался выше 🙂

    #menu .current_page_item a {
    color:#AD7CA7;
    font-weight:bold;
    }

    c “a” на конце всё работает, думаю, что это связано с тем, что активная страница остаётся ссылкой, т.е. она кликабельна.

    Теперь буду искать возможность отключения кликабельности активной страницы 🙂

    Спасибо ещё раз!

    1. Максим Avatar

      Можно просто

      ul li.current_page_item a {
      cursor: default;
      }

      1. Mental Avatar
        Mental

        Спасибо огромное! Спустя полтора года снова понадобилась эта информация и набрёл на сайт, в комментариях увидел какого-то “Mental”, а оказалось, что это я сам и есть 😀

        Спасибо большое ещё раз! Только сейчас прочитал ваш ответ ))

  11. Петр Avatar

    Спасибо большое за статью!

  12. Lena Avatar
    Lena

    а как сделать чтобы класс вешался не current_page_item, а какой-то свой – active, например?

  13. Евгений Avatar

    Спасибо! Долго голову ломал как меню выделить и много статей перечитал, с помощью ваших указаний разобрал за 30 минут и сделал)

    кстати у меня нормально сработал такой код:
    #menu ul li.current_page_item a{
    color: #fff;
    display: block;
    text-decoration: none;
    background:url(images/menu.jpg) repeat-x;
    }

    Но я теперь голову ломаю над другим как выделить категорию (меню категорий) когда ты находишься в статей от это категории =) Может знает кто?)

  14. Сергей Avatar
    Сергей

    Спасибо друг!, подсказал.
    ниже пример применения класса к произвольному меню header_menu

    nav ul li.current_page_item a{
    color: #429FD3;
    }

  15. Диана Avatar
    Диана

    Большое спасибо, вы – умница!

Leave a Reply to Жомарт Cancel reply

Your email address will not be published. Required fields are marked *