Здравствуйте! С вами Павел. И в этой статье я хочу рассказать вам как можно «закрыть» ссылки комментаторов своего блога от индексации поисковиками.
За все время существования данного движка, было создано десятки тысяч плагинов. Включая так же те, которые затрагивают работу комментариев. Но в своем случае, я решил пойти нестандартным путем — внес некоторые правки в файл «functions.php» своей темы. И вот, ссылки на на сайты комментаторов закрыты. И более того, я вижу не один способ как их можно скрыть (но об этом позже).
Данный метод скрытия ссылок подходит для любой темы WP. Но! Если вы используете родную тему — к примеру «twentytwelve», то после ее обновления вам повторно придется вносить правки в файл «functions.php», что не удобно при ее следующих обновлениях. Лучше всего использовать данный подход для дочерней темы (как в моем случае), или самописной.
Пример реализации будет приведен на основе темы «twentytwelve». Для проверки можете создать дочернюю тему или править текущую, предварительно сделав бэкап (резервную копию).
И так начнем, идем от самой проблемы
Нам нужно скрыть ссылки на сайты комментаторов. Чтобы определить какая ф-я за это отвечает, открываем файл «comments.php» нашей темы, ищем ф-ю «wp_list_comments». В качества ее параметра, мы передаем массив значений. Ф-я с индексом «callback» отвечает за построение списка комментариев. В нашем случае это функция «twentytwelve_comment». Она нам как раз и нужны. Ее мы сможем найти в файле «functions.php» нашей темы, по адресу «/wp-content/themes/twentytwelve/functions.php».
Открываем файл, ищем функцию «twentytwelve_comment». Ниже, часть кода из файла который нас интересует:
<header class="comment-meta comment-author vcard"> <?php echo get_avatar( $comment, 44 ); printf( '<cite><b class="fn">%1$s</b> %2$s</cite>', get_comment_author_link(), // If current post author is also comment author, make it known visually. ( $comment->user_id === $post->post_author ) ? '<span>' . __( 'Post author', 'twentytwelve' ) . '</span>' : '' ); printf( '<a href="%1$s"><time datetime="%2$s">%3$s</time></a>', esc_url( get_comment_link( $comment->comment_ID ) ), get_comment_time( 'c' ), /* translators: 1: date, 2: time */ sprintf( __( '%1$s at %2$s', 'twentytwelve' ), get_comment_date(), get_comment_time() ) ); ?> </header>
Внутри этой функции ищем другую - «get_comment_author_link». Вот эта вот ф-я отвечает за вывод ссылок на сайты комментаторов. Сейчас нам нужно будет сделать копию этой функции и разместить в файле «functions.php» но уже под другим названием.
Открываем файл «/wp-includes/comment-template.php», находим функцию «get_comment_author_link», копируем ее в буфер, и вставляем в файл «functions.php». Изменяем ей название, скажем на «my_get_comment_author_link». Так же, изменяем название ф-и «get_comment_author_link» в ф-и «twentytwelve_comment» (пример кода приведен выше) на «my_twentytwelve_comment». Не запутались? Надеюсь что нет.
Теперь, нам нужно внести некоторые правки в нашу новую функцию отвечающую за вывод ссылки на комментарий. Ниже приведен пример как это сделано на моем сайте:
function my_get_comment_author_link( $comment_ID = 0 ) { $url = get_comment_author_url( $comment_ID ); $author = get_comment_author( $comment_ID ); if ( empty( $url ) || 'http://' == $url ) { $return = $author; } else { $return = "<span class='s-link' title='$url' onclick="goto('".str_replace('http://', '_', $url)."')">$author</span>"; } return apply_filters( 'my_get_comment_author_link', $return, $author, $comment_ID ); }
Обратите внимание — для ссылок мы используем даже не тег «А» а тег «SPAN», а переход по ссылке реализован с помощью JavaScript функции «goto» которую нам придется вставить в футер темы (данный подход скрытия ссылок придуман не мной, а где-то подсмотрен).
Открываем файл «/wp-content/themes/twentytwelve/footer.php», и вставляем следующий код:
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cscript%20language%3D%22Javascript%22%20type%3D%22text%2Fjavascript%22%3E%0A%09function%20goto(l)%0A%09%7B%0A%09%09window.open(l.replace(%22_%22%2C%22http%3A%2F%2F%22))%3B%0A%09%7D%0A%3C%2Fscript%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="<script>" title="<script>" />
между «<? php wp_footer(); ?>» и «</body>»
Так же не забываем добавить стили в свою тему для класса «s-link», чтобы тег «SPAN» по дизайну не отличался от ссылок вашей темы. В моем случае это буде так:
.comments-area .bypostauthor cite span { position: initial; } .comments-area .bypostauthor cite span.s-link { font-weight: bold; } .comments-area span.s-link, .comments-area .bypostauthor cite span.s-link { cursor: pointer; font-size: 15px; color: #444; padding-left: 0; margin-left: 0; background: white; border: none; } .comments-area span.s-link:hover { color: #21759b; text-decoration: underline; } .comments-area .bypostauthor cite .s-author { position: absolute; }
На этом все.
В одной из следующих статей, я опишу варианты скрытия ссылок с использованием PHP, JQuery и может чего-то еще, если придумаю или где-то подсмотрю.
Ну а в следующей статье я опишу как мне удалось подружить плагин «Hide My Dates» и тему «twentytwelve» (если кто не обратил внимание, то даты комментариев этой темы совместно с этим плагином отображаются не правильно).
Если у вас есть еще какие-то идеи по скрытию ссылок, то о них можно написать в комментариях.
Спасибо за внимание!
Павел, так держать. Полезные вещи публикуешь! А я сейчас делаю себе тему тоже и принципиально на twentytwelve. В ней нет никаких расширенных функций. Я вывод анансов с картинкой на главной писал сам! Пришлось создавать отдельную страницу loop.php, ну а в индексовую выводить как положено, одной строчкой php. Круто по-моему вышло. Если интересно пиши в личку. Поделюсь своим решением. Не забрасывай блог, а то я уже подписался.
Приветствую первого комментатора! Приятно слышать что уже есть один подписчик, это мотивирует и обязует 🙂
Я сделал вывод анонса не тегом more, а функцией
Ну и сделал, что-бы миниатюру кот. выводится на главной, не было видно сверху в записи. Все по кодексу, не нарушая цикла 🙂
Павел, спасибо Вам, что написали эту статью, Вы молодец))) На днях поковыряюсь в своих кодах, надеюсь все получится сделать)))
P.S. У Вас приятный блог) Радует, что он такой молодой, а уже очень полезный))) Успехов Вам в его развитии))).
Спасибо за приятный отзыв! рад что Вам понравилось 🙂
А вот у меня в шаблоне не get_comment_author_link, а comment_author_link(). Заменял comment_author_link() на вашу функцию. Имена авторов не отображаются вообще... Только дата. У меня ссылки в комментариях везде убраны, может быть из-за этого, хотя не должно... Если имя не выводится вообще, то по мойму тут где-то в php дело, а я в php не мастер).
Алексей, в статье я немного погорячился по поводу того что данный метод подходит для любой темы WP. Принцип скрытия комментариев - Да, для любой. Но введу того что каждая темя может иметь свои имена ф-й, т.п. придется немного думать и сравнивать с темой "twentytwelve".
Ф-я "get_comment_author_link", отвечает за отображение имени комментатора и ссылки на его сайт. Имя может не отображаться по разным причинам, одна из которых - стили. У меня такое было, но задача стояла немного другая.
Ссылки именно в текстах комментариев?
В php или css
Стоп.... Вот я балбас... Не отображаются из за того что функцию создания ссылки поставил, а не отображается потому что я убрал прежнию функцию, которая за вывод имени-ссылки отвечает а не просто ссылки.... Ну и понаписал тут бридятены) Не поможете как реализовать вывод и имени и ссылки? Буду благодарен! Подписался на ваш блог, полезные статьи. Продолжайте в том же духе!
Не понял, вопрос решен или нет?
Кстати не плохо бы было в ваших комментариях для имен авторов прописать в css
cursor:pointer;
Поправлю, спасибо!
Проблему решил, немного подумав по другому. Если уж я возьмусь за какое-то дело, то иду до конца. Я знаю только основы PHP, но написать что-нибудь самому мне пока слабо.
Хорошо что у Вас все получилось. А знание в PHP никогда не помешают, если Вы занимаетесь сайтами. Ведь каждый раз обращаться на фриланс-биржи как по деньгам так и по времени затратно.
Непонятно, то ли использовать только один тег nofollow, то ли оба тега вместе, а некоторые веб-мастера считают, что уже нет смысла в закрывании ссылок, так как поисковики все равно игнорируют запреты.
Я в СЕО не специалист