Как убрать ссылку "сама на себя" в меню WP?


2013-02-05

Юрий Макаров

Давно известно, что если страница ссылается сама на себя - это плохо как для пользователя, так и для поисковых систем. Пусть это и незначительный фактор ранжирования, но всё же. Поэтому максимально стараемся избавиться от такого рода ссылок. У каждого сайта на WordPress есть возможность создавать меню, причём это можно сделать в админке ("Внешний вид"-"Меню"). У меня таким образом сделано верхнее меню (Рисунок 1).

Верхнее меню на сайте seowind.ru

Рисунок 1. Верхнее меню сайта SeoWind.ru

По-умолчанию все эти 4 ссылки, которые вы видите на рисунке 1, ссылались сами на себя. Это меня не устраивало. И я думаю Вас тоже такой расклад не должен устраивать. Поэтому идём в функции темы (functions.php) и вставляем в него следующий php код:

class mainMenuWalker extends Walker_Nav_Menu {
function start_el(&$output, $item, $depth, $args) {
// назначаем классы li-элементу и выводим его
$class_names = join( ' ', $item->classes );
$class_names = ' class="' .esc_attr( $class_names ). '"';
$output.= '<li id="menu-item-' . $item->ID . '"' .$class_names. '>';
// назначаем атрибуты a-элементу
$attributes.= !empty( $item->url ) ? ' href="' .esc_attr($item->url). '"' : '';
$item_output = $args->before;
// проверяем, на какой странице мы находимся
$current_url = (is_ssl()?'https://':'http://').$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$item_url = esc_attr( $item->url );
if ( $item_url != $current_url ) $item_output.= '<a'. $attributes .'>'.$item->title.'</a>';
else $item_output.= $item->title;
// заканчиваем вывод элемента
$item_output.= $args->after;
$output.= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
}
}

Как видим мы создали персональный класс Walker, который используется функцией выводящей меню - wp_nav_menu.

Далее идем в шаблон, в котором выводится меню. У меня - это header.php. Вместо существующего кода вставляем:

<?php
$walker = new mainMenuWalker ();
wp_nav_menu_tm( array( 'container_id' => 'dropmenu', 'walker' => $walker ) );
?>

И всё! Готово! Теперь, когда находишься на странице, ссылка в меню неактивна. А если поработать в CSS, а тут у каждого индивидуально, то можно добиться выделения цветом текущей страницы. К примеру, из рисунка 1 видно, что я нахожусь в данный момент на странице "Мои услуги".

3 коммент. к записи "Как убрать ссылку "сама на себя" в меню WP?"
  1. Andrei :

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

  2. Sergey :

    Спасибо! Искал, как это сделать, так как действительно важно. Яндекс, например, сам на себя не ссылается нигде.

  3. Gray :

    Гораздо проще. Есть плагин, который не только меню, а вообще все сами-на-себя вырезает. Remove Redundant Links

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *