Як заборонити індексацію посилань авторів коментарів у WordPress

Як заборонити індексацію посилань авторів коментарів у WordPress

Вітаю! З вами Павло. У цій статті я хочу розповісти вам, як можна «закрити» посилання коментаторів свого блогу від індексації пошуковими системами.

За весь час існування цієї 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 (якщо хтось не звернув уваги — дати коментарів у цій темі з цим плагіном відображаються некоректно).

Якщо у вас є ще ідеї з приховування посилань — пишіть у коментарях.

Дякую за увагу!

Пости на схожі теми

З вашим WordPress сайтом проблеми? потрібний додатковий функціонал? нестандартний плагін чи згорнути нову сторінку?
Тоді напишіть мені через форму зворотного зв'язку, і я намагатимусь вам допомогти.

Напишіть коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *