Как сделать ссылку текстом и отключить HTML в комментариях WordPress

Logo

В данной статье мы немного поработаем над безопасностью WordPress в плане комментирования. Подробно рассмотрим, как сделать ссылки текстом в комментариях WordPress, а также отключим возможность использования HTML при комментировании. Это позволит значительно улучшить защиту сайта от спаммеров и избавиться от всех нежелательных ссылок в комментариях.

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

Итак, переходим к делу.

Как преобразовать ссылки в текст в комментариях WordPress

Для того, чтобы сделать ссылки текстом вам нужно добавить специальный код в файл функций вашей текущей темы оформления WordPress. Для этого открываем на редактирование файл function.php и добавляем в конец следующий код:

// URL to TEXT
function strip_tags_filter($text) {
return strip_tags($text);
}
add_filter('pre_comment_content','strip_tags_filter');
add_filter('comment_excerpt','strip_tags_filter');
add_filter('comment_text','strip_tags_filter');
add_filter('comment_text_rss','strip_tags_filter');
// URL to TEXT

После добавления этого кода все ссылки в комментариях станут просто текстом. Сразу хочу заметить, что исключений здесь нет. В текст будут преобразованы как внешние ссылки, так и внутренние. Учитывайте это перед началом использования кода.

Как отключить использование HTML в комментариях WordPress

Для отключения HTML-тегов в комментариях WordPress, нужно аналогичным образом добавить в файл function.php следующий код:

// Отключение HTML тегов в комментариях
function plc_comment_post( $incoming_comment ) {
$incoming_comment['comment_content'] = htmlspecialchars($incoming_comment['comment_content']);
$incoming_comment['comment_content'] = str_replace( "'", ''', $incoming_comment['comment_content'] );
return( $incoming_comment );
}
function plc_comment_display( $comment_to_display ) {
$comment_to_display = str_replace( ''', "'", $comment_to_display );
return $comment_to_display;
}
add_filter('preprocess_comment', 'plc_comment_post', '', 1);
add_filter('comment_text', 'plc_comment_display', '', 1);
add_filter('comment_text_rss', 'plc_comment_display', '', 1);
add_filter('comment_excerpt', 'plc_comment_display', '', 1);
// Отключение HTML тегов в комментариях

После добавления кода, в комментариях на сайте останется только текст. Никаких HTML‑тегов там не будет и вы больше не сможете их туда добавить через форму комментирования. Например, если кто-то попробует добавить в комментарий ссылку, то от нее останется лишь анкор. Таким образом, вы значительно повысите безопасность комментариев на своем сайте WordPress.

Рекомендую также ознакомиться со следующими статьями:

На этом данная статья подошла к концу. Чтобы не пропустить выпуска новых статей, рекомендую подписаться на новостную рассылку, воспользовавшись формой ниже.

На этом все. Удачи и успехов в создании сайтов!

Обнаружили ошибку? Выделите ее и нажмите Ctrl+Enter

Комментарии 5

  • Антон Белов

    Я добавил код — первый, у меня слетела админка с вордпресса — как так?

  • Дмитрий

    Возможно, код был вставлен неправильно. Проверьте правильность вставки кода в файл function.php. Проследите, чтобы все php-блоки и кавычки были закрыты. Я использую вышеприведенный пример кода и он отлично работает. Непроверенные примеры я не публикую на сайте.

  • Dim565

    А у меня другая ситуация: сыпался спам, где либо поле url было заполнено+в тексте комментария ссылки, либо текст без ссылок, зато в url ссылка есть. Хотел именно блокировать его добавление.
    Пробовал убирать поле url из шаблона темы comments.php. Так тогда url поле соответственно пустое, а текст остается (пусть и без ссылок, но все же не по теме).

    Сделал так:
    1) В comments.php оставил поле ссылки на сайт, но добавил аргументы autocomplete="off" и style="display:none"
    2) В wp-comments-post.php прописал это после проверки на пустоту текста комментария:

    if( preg_match('/(nofollow|url|link)/i', $comment_content ) == true || 4 < strlen($comment_author_url))
    wp_die( __('<strong>ERROR</strong>: СПАМ не пройдет!') );
    Что мы получаем в итоге? обычным посетителям поле для ввода сайта не видно, соответственно они не заполняют его, его длина=0 и если в тексте комментария нет таких слов как nofollow, url или link — коммент проходит
    А программы-автоспамеры по идее не видят обманку, заполняют поле с url, что приводит к выводу сообщения с ошибкой. Если они не заполняют его, но в тексте коммента есть ссылка — тоже самое выходит сообщение и комментарий не добавляется.
    Вручную спамить тоже теперь нет смысла, ссылку же не пропихнуть никуда.
    autocomplete="off" прописал для того, чтобы не вышло так, что поле url заполнялось автоматически браузером и нормальный комментарий не проходил из-за этого.

    Лично все проверил на WP 3.5.1 — работает без проблем. Как будет со спамом пока не знаю, нужно ждать, но уверен, что теперь он сократится существенно.

    Может вдруг поможет этот способ, а то искал как сделать, чтобы комментарий блокировался, если в тексте есть ссылки — везде только преобразование его в обычный текст.

  • Evnikian

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

  • Дмитрий

    Судя по всему был обрезан весь HTML код в комментариях. В связи с этим они выводятся сплошным текстом. Это своего рода плата за безопасность.

Оставить комментарий

отменить ответ