Вітаю! З вами Павло. У цій статті я хочу розповісти вам, як можна «закрити» посилання коментаторів свого блогу від індексації пошуковими системами.
За весь час існування цієї CMS було створено десятки тисяч плагінів. У тому числі й ті, що стосуються роботи з коментарями. Але у моєму випадку я вирішив піти нестандартним шляхом — вніс деякі зміни у файл «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(),
( $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' ),
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». Також змініть назву функції в «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 );
}
Зверніть увагу — ми не використовуємо тег A, а лише SPAN. Перехід реалізовано через функцію JavaScript «goto», яку потрібно вставити у футер теми.
Відкрийте файл «/wp-content/themes/twentytwelve/footer.php» і додайте такий код між <?php wp_footer(); ?> та </body>:
<script language="Javascript" type="text/javascript">
function goto(l) {
window.open(l.replace("_","http://"));
}
</script>
Не забудьте також додати стилі для класу s-link, щоб посилання виглядало належно:
.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 (якщо хтось не звернув уваги — дати коментарів у цій темі з цим плагіном відображаються некоректно).
Якщо у вас є ще ідеї з приховування посилань — пишіть у коментарях.
Дякую за увагу!
