В данной статье мы немного поработаем над безопасностью 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.
Рекомендую также ознакомиться со следующими статьями:
- Как создать сайт на WordPress
- Как исключить записи в WordPress
- Как создать меню в WordPress
- Как автоматически вывести рекламу в WordPress
- Как сделать похожие записи в WordPress
- Подсветка синтаксиса кода для сайта
- Как добавить кнопки в редактор WordPress
- Как безопасно обновить WordPress
- Плагин для плавного увеличения изображений в WordPress
- Код постраничной навигации для WordPress
На этом данная статья подошла к концу. Чтобы не пропустить выпуска новых статей, рекомендую подписаться на новостную рассылку, воспользовавшись формой ниже.
На этом все. Удачи и успехов в создании сайтов!
Я добавил код — первый, у меня слетела админка с вордпресса — как так?
Возможно, код был вставлен неправильно. Проверьте правильность вставки кода в файл function.php. Проследите, чтобы все php-блоки и кавычки были закрыты. Я использую вышеприведенный пример кода и он отлично работает. Непроверенные примеры я не публикую на сайте.
А у меня другая ситуация: сыпался спам, где либо поле 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 — работает без проблем. Как будет со спамом пока не знаю, нужно ждать, но уверен, что теперь он сократится существенно.
Может вдруг поможет этот способ, а то искал как сделать, чтобы комментарий блокировался, если в тексте есть ссылки — везде только преобразование его в обычный текст.
Вставил код, все работает, НО у меня поменялся общий визуальный вид комментариев, а точнее куда-то исчезли все межстрочные и межблоковые отступы, блоки комментариев расположились очень тесно друг к другу, а в тексте исчезли переходы на новый абзац.
Судя по всему был обрезан весь HTML код в комментариях. В связи с этим они выводятся сплошным текстом. Это своего рода плата за безопасность.