Блокуємо Спам у коментарях
Ця посада вже не актуальна! Тепер від спаму я позбавляюсь використовуючи свій плагін, докладніше тут: Плагін для блокування спаму в коментарях (для WordPress) .
Давно хотів придумати свій метод позбутися спам коментів. Заради цього, навіть не ставив на жодний зі своїх сайтів ніякого захисту від спаму (хоча спам сильно і не турбував – налаштування ВП теж на щось годяться), щоб він мене дістав і в результаті я придумав би щось таке собі. Ідей було досить багато, але всі вони з тих чи інших причин не влаштовували мене. Хотілося чогось дуже простого і надійного, без підключення плагінів, без каптчі, без будь-яких чекпоінтів і т.п.
До речі, про простоту і надійність, можна, звичайно, взагалі відключити коментарі – куди вже надійніше і простіше, але це більше пахне, – “набридло, я здаюся”, а ще, як кажуть, “безвихідних ситуацій не буває”, і боротьба зі спамом, це саме та область де можна пофантазувати щодо витонченого та простого способу…
Поясню, що не про ручних спам коментах, т.к. їх позбудеться набагато складніше і, мабуть, це тема іншої статті, а про спам який залишається різними спеціалізованими програмами.
Народження ідеї
Ідея нижчеописаного способу народилася буквально під час написання попередньої статті, – ” Як запустити обробку форми використовуючи JavaScript “.
У попередній статті я описав, як можна засабити форму, використовуючи посилання замість стандартної кнопки button . У період написання статті я подумав, а якщо видалити кнопку підтвердження коментаря, що буде в результаті? Спам проги, все одно будуть, самітити форму, тому що їм для цього кнопка взагалі не потрібна, вони просто самітять форму і все тут (це я до речі перевірив, так і є – кнопка не потрібна, спам приходить навіть, якщо взагалі прибрати кнопку submit). Наступним кроком моєї думки став, – “а що, якщо жорстко прив’язати можливість коментувати до кнопки підтвердження коментаря, тоді стандартний спосіб сабміту форми коментування не працюватиме зовсім, що потрібно було довести”! Тобто. потрібно зробити, так, щоб для відправки коментаря обов’язково потрібно було використовувати кнопку коментування і ніяк інакше, інакше коментар не відправляється туди, куди потрібно. Реалізувати це вдалося дуже просто.
Отже, до діла.
Позбавляємося спаму в коментарях у WordPress
Щоб позбутися спаму, потрібно відкрити файл теми comments.php
і знайти там форму коментування. Початок коду приблизно такий:
<form action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post" id="commentform">
Потім, потрібно зробити три легкі тіло-рухи:
#1 Змінити посилання на файл обробник, куди форма надсилає дані:
У такому рядку: <form action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post" id="commentform"> Потрібно змінити значення атрибута action. Наприклад, так: <form action="/logo.gif" method="post" id="commentform"> Тут я поставив посилання на картинку. Писати можна будь-що, головною прибрати стандартне посилання /wp-comments-post.php
#2 Потім, перед цим рядком (який щойно відредагували), потрібно додати наступний javascript:
<script type="text/javascript"> function cform(){ document.getElementById("commentform").setAttribute("action", "/wp-comments-post.php"); document.forms["commentform"].submit(); } </script>
#3 І нарешті, додати до кнопки підтвердження форми такий код: onclick=’cform()’ :
Виглядає приблизно так: було: <input type="submit" id="submit" value='Коментувати' tabindex="5" /> стало: <input type="submit" id="submit" value='Коментувати' tabindex="5" onclick='cform()' />
Ось і все залишилося тільки залити файл comments.php на сервер і забути про автоспами в коментарях
Мінус цього способу : при відключеному JavaScript неможливо буде залишити коментар. Але це не страшно, адже сьогодні JavaScript є невід’ємною частиною будь-якого сайту.
додаткова інформація
Вищеописаний спосіб не врятує від автоспаму, якщо спам-прога вміє імітувати натискання кнопки сабміта (начебто це велика рідкість), тому щоб на 100% захиститися, у себе на сайтах я взагалі видаляю цю кнопку, а замість неї ставлю посилання, тобто. підтвердження проводиться за посиланням, виглядає воно так:
<a href="javascript: cform()" id="submit" tabindex="5">Коментувати</a>
Тепер навіть якщо спам-прога вміє імітувати натискання на кнопку, вона просто цю кнопку не знайде, тому що її немає. А пройти за посиланням, щоб підтвердити коментар, такого я взагалі ніде не зустрічав, тому спам-проги на це точно не розраховані.
Чому я одразу не запропонував поставити посилання замість кнопки? Тому, щоб вона вписувалася в дизайн і виглядала як кнопка, її потрібно буде оформити через css, а це можуть далеко не всі.
Зверніть увагу
Деякі спам-проги постять коментар прямо файл wp-comments-post.php , тобто. надсилають коментар не зі сторінки сайту.
Якщо коментар надсилається таким чином, то вказаний вище метод не відфільтрує спам. Щоб дозволити коментар тільки зі сторінки сайту, додайте нижченаведений код у ваш файл functions.php.
## Хук, який блокує коментар, якщо він був відправлений не з коментованої сторінки add_action( 'pre_comment_on_post', 'kama_check_comment', 0); function kama_check_comment( $comment_post_ID ){ $ref = trim( preg_replace( '!/comment-page.*|https?://(.*?)/|#.*|?.*!i', '', $_SERVER['HTTP_REFERER'] ), '/'); $permalink = trim( preg_replace( '!/comment-page.*|https?://(.*?)/|#.*|?.*!i', '', get_permalink($comment_post_ID) ), '/'); if( $permalink !== $ref ) wp_die( "REFERER: $ref<br />LINK: $permalink<br /> Ви не маєте права на повідомлення!" ); else return $comment_post_ID; }