Помечаем комментарии, нарушившие правила сайта

Дата публикации:Октябрь 2, 2013

Комментарии – это обоюдоострый меч. Они позволяют взаимодействовать с читателями, но способны быстро скатываться в «перебранку» пользователей между собой, что негативно отражается на общей репутации сайта.

Система WordPress в своем исходном варианте предлагает только два варианта того, как поступать с проблемными комментариями:  оставить их либо отправить в корзину. Однако не лучше ли будет воспользоваться популярной методикой, которая применяется сайтами BBC и Guardian и заключается в пометке комментариев как нарушающих правила сайта с заменой текста?

В этой статье мы посмотрим, как добавить к WordPress указанную функциональность, а также как показать посетителям, что они нарушили правила.

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

Удаление комментариев – возможный выход из ситуации, однако это никоим образом не указывает посетителю на то, что он нарушил правила ресурса, и именно по этой причине комментарий был удален.

Что требуется для реализации данной возможности:

  1. Помечаем комментарий как нарушающий правила на странице комментариев.
  2. Меняем текст комментария на сообщение о нарушении правил всякий раз, когда комментарий будет выводиться на экран.
  3. Обновляем сообщение о нарушении правил на странице Обсуждений.

Давайте приступим к делу.

Шаг 1. Помечаем комментарии как нарушившие правила сайта.

Задать новый статус комментария в WordPress – очень сложная задача (для написания этих статусов понадобится набирать массивные участки кода), однако мы можем добавить к комментариям метаданные, и именно это мы будем использовать для пометки комментариев, нарушивших правила.

Вообще, пометки значительно упрощают одобрение комментариев.

Нам нужно добавить опцию в меню, которая будет появляться под каждой записью на странице комментариев:

hr_comment_options

Для этого нам потребуется совершить некоторый хак, который представлен в плагине Comment Probation:

function comment_row_actions( $actions, $comment ) {
if ( ! isset( $actions['approve'] ) )
return $actions;

$houserules = str_replace( 'action=approvecomment', 'action=approvecomment&houserules=1', $actions['approve'] );
preg_match( '/^(.*?>)/', $houserules, $matches );
$houserules = str_replace( array( ':new=approved', ' vim-a' ), array( ':new=approved&houserules=1', '' ), $matches[1] );
$houserules .= __( 'Broke House Rules', 'comment-houserules' ) . '';

$actions['approve'] .= '<span class="comment-houserules"> | ' . $houserules . '</span>';

return $actions;
}

Данная функция, связанная с фильтром comment_row_actions, проверяет доступность опции «approve», после чего вносит действие Broke House Rules в список одобренных действий, добавляя houserules=1 к строке запроса.

В данном случае опция Broke House Rules будет отображаться только для тех комментариев, которые должны быть одобрены. Чтобы пометить одобренный комментарий, просто отмените его одобрение, затем щелкните по Broke House Rules.

Теперь мы должны сцепиться с действием wp_set_comment_status, чтобы пометить комментарий как нарушающий правила в случае необходимости.

function wp_set_comment_status( $comment_id, $status ) {

if ( $status != 'approved' )
delete_comment_meta( $comment_id, self::meta_key );

if ( !empty($_GET['houserules']) || !empty($_POST['houserules']) )
update_comment_meta( $comment_id, self::meta_key, '1' );
}

Если комментарий не стоит в очереди на одобрение, то в таком случае пометка будет снята. Затем будет осуществлена проверка, было ли задано Broke House Rules, и если да, то комментарий будет помечен.

Это позволяет обрабатывать обновления на странице комментариев. А как насчет замены текста?

Шаг 2. Добавляем сообщение о нарушении правил на странице Параметры – Обсуждение.

Чтобы подключить простое обновление сообщения, которое заменит собой текст помеченных комментариев, мы добавим опцию к странице Параметры – Обсуждение.

houserules_message-700x70

А вот и сам код.

// регистрируем новую опцию для сообщения
function hr_register_setting(){

register_setting(
'discussion',
'hr_msg',
'trim'
);

add_settings_field(
'houserules',
'Broke House Rules message',
array ( &$this , 'hr_show_settings' ),
'discussion',
'default',
array ( 'label_for' => 'hr_msg' )
);
}

// описание для новой опции
function hr_description(){

echo '
<p class="description">Enter message to be displayed in place of comment text</p>
';
}

// получаем значение опции
function hr_show_settings( $args ){

$data = esc_attr( get_option( 'hr_msg', '' ) );

printf(
'<textarea class="large-text" id="hr_msg" cols="50" name="hr_msg">'.$data.'</textarea>' ,
$data,
$args['label_for']
);
}

Это стандартный код Settings API, который добавляется к действию admin_init. Мы добавляем новую настройку для сообщения о нарушении правил. Находиться эта настройка будет в самом низу после стандартных опций на странице Параметры – Обсуждение. Опция сохраняется как глобальная настройка с названием hr_msg. Именно это сообщение мы будем использовать в качестве заменяющего текста для помеченных комментариев.

Шаг 3. Замена текста помеченных комментариев на сообщение о нарушении правил

Это самый простой шаг, в котором мы прицепляем небольшую функцию к фильтру get_comment_text, чтобы проверить, помечен ли комментарий, и если да – то возвращаем глобальную опцию hr_msg, заменяя оригинальный текст.

// если комментарий нарушает правила, меняем его
function get_comment_text( $text , $comment ){

if (get_comment_meta($comment->comment_ID , self::meta_key , true)) {

return get_option ( 'hr_msg', '' );

} else {

return $text;
}

}

Теперь, когда сообщение помечено как нарушающее правила, оно будет выглядеть примерно так:

houserules_public

Комментарии могут быть мощным и эффективным средством для взаимодействия с аудиторией, однако надо всегда задавать четкие границы общения.

С помощью подхода «broke the house rules» вы можете однозначно дать понять комментаторам, перешли ли они допустимые границы, а также сделать ваш сайт местом ведения здравых диалогов.

Загрузить код плагина целиком.

Источник: wpmu.org.

Поделиться

Один комментарий

  1. VRS says:

    Доброй ночи.
    Интересный код. Подскажите, пожалуйста, как его модифицировать, чтобы только добавлять (и удалять) метаданные комментария? Т.е. добавить свою «быструю ссылку».

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Получать новые комментарии по электронной почте. Вы можете подписаться без комментирования.