<
  • Главная
Статьи

Цікавий метод позбавлення від авто-спаму в коментарях для WordPress

  1. народження ідеї
  2. # 1 Змінити посилання на файл обробник, куди форма відправляє дані:
  3. # 2 Потім, перед цим рядком (яку тільки що відредагували), потрібно додати наступний javascript:
  4. # 3 І нарешті, додати до кнопки підтвердження форми такої код: onclick = 'cform ()':
  5. додаткова інформація
  6. Зверніть увагу

Давно хотів придумати свій метод позбутися спам комментов. Заради цього, навіть не ставив ні на один зі своїх сайтів ніякого захисту від спаму (хоча спам сильно і не турбував - настройки ВП теж на щось годяться), щоб він мене дістав і в підсумку я придумав би що-небудь таке. Ідей було досить багато, але всі вони з тих чи інших причин мене не влаштовували. Хотілося чогось вкрай простого і надійного, без підключення плагінів, без каптчі, без всяких чекпоінтів і т.п.

До слова, про простоту і надійності, можна, звичайно, взагалі відключити коментарі - куди вже надійніше і простіше, але це більше тхне, - "набридло, я здаюся", а ще, як то кажуть, "безвихідних ситуацій не буває", і боротьба зі спамом, це якраз та область де можна пофантазувати щодо витонченого і простого способу ... До слова, про простоту і надійності, можна, звичайно, взагалі відключити коментарі - куди вже надійніше і простіше, але це більше тхне, - набридло, я здаюся, а ще, як то кажуть, безвихідних ситуацій не буває, і боротьба зі спамом, це якраз та область де можна пофантазувати щодо витонченого і простого способу

Поясню, що мова йде не про ручних спам коментах, тому що від них позбудеться набагато складніше і, мабуть, це тема іншої статті, а про спам який залишається різними спеціалізованими програмами.

народження ідеї

Ідея нижчеописаного способу народилася буквально по ходу написання попередньої статті, - " Як запустити обробку форми використовуючи 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 на сервер і забути про автоспам в коментарях Ось і все, залишилося тільки залити файл comments

Мінус у цього способу: при відключеному 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?


Новости
  • Виртуальный хостинг

    Виртуальный хостинг. Возможности сервера распределяются в равной мере между всеми... 
    Читать полностью

  • Редизайн сайта

    Редизайн сайта – это полное либо частичное обновление дизайна существующего сайта.... 
    Читать полностью

  • Консалтинг, услуги контент-менеджера

    Сопровождение любых интернет ресурсов;- Знание HTML и CSS- Поиск и обновление контента;-... 
    Читать полностью

  • Трафик из соцсетей

    Сравнительно дешевый способ по сравнению с поисковым и контекстным видами раскрутки... 
    Читать полностью

  • Поисковая оптимизация

    Поисковая оптимизация (англ. search engine optimization, SEO) — поднятие позиций сайта в результатах... 
    Читать полностью