Динамическое меню на php

На PHP можно сделать вот такое динамическое меню:

<div id="nav">
    <ul>
        <li><?php
            $theuri = $_SERVER['REQUEST_URI'];
            if ( ($theuri =="/") or ($theuri =="/index.php") ) {
            $itemis = "Home";
            } 
            else {
            $itemis = "<a href=\"/\">Home</a>";
            }
            echo $itemis;
            ?>
        </li>
        <li><?php
            $theuri = $_SERVER['REQUEST_URI'];
            if ( ($theuri =="/about/") or ($theuri =="/about/index.php") ) {
            $itemis = "About";
            } 
            else {
            $itemis = "<a href=\"/about/\">About</a>";
            }
            echo $itemis;
            ?>
        </li>
    </ul>
</div>

Оно реализует один очень важный (с точки зрения Якоба Нильсена :lol:) эффект. Отсутствует ссылка на активную страницу! Что, в принципе, с позиции юзабилити, на самом деле очень важная вещь.

Так вот, проблема в следующем… Как, то же самое сделать в связке с wp-тегом wp_page_menu()?
У меня самого, что-то пока мозгов не хватает…

Ну кто-нибудь, подскажите, пожалуйста!

Может я непонятно сформулировал вопрос?
Мне нужно, чтобы вставив тег wp_page_menu() и создав в админке меню, оно было не простым, а чтобы активный пункт не был ссылкой. Например на главной странице по адресу http://mysite.ru/, было так:

Home | [url]About[/url],

а на странице About по адресу http://mysite.ru/about/, было так:

[url]Home[/url] | About

Есть, вышеприведённый php-код, который это реализует, но тогда меню надо делать вручную, без тега wp_page_menu() и соответственно им нельзя будет управлять из админки (менять пункты меню, порядок и т. д.).
Вот, как это всё совместить???

Возможно, будет полезен плагин Remove Link to Current Page: http://wordpress.org/extend/plugins/remove-link-from-current-page/.
Однако есть нюанс:

вставив тег wp_page_menu() и создав в админке меню

Меню, которое создаётся в админке, отображается при помощи функции wp_nav_menu(). Если вы её и имели в виду, то в плагине это предусмотрено.
Если речь идёт именно о wp_page_menu(), то могут потребоваться изменения.

Ну, можно и wp_nav_menu().

Просто хотелось обойтись без плагина. Лучше прописать что-нибудь в functions.php.
Этот плагин пробовал, действительно работает.
Даже хотел в нём разобраться, чтобы раздербанить его и прописать всё в functions.php, но не смотря на то, что в плагине всего шесть строчек, ничего не понял (всё таки с php у меня пока туго).

Блин, только четыре дня назад читал где-то, что лучше использовать wp_page_menu() вместо wp_nav_menu(). Но уже забыл где и почему лучше…

Добавил в плагин строчку

add_filter( 'wp_page_menu',   'no_link_current_page' );

теперь работает и с тегом wp_page_menu().

Но, как обойтись вообще без плагина, так и не понял…

Всё разобрался!
Тупо прописал в functions.php весь код плагина:

function no_link_current_page( $p ) {
    return preg_replace( '%((current_page_item|current-menu-item)[^<]+)[^>]+>([^<]+)</a>%', '$1<span>$3</span>', $p, 1 );
}

add_filter( 'wp_list_pages', 'no_link_current_page' );
add_filter( 'wp_nav_menu',   'no_link_current_page' );
add_filter( 'wp_page_menu',   'no_link_current_page' );

и всё заработало!

Сергей, спасибо за подсказку!

Anonymous
Отправить
Ответ на: