В стандартной функциональности WordPress нет возможности отслеживать редактирование комментариев после их публикации. Для многих сайтов, где пользователи активно общаются, эта функция может быть крайне полезна — например, для модераторов, чтобы видеть, что именно изменилось в комментарии, или для самих пользователей, чтобы контролировать историю своих сообщений.
Почему важно отслеживать изменения в комментариях WordPress
Редактирование комментариев без истории изменений может привести к недопониманию между участниками обсуждения или к злоупотреблениям. Представьте ситуацию, когда пользователь написал одно, а потом изменил текст на совершенно другой, например, удалив критическую информацию или добавив неуместный контент.
Отслеживание изменений позволяет:
- Вести историю редактирования комментариев;
- Показывать пользователям дату и время последнего изменения;
- Обеспечивать прозрачность коммуникаций;
- Модерировать спорные моменты с учетом изменений.
Как реализовать отслеживание изменений комментариев в WordPress
Для реализации этой задачи можно использовать как плагины, так и собственный код. Ниже рассмотрим оба варианта.
Использование плагина WP Comment Edit Pro
Плагин WP Comment Edit Pro позволяет пользователям редактировать свои комментарии в течение заданного времени, а также сохраняет историю изменений, доступную администраторам.
Основные возможности плагина:
- Редактирование комментариев пользователями;
- Журнал изменений комментариев;
- Уведомления о редактировании для модераторов;
- Настройка времени, в течение которого разрешено редактирование.
Этот плагин отлично подходит, если вы хотите быстро внедрить функционал без программирования.
Своя реализация: сохранение истории изменений комментариев в мета-поле
Если вы хотите гибко настроить функционал и интегрировать его в собственный проект, можно реализовать отслеживание изменений с помощью хуков WordPress.
Идея — при сохранении комментария проверять, изменился ли текст, и если да, сохранять старую версию в мета-данных комментария.
add_action('wpcource_comment_edit_original_save', 'wpcource_save_comment_edit_history', 10, 2);
function wpcource_save_comment_edit_history($comment_id, $comment) {
$old_text = get_comment_meta($comment_id, '_wpcource_comment_edit_history', true);
if (!is_array($old_text)) {
$old_text = [];
}
$current_text = $comment->comment_content;
$last_version = end($old_text);
if ($last_version && $last_version['content'] === $current_text) {
return; // Текст не изменился
}
$old_text[] = [
'content' => $current_text,
'edited_at' => current_time('mysql')
];
update_comment_meta($comment_id, '_wpcource_comment_edit_history', $old_text);
}Далее нужно вызвать эту функцию при сохранении комментария. Для этого используем фильтр edit_comment:
add_action('edit_comment', 'wpcource_handle_comment_edit', 10, 2);
function wpcource_handle_comment_edit($comment_id, $comment) {
wpcource_save_comment_edit_history($comment_id, $comment);
}Таким образом, при каждом редактировании комментария у вас будет сохраняться история в мета-поле _wpcource_comment_edit_history.
Отображение истории изменений комментариев на сайте
Теперь, когда история хранится, нужно вывести ее в интерфейсе. Например, добавим под комментарием блок с последними изменениями.
add_filter('comment_text', 'wpcource_show_comment_edit_history', 10, 2);
function wpcource_show_comment_edit_history($text, $comment) {
$history = get_comment_meta($comment->comment_ID, '_wpcource_comment_edit_history', true);
if (is_array($history) && count($history) > 1) {
$output = '<div class="wpcource-comment-history"><strong>История изменений:</strong><ul>';
foreach ($history as $version) {
$output .= '<li><em>' . esc_html($version['edited_at']) . '</em>: ' . esc_html($version['content']) . '</li>';
}
$output .= '</ul></div>';
$text .= $output;
}
return $text;
}Этот код добавит под каждым комментарием список с предыдущими версиями текста и временем редактирования. Можно стилизовать блок через CSS, чтобы он выглядел аккуратно и не мешал основному содержимому.
Дополнительные советы и рекомендации
Если комментариев много, хранение всей истории в мета-поле может увеличить нагрузку на базу данных. В этом случае можно рассмотреть отдельную таблицу для истории изменений или использовать специализированные плагины с оптимизированным хранением.
Также обратите внимание на безопасность: выводя историю, всегда используйте функции экранирования (esc_html, esc_textarea), чтобы избежать XSS-уязвимостей.
Для улучшения UX можно добавить отметку о том, что комментарий был отредактирован, например, пометку «(изменено)» рядом с датой публикации.
Если используете плагин WPRemark для отзывов, проверьте, поддерживает ли он историю изменений, либо интегрируйте описанный код с ним для расширения возможностей.