Удаляем циклические ссылки вместе

Удаляем циклические ссылки вместе изображение поста

Циклическая ссылка ведет пользователя на ту же страничку, где он только что находился. Смысла в таких линках ноль, да и поисковые системы их не жалуют. Каждая вторая тема для WordPress буквально напичкана этими циклическими ссылками. Разбив статью на две части, мы постараемся максимально подробно рассказать о том, каким образом можно избавиться от них.

Как удалить линк, который ссылается на самого себя?

Сначала было бы неплохо найти эту циклическую ссылку. В ВордПрессе она находится в шаблоне web-сайта, чаще всего в «Одна запись»:

content-single

Далее вы ищете код, который хотя бы приблизительно похож на вот этот:

<a href=»/<?php the_permalink(); ?>»><?php the_title(); ?></a>

После чего делаете с ним такие махинации:

<?php the_title(); ?>

В конечном счете, вместо ссылки вы будете видеть текст заголовка.

Как удалить с логотипа циклическую веб-ссылку?

Отметим, что ссылка эта находится в файле «header.php». Воспользуемся элементарным php-условием:

<?php
if ( is_home() && !is_paged() ) {
echo(‘<p class=»logo»>Site.ru</p>’); // код, который будет выводится на главной странице
} else {
echo(‘<p><a class=»logo» href=»/»>Site.ru</a></p>’); // действие для остальных страниц
}
?>

Может быть такое, что ваши логотип и ссылка имеют такой вид:

<a href=»/<?php echo esc_url( home_url( ‘/’ ) ); ?>» title='<?php bloginfo( ‘name’ ); ?>’ rel=»home»><?php bloginfo( ‘name’ ); ?></a>

В таком случае, перед «обращением» в php-условие необходимо заменить все на обычный html-код. Переделка выглядит так:

<a href=»/» title=»Главная страница» rel=»home»>Имя сайта</a>

Это же необходимо проделать с логотипом, если он был задан картинкой:

<img src=»/<?php header_image(); ?>» alt='<?php bloginfo( ‘name’ ); ?>’ />

Меняем этот код на следующий:

<img src=»/wp-content/themes/ВАША_ТЕМА/images/НАЗВАНЕ_КАРТИНКИ.jpg» alt=»Главная страница» />

И только после этого помещаем в php-условие:

Как можно удалить ссылку на страничку в менюшке Вордпресса?

Способов выведения меню в WordPress достаточно много, однако в большинстве тем это происходит с помощью опции wp_nav_menu.

Для начала вам необходимо найти это меню, а затем заменить вышеупомянутый файл на wp_nav_menu_extended()

Например:

<?php wp_nav_menu_extended( array( ‘theme_location’ => ‘primary’, ‘menu_class’ => ‘nav-menu’) ); ?>

Далее открываем файл «Функции» (functions.php)

И после <?php надо будет вставить такой вот код:

function wp_nav_menu_extended($args = array()) {
$_echo = array_key_exists(‘echo’, $args) ? $args[‘echo’] : true;
$args[‘echo’] = false;

$menu = wp_nav_menu($args);

// Load menu as xml
$menu = simplexml_load_string($menu);

// Find current menu item with xpath selector
if (array_key_exists(‘xpath’, $args)) {
$xpath = $args[‘xpath’];
} else {
$xpath = ‘//li[contains(@class, «current-menu-item») or contains(@class, «current_page_item»)]’;
}

$current = $menu->xpath($xpath);

// If current item exists
if (!empty($current)) {
$text_node = (string) $current[0]->children();

// Remove link
unset($current[0]->a);

// Create required element with text from link
$element_name = $args[‘replace_a_by’] ? $args[‘replace_a_by’] : ‘span’;

$dom = dom_import_simplexml($current[0]);
$n = $dom->insertBefore(
$dom->ownerDocument->createElement($element_name, $text_node),
$dom->firstChild
);

$current[0] = simplexml_import_dom($n);
}

$xml_doc = new DOMDocument(‘1.0’, ‘utf-8’);
$menu_x = $xml_doc->importNode(dom_import_simplexml($menu), true);
$xml_doc->appendChild($menu_x);

$menu = $xml_doc->saveXML($xml_doc->documentElement);

if ($_echo) {
echo $menu;
} else {
return $menu;
}
}

После этого циклические ссылки исчезнут во всех категориях.

Применение ссылки-якоря вместо традиционных линков

Если вы не хотите разбираться в нюансах программирования или работаете с другим движком, есть парочка других вариантов удаления нехороших ссылок. Первый способ мы распишем прямо сейчас. Он заключается в том, что в конце ссылки необходимо поставить хэш-тег «решетка».

Например, раньше было вот так:

<a href=»http://site.ru/kategoriya.html»>Категория</a>

А после изменений приобрело такой вид:

<a href=»http://site.ru/kategoriya.html#2″>Категория</a>

После хэш-тега можно ставить любой текст (ssilka2, menu, 2). Поскольку все ссылки на сайте должны куда-то ссылаться, вполне логичным будет создание закладки – области, в которую ведет якорь-ссылка. Для этого рядом с линком (или в месте, куда нужно перенести фокус клиента) вставляем:

<a name=»2″></a>

Вместо двойки прописываем текст, идущий после хэш-тега «решетка».

Финальный код будет выглядеть так:

<a name=»2″></a><a href=»http://site.ru/kategoriya.html#2″>Категория</a>

Ссылки-якоря циклическими не являются. Во-первых, потому что они не открываются в новых вкладках или окнах и не вводят пользователей в заблуждение. Во-вторых, они создавались для «перемещения» посетителя по текущей страничке. Следовательно, ничего плохого в них быть не может.

Удаление ссылок-якорей из даты в ваших комментариях

Конечно, если вы считаете, что ссылки эти не нужны, можете избавиться от них вполне традиционным способом. Откройте файл functions.php и после <?php вставьте такой код:

function mytheme_comment($comment, $args, $depth) {
$GLOBALS[‘comment’] = $comment;
extract($args, EXTR_SKIP);

if ( ‘div’ == $args[‘style’] ) {
$tag = ‘div’;
$add_below = ‘comment’;
} else {
$tag = ‘li’;
$add_below = ‘div-comment’;
}
?>
<<?php echo $tag ?> <?php comment_class( empty( $args[‘has_children’] ) ? » : ‘parent’ ) ?> id=»comment-<?php comment_ID() ?>»>
<?php if ( ‘div’ != $args[‘style’] ) : ?>
<div id=»div-comment-<?php comment_ID() ?>» class=»comment-body»>
<?php endif; ?>
<div class=»comment-author vcard»>
<?php if ( $args[‘avatar_size’] != 0 ) echo get_avatar( $comment, $args[‘avatar_size’] ); ?>
<?php printf( __( ‘<cite class=»fn»>%s</cite> <span class=»says»>says:</span>’ ), get_comment_author_link() ); ?>
</div>
<?php if ( $comment->comment_approved == ‘0’ ) : ?>
<em class=»comment-awaiting-moderation»><?php _e( ‘Your comment is awaiting moderation.’ ); ?></em>
<br />
<?php endif; ?>

<div class=»comment-meta commentmetadata»>
<?php
/* translators: 1: date, 2: time */
printf( __(‘%1$s at %2$s’), get_comment_date(),  get_comment_time() ); ?><?php edit_comment_link( __( ‘(Edit)’ ), ‘  ‘, » );
?>
</div>

<?php comment_text(); ?>

<div class=»reply»>
<?php comment_reply_link( array_merge( $args, array( ‘add_below’ => $add_below, ‘depth’ => $depth, ‘max_depth’ => $args[‘max_depth’] ) ) ); ?>
</div>
<?php if ( ‘div’ != $args[‘style’] ) : ?>
</div>
<?php endif; ?>
<?php

}

Далее открываем файл comments.php и находим там код:

<?php wp_list_comments(); ?>

Его нужно заменить на:

<?php wp_list_comments( ‘type=comment&callback=mytheme_comment’ ); ?>

Напоминаем, что если при внесении правок размер или цвет шрифта изменились, все это легко правится с помощью «Списка стилей style.css».

Удаляем циклические линки в replytocom

Как обычно, открываем файл functions.php и после <?php добавляем следующий код:

function add_comment_custom_reply_link($link, $args, $comment){
$comment = get_comment( $comment );

// If no comment author is blank, use ‘Anonymous’
if ( empty($comment->comment_author) ) {
if (!empty($comment->user_id)){
$user=get_userdata($comment->user_id);
$author=$user->user_login;
} else {
$author = __(‘Anonymous’);
}
} else {
$author = $comment->comment_author;
}
// If the user provided more than a first name, use only first name
if(strpos($author, ‘ ‘)){
$author = substr($author, 0, strpos($author, ‘ ‘));
}
// Replace Reply Link with «Reply to &lt;Author First Name>»
$reply_link_text = $args[‘reply_text’];
$link = str_replace(array($reply_link_text, ‘<a’, ‘/a>’, ‘href’), array(‘Ответ для ‘.$author, ‘<span’, ‘/span>’, ‘rel’), $link);
return $link;
}
add_filter(‘comment_reply_link’, ‘add_comment_custom_reply_link’, 10, 3);

Опять-таки, можно поиграть со стилями в файле style.css так, как вам больше нравится. Например:

.reply {
margin-bottom:15px;
}
.comment-reply-link  {
color: #0c72a2;
}
.comment-reply-link:hover  {
text-decoration: underline;
cursor: pointer;
}

Комментарии