Самоссылки в навигации
Дублируя комментарий к посту о самоссылке (кстати, я тогда просто не подумал о простейшем is_home()&&!is_paged(), который легко обходит и установку во вложенный каталог) привожу код для удаления ссылок в трех самых часто используемых списках в шаблонах Вордпресса, который использую лично я. Дублирую потому что кинул неправильный код из старых каких-то тем, и потому что в комментариях были съедены целые куски кода.
Дело в том, что по умолчанию ВП пихает на каждый элемент кучу бесполезных классов, даже если смотреть со стороны семантики — ну кому интересен номер конкретной рубрики в базе. И на элементе с текущей же рубрикой/тегом/страницей, если мы находимся на ней, также вешается класс (единственный полезный, да). При этом ссылка остается активной, что ведет все к той же «петле».
Так что у нас две задачи. Первая — удалить весь мусор в списке (механизм ВП не оставляет нам выбора, как использовать регэкспы). Вторая — если мы находимся на нужной странице, убрать тег ссылки, ну и, естетсвенно, на li оставив класс для выделения (но .current-cat, .current-page я меняю на просто .current — этого всегда достаточно).
Функция получается такая:
function correct_list_pages($output){
if(!is_category())
return preg_replace('~<li([^>]+)>~i','<li>',$output);
$output=preg_replace('~(<li)[^>]+(current)[^>]*(>[^<]*)<a[^>]+>([^>]*)</a>([^<]*</li>)~i','$1 $2$3$4$5',$output);
$output=preg_replace('~<li\s*class="([^>]+)"\s*>~i','<li>',$output);
$output=preg_replace('~<li current>~i','<li class="current">',$output);
return $output;
}
Красота и скорость здесь не особенно важны, так что и замарачиваться с ними не стоит. Полученную функцию вешаем на нужный(е) фильтр(ы) в functions.php, который лежит в теме.
Например:
add_filter('wp_list_pages', 'correct_list_pages', 1);
add_filter('wp_list_categories', 'correct_list_pages', 1);
add_filter('wp_tag_cloud', 'correct_list_pages', 1);
Минус этого подхода в том, что при немного другом формате может не срабатывать. Кроме того, сторонние плагины (например, Simple Tags) этим хуком не подхватятся (правда, даже в таких профессиональных плагинов функции не подвешены на хуки, и это отвратительно). Можно, конечно, использовать определение текущей по ID (его можно найти по -\d+\s), но и так достаточно.
Понятное дело, есть тонкость в определении, нужно здесь убирать ссылку или оставлять ее, а в некоторых случаях — убирать и сам титл рубрики/тега/страницы. Тут обычно каждый решает сам, но лучше включить логику.




Оставляет, но он не менее геморройный, чем регулярные выражения.
Можно передавать в параметре walker объект, порождённый от Walker. Тогда WordPress будет использовать именно его для отрисовки списка. А с облаком тэгов без регэкспов не справиться.
Использовать здесь Уолкер — сизифов труд, да.
Да, предыдущее решение у меня работало до тех пор, пока не появились вложенные странички.
Стал пробовать этот вариант — мусор уходит, а ссылки остаются...
У меня не получилось применить это для Меток и страниц. Заработало только с категориями)
Напишите пожалуйста код для меток, страниц и категории для вставки в Functions.php и шаблон.php
p.s. Я не умею программировать на php. Знаю хорошо только html и css
Насколько я понял, этот код только для категорий.
Я подменял «is_category» на всевозможные «is_tag», «is_tag_cloud», «is_page», но это не помогло.