Вивчаємо WordPress

3776

Здрастуйте, шановні читачі блогу . Невеликий пост з серії «а скринька просто відкривався». Останні чотири роки для захисту від спаму в коментарях свого блогу на WordPress я з успіхом використовував досить-таки рідкісний плагін DCaptcha. Проте останнім часом він став пропускати спамм — з кожним днем все більше і більше. У зв’язку з чим довелося шукати йому заміну, бо вручну видаляти сотні спаммных коментарів не дуже посміхалося.

Вивчаємо WordPress

Почитав про різні наявні на ринку плагіни — як з капчі, так і без неї. І по ходу справи кілька разів натрапив на опис того способу позбавлення від спаму в WordPress, який у підсумку і застосував. У нього є ряд переваг і всього один недолік — доведеться трохи покопатися в коді (але зовсім трохи). Зате в результаті отримуєте робочий варіант спаморезки, без набридливої капчі і без створення додаткового навантаження на блозі за рахунок установки плагіна.

Як направити спам-ботів хибним шляхом?

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

Однак, робота цього можна спробувати обдурити в тій області, де не дуже обізнаний. Головне, щоб він вважав, що з успіхом виконав свою роботу — поширив спам по сторінках вашого блогу. Для обману ми додамо на сайт ще одну форму для введення тексту коментаря. Якщо їх буде дві, то яку вибере робот для додавання посту? Правильно, швидше за все, першу. Адже Тут діє та ж логіка, що і в іронічній мініатюрі про два дев’ятих вагона, коли все логічно вважали, що 9 вагон це той, який слід відразу після 8, а не той, що знаходиться перед 10.

Ось тут виходить приблизно така ж історія. Ми створюємо дві форми, одну з них (першу, яку робот і буде використовувати) зробимо недієздатною (дані з неї нікуди відправлятися не будуть) і невидимої звичайним відвідувачам. Т. к. вони першу форму на сайті бачити не будуть, то скористаються другою формою, яка буде справно працювати і додавати коментарі, залишені людьми на блозі.

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

Отже, щоб все це реалізувати на практиці, великого розуму не треба. Однак, за традицією, раджу вас зробити резервну копію файлів і бази даних, щоб у разі форс-мажору з них відновитися. Всі файли, які нам знадобляться, знаходяться в папці з використовуваної вами темою оформлення (/wp-content/themes/имя_темы). Краще використовувати ФТП-клієнт, ніж редагувати ці файли через адмінку WordPress, бо у другому випадку у вас можуть виникнути проблеми з відміною внесених змін.

Саморобна спаморезка у темі оформлення WordPress

Для початку потрібно буде знайти в файлику comments.php ділянка коду, який відповідає за виведення на сторінки постів поля для додавання коментарів. Якщо ви вивчали коли-небудь Html форми, то зрозумієте призначення тегу textarea, який нам потрібно буде знайти в коді файлу comments.php. Якщо його там не виявиться, то значить у вас інше пристрій теми, ніж у мене і, швидше за все, форма для залишення коментаря формується з допомогою спеціальної функції. В цьому випадку порядок дій буде трішки інший.

Однак, ми буде вважати, що ви таки знайшли рядок з textarea, яка буде виглядати приблизно так:

Тепер копіюєте цей рядок (не мою, а свою, у вашому файлику comments.php) і вставляєте відразу за самою собою, щоб вийшло приблизно так:

Якщо помітили, то я у другому рядку замінив name=»comment» id=»comment» на name=»struktura» id=»struktura». Ви повинні зробити те ж саме, але тільки замість struktura використовувати можна все, що завгодно (потім просто замініть це в коді фільтра приводиться трохи нижче).

Зрозуміло, так? Ми таким чином створили другу форму для введення коментарю (якщо збережіть зараз зроблені зміни, то побачите в реалі дві форми на своєму блозі). Перша з них буде «пустушкою» для наївних спам-роботів (ми її зараз сховаємо від очей користувачів), а друга буде робочою формою, якої і будуть користуватися ваші коментатори, бо нічого іншого вони і не побачать.

Тому наступним кроком буде відкриття файлика style.css з папки з вашою темою оформлення. Десь внизу можете дописати:

#comment {display:none;}

Після чого перша (фіктивна) форма для коментарів зникне зі сторінок вашого блогу на WordPress. Все просто, але мені тут нашептали, що display:none слід уникати через побоювання викликати немилість пошуковиків (не знаю, чи виправдані ці побоювання) — типу ви щось приховуєте, роблячи частина сайту невидимою для відвідувачів (якийсь віддалений аналог клоакинга виходить).

Тому я трохи все для себе ускладнив і додав кілька CSS правил style.css замість наведеного вище одного:

textarea#struktura {margin-top:-60px;overflow:hidden; }
textarea#comment input {margin-top:10px;}

Таки чином я наїхав другою формою на першу і повністю приховав від очей відвідувачів «пустушку», щоб вони нічого в неї не могли додати. Якщо щось не зрозуміло, що читайте про margin-top і overflow:hidden.

Отже, потрібного візуального ефекту ми досягли. Залишилося ще додати фільтр, який би вимикав додавання коментарів через першу (основну за замовчуванням) форму і передавав би її повноваження іншій формі, яка буде доступна відвідувачам. Для цього потрібно буде відкрити файлик functions.php (архиполезный) і додати в нього (акуратно, щоб не поламати уже наявний там код) цей фільтр (не забудьте замінити struktura на те, що ви використовували):

add_filter(‘pre_comment_on_post’, ‘verify_spam’);
function verify_spam($commentdata) {
$spam_test_field = trim($_POST[‘comment’]);
if(!empty($spam_test_field)) wp_die(‘спам’);
$comment_content = trim($_POST[‘struktura’]);
$_POST[‘comment’] = $comment_content;
return $commentdata;
}

Все, тепер зберігаєте зроблені зміни у всіх трьох файликах і перевіряєте працездатність форми надсилання коментарів на вашому блозі. Можливо, що зі стилями вам доведеться трохи повозитися, щоб як слід заховати першу (фіктивну) форму, ну, а взагалі, на все про все у мене хвилин п’ять і пішло. А у вас?

Удачі вам! До зустрічей на сторінках блогу