Правильная постмодерация комментариев Wordpress

У меня где-то с десяток действующих сайтов на WP, и 4 из них ежедневно генерят комментарии. Я против предмодерации и регистрации, поэтому у меня на сайтах на WP может писать кто угодно что угодно и когда угодно. Но потом прихожу я и удаляю плохие комментарии :) В последнее время этих комментариев становится по 150-250 в день, и постмодерировать их средствами WP становится очень неудобно. (Скажу сразу две вещи: 1) готового скрипта по сабжу в посте нет :) 2) мне захотелось подробно описать процесс придумывания очередной фичи, поэтому ниже много букв.)

Судите сами - открываю почтовую программу, в папке с комментариями с утра около 120 писем с каментами. Тыркаю на первое письмо, читаю коммент, если норм иду дальше, если нет - тыркаю на ссылку “trash it”. Иду дальше, смарю след. письмо-коммент. Прокликав все письма иду в браузер (да-да, после тырка на “trash-it” для каждого удаляемого коммента открываеца отдельная страница с подтверждением данного действа), в котором открыто 30-50 вкладок (именно столько удаляется комментариев), прохожу их всех, кликая на кнопку “да, в корзину”.

На каждый удаляемый коммент тратица 4 клика - это нихуя не правильно. И я решил сделать свою админку для постмодерации комментариев WP, с блекджеком и шлюхами!

Итак, чего хочеца - чтоб все комменты были одним списком, и одним кликом бы удалялись. И чтоб все каменты были со всех блогов, в одном месте.

Идем в БД WP и смотрим, как там что происходит. Есть таблица “wp-comments”, в которой лежат все комментарии, привязанные к таблице с постами “wp_posts” через поле “comment_post_ID”. Также есть поле в таблице с постами “comment_count”, которое, судя по названию, отображает кол-во комментариев к посту (сделано, видимо, чтоб сэкономить на запросах к БД). Чтобы удалить комментарий, нам нада удалить строку в таблице “wp-comments” и уменьшить на единицу значение в поле “comment_count” у соответствующего поста. Все просто :)

Хотя нет, есть еще один момент - как мы будем определять, какой комментарий прошел проверку, а какой нет? Можно сделать по-разному, но я решил сделать по-простому - мы будем хранить только одно значение - id последнего (наибольшее значение) комментария, который мы проверили. Данный подход имеет много плюсов - не изменяется БД, все поля комментариев юзаюца по назначению, не создается дополнительных таблиц и колонок. Минус как мне кажеца только один - довольно неочевидная обработка этого значения в процессе модерации.

Где мы будем хранить это значение? тут тоже можно выбрать - либо в файле, либо где-то в БД. В файле мне не нравится - зачем создавать доп.сущности. А вот в БД есть одно место, где этот параметр будет вполне в тему - таблица “wp_settings”. Там хранятся все основные настройки блога, туда же можно впихнуть любые переменные, что мы и сделаем.

Отлично, теоретическая база по механизму готова, осталось придумать, как это будет на веб-морде. Идеальный вариант - када выводится скажем 100 комментариев, мы их скроллим, читаем, напротив каждого камента - ссылка/кнопка “удалить”, по нажатии которой коммент удаляется без перезагрузки страницы. Да, круто, но есть один косяк - как мы определим, какие комментарии проверены, а какие нет? Ставить напртив каждого камента галочки? Хрень ведь, лишний клик…

Я решил организовать немного по-другому - список комментариев, напртив каждого большая галка “удалить?”. Читаем каменты, находим для удаления, отмечаем галкой. А внизу списка кнопка типа “принять”. После ее нажатия происходит удаление помеченных записей из таблицы “wp_comments”, уменьшается на единицу счетчик каментов в “wp_posts”, записывается максимальное ID из показанных комментариев в “wp_settings” и происходит запрос к БД - есть ли комментарии, старше максимального в “wp_settings”. Если есть - выводим в том же виде. И так далее, пока не будут проверены все комментарии.

Выводить комментарии лучше с названием темы и названием блога, а чекбоксы на удаление делать большими, чтоб легче было попасть мышой.

Есть еще один вариант - установить php-класс для работы с pop3 и принимать им почту в виде комментариев, и уже обрабатывать таким образом. Этот вариант подходит тем, у кого много блогов и они на разных серверах, а удаленный коннект к БД не поддерживается. У меня основные WP-сайты на одном сервере, так что мне было проще сделать как я писал выше.

Архив обсуждения

Исторические комментарии сохранены из старого блога. Это архив, новые комментарии не добавляются. Всего: 2.

  1. Сергей

    Здравствуйте!

    А если при смене логина администратора, но сохранении, при этом, его мэйла и др.данных, слетает граватар со старых комментов и класс выделения комментариев администратора. Это в чем может быть проблема? И как исправить? А то, приходится все комментарии заново переписывать...(((

  2. алксей

    Подскажите, как убрать предмодерацию. Все испробовал, галки убрал, а все равно не работает. Спасибо