В процессе работы с сайтом на WordPress иногда возникает необходимость массово удалить все комментарии. Это может понадобиться при переносе сайта, очистке от спама или при смене политики модерации. В этой статье мы подробно рассмотрим, как удалить все комментарии в WordPress с помощью собственного кода, без использования сторонних плагинов.
Почему стоит удалять комментарии через код, а не плагины
Хотя существует множество плагинов для управления комментариями, удаление всех комментариев сразу зачастую требует серьезных ресурсов и времени. К тому же, установка плагина ради одноразовой задачи не всегда оправдана. Использование кода напрямую позволяет быстро и эффективно выполнить удаление, а также дает полный контроль над процессом.
Кроме того, код можно использовать в functions.php вашей темы, в отдельном плагине или в консоли WP-CLI, что расширяет возможности и удобство.
Подготовка: резервное копирование базы данных
Перед удалением комментариев крайне важно создать резервную копию базы данных. Любые массовые операции с данными могут привести к потере информации, если что-то пойдет не так.
Для резервного копирования можно использовать плагины (например, UpdraftPlus), хостинг-инструменты или выполнить экспорт базы данных через phpMyAdmin.
Удаление всех комментариев с помощью WP24_delete_all_comments()
Создадим собственную функцию для удаления всех комментариев. Она будет использовать стандартные средства WordPress для безопасности и корректности работы.
function wp24_delete_all_comments() {
global $wpdb;
// Получаем все ID комментариев
$comment_ids = $wpdb->get_col( "SELECT comment_ID FROM {$wpdb->comments}" );
if ( empty( $comment_ids ) ) {
echo 'Комментариев для удаления не найдено.';
return;
}
foreach ( $comment_ids as $comment_id ) {
wp_delete_comment( $comment_id, true ); // true — без возможности восстановления
}
echo 'Все комментарии успешно удалены.';
}
Эта функция использует wp_delete_comment(), чтобы корректно удалить комментарии, включая очистку связанных данных, например, мета комментариев и уведомлений.
Как запустить функцию удаления
Вы можете вызвать wp24_delete_all_comments() в нужном месте, например, добавить вызов в functions.php и временно активировать, либо использовать WP-CLI.
Запуск удаления через WP-CLI
Если у вас есть доступ к консоли и установлен WP-CLI, можно выполнить удаление комментариев быстрее и безопаснее.
Пример команды для удаления всех комментариев:
wp comment delete $(wp comment list --format=ids) --force
Эта команда сначала получает ID всех комментариев, а затем удаляет их принудительно.
Удаление комментариев с определенными статусами
Иногда требуется удалить только спам или ожидающие модерации комментарии, сохранив одобренные. Для этого можно доработать функцию:
function wp24_delete_comments_by_status( $status = 'spam' ) {
global $wpdb;
$comment_ids = $wpdb->get_col( $wpdb->prepare(
"SELECT comment_ID FROM {$wpdb->comments} WHERE comment_approved = %s",
$status
) );
if ( empty( $comment_ids ) ) {
echo 'Комментариев с таким статусом не найдено.';
return;
}
foreach ( $comment_ids as $comment_id ) {
wp_delete_comment( $comment_id, true );
}
echo "Комментарии со статусом {$status} удалены.";
}
Можно вызвать, например, wp24_delete_comments_by_status('hold') для удаления комментариев на модерации.
Как избежать проблем и увеличить скорость удаления
Если комментариев очень много (десятки тысяч и более), удаление по одному может занять много времени и привести к таймаутам. В таких случаях рекомендуется:
- Разбивать удаление на части, например, удалять по 500-1000 комментариев за раз.
- Использовать WP-CLI, который работает быстрее и надежнее.
- Оптимизировать базу данных после удаления (например, с помощью
OPTIMIZE TABLE).
Пример удаления порциями:
function wp24_delete_comments_in_batches( $batch_size = 500 ) {
global $wpdb;
$offset = 0;
do {
$comment_ids = $wpdb->get_col( $wpdb->prepare(
"SELECT comment_ID FROM {$wpdb->comments} LIMIT %d OFFSET %d",
$batch_size,
$offset
) );
if ( empty( $comment_ids ) ) break;
foreach ( $comment_ids as $comment_id ) {
wp_delete_comment( $comment_id, true );
}
$offset += $batch_size;
} while ( count( $comment_ids ) === $batch_size );
echo 'Пакетное удаление комментариев завершено.';
}
Заключение по удалению комментариев через код
Удаление всех комментариев через код — мощный инструмент, который даст вам полный контроль и позволит быстро очистить сайт. Главное — делать резервные копии и использовать правильные методы, чтобы избежать потерь данных и проблем с производительностью.
Используйте функции из статьи, адаптируйте их под свои нужды и всегда тестируйте на тестовом сайте перед применением в продакшене.