Цікавий метод позбавлення від авто-спаму в коментарях для WordPress
- народження ідеї
- # 1 Змінити посилання на файл обробник, куди форма відправляє дані:
- # 2 Потім, перед цим рядком (яку тільки що відредагували), потрібно додати наступний javascript:
- # 3 І нарешті, додати до кнопки підтвердження форми такої код: onclick = 'cform ()':
- додаткова інформація
- Зверніть увагу
Давно хотів придумати свій метод позбутися спам комментов. Заради цього, навіть не ставив ні на один зі своїх сайтів ніякого захисту від спаму (хоча спам сильно і не турбував - настройки ВП теж на щось годяться), щоб він мене дістав і в підсумку я придумав би що-небудь таке. Ідей було досить багато, але всі вони з тих чи інших причин мене не влаштовували. Хотілося чогось вкрай простого і надійного, без підключення плагінів, без каптчі, без всяких чекпоінтів і т.п.
До слова, про простоту і надійності, можна, звичайно, взагалі відключити коментарі - куди вже надійніше і простіше, але це більше тхне, - "набридло, я здаюся", а ще, як то кажуть, "безвихідних ситуацій не буває", і боротьба зі спамом, це якраз та область де можна пофантазувати щодо витонченого і простого способу ...
Поясню, що мова йде не про ручних спам коментах, тому що від них позбудеться набагато складніше і, мабуть, це тема іншої статті, а про спам який залишається різними спеціалізованими програмами.
народження ідеї
Ідея нижчеописаного способу народилася буквально по ходу написання попередньої статті, - " Як запустити обробку форми використовуючи JavaScript ".
У попередній статті я описав, як можна засабмітіть форму використовуючи посилання замість стандартної кнопки button. У період написання статті я подумав, а що якщо видалити кнопку підтвердження коментаря, що буде в результаті? Спам проги, все одно будуть, сабміта форму, тому що їм для цього кнопка взагалі не потрібна, вони просто сабміта форму і все тут (це я до речі перевірив, так і є - кнопка не потрібна, спам приходить навіть, якщо взагалі прибрати кнопку submit ). Наступним кроком моєї думки став, - "а що, якщо жорстко прив'язати можливість коментувати до кнопки підтвердження коментаря, тоді стандартний спосіб сабмита форми коментування не працюватиме зовсім, що й треба було довести"! Тобто потрібно зробити, так, щоб для відправки коментаря обов'язково потрібно було використовувати кнопку коментування і ніяк інакше, в іншому випадку коментар не надсилається туди куди потрібно. Реалізувати це вийшло дуже просто.
Отже, до справи.
Щоб позбутися спаму потрібно відкрити файл теми 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"> Тут я поставив посилання на картинку logo.gif. Писати можна що завгодно, головною прибрати стандартну посилання /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 /> You have no permission to post a comment!"); else return $ comment_post_ID; }
У період написання статті я подумав, а що якщо видалити кнопку підтвердження коментаря, що буде в результаті?Php echo get_option ( 'siteurl');?
Php echo get_option ( 'siteurl');?
Чому я відразу не запропонував поставити посилання замість кнопки?
Https?
Https?