Ведение активного сайта на WordPress часто сопровождается накоплением большого количества комментариев. Особенно если комментарии не модерируются регулярно, это может привести к засорению базы данных устаревшими или спам-комментариями. В этой статье мы рассмотрим, как добавить в административную панель WordPress настройку для автоматического удаления старых комментариев по заданному возрасту. Такой функционал поможет поддерживать базу данных сайта в чистоте и повысит производительность.
Зачем нужна автоматическая очистка старых комментариев
Комментарии со временем теряют актуальность, особенно если речь идёт о временных обсуждениях или акциях. Их хранение увеличивает размер базы данных и замедляет работу сайта при большом объеме записей. Автоматическое удаление комментариев старше определенного срока позволит:
- Снизить нагрузку на базу данных.
- Уменьшить время выполнения запросов при загрузке страниц с комментариями.
- Поддерживать актуальность контента на сайте.
Реализация такой функции с возможностью настройки через админку позволит гибко управлять этим процессом без необходимости вмешательства в код каждый раз.
Как создать настройку для удаления комментариев в панели администратора WordPress
Для начала создадим простую страницу настроек, где администратор сможет указать количество дней, по прошествии которых старые комментарии будут удаляться автоматически.
Добавление страницы настроек
В файле вашего плагина или темы добавьте следующий код для регистрации страницы настроек:
add_action('admin_menu', 'wpstandart_add_comment_cleanup_page');
function wpstandart_add_comment_cleanup_page() {
add_options_page(
'Очистка старых комментариев',
'Очистка комментариев',
'manage_options',
'wpstandart-comment-cleanup',
'wpstandart_render_comment_cleanup_page'
);
}
function wpstandart_render_comment_cleanup_page() {
?>
<div class="wrap">
<h1>Очистка старых комментариев</h1>
<form method="post" action="options.php">
<?php
settings_fields('wpstandart_comment_cleanup_group');
do_settings_sections('wpstandart-comment-cleanup');
submit_button();
?>
</form>
</div>
<?php
}
Этот код создаст страницу настроек в разделе "Настройки".
Регистрация настройки
Далее добавим регистрацию настройки и поле для ввода количества дней:
add_action('admin_init', 'wpstandart_register_comment_cleanup_settings');
function wpstandart_register_comment_cleanup_settings() {
register_setting('wpstandart_comment_cleanup_group', 'wpstandart_comment_cleanup_days', [
'type' => 'integer',
'sanitize_callback' => 'absint',
'default' => 30
]);
add_settings_section(
'wpstandart_comment_cleanup_section',
'Настройки удаления комментариев',
function() {
echo '<p>Укажите количество дней, после которых комментарии будут автоматически удаляться.</p>';
},
'wpstandart-comment-cleanup'
);
add_settings_field(
'wpstandart_comment_cleanup_days',
'Удалять комментарии старше (дней)',
function() {
$value = get_option('wpstandart_comment_cleanup_days', 30);
echo '<input type="number" name="wpstandart_comment_cleanup_days" value="'.esc_attr($value).'" min="1" />';
},
'wpstandart-comment-cleanup',
'wpstandart_comment_cleanup_section'
);
}
Теперь в настройках можно указать целое число дней.
Автоматическое удаление комментариев по расписанию
Чтобы удалять комментарии без ручного запуска, используем WP-Cron — встроенную систему планировщика задач WordPress.
Регистрация события WP-Cron
add_action('wpstandart_daily_comment_cleanup', 'wpstandart_delete_old_comments');
function wpstandart_activate_comment_cleanup_cron() {
if (!wp_next_scheduled('wpstandart_daily_comment_cleanup')) {
wp_schedule_event(time(), 'daily', 'wpstandart_daily_comment_cleanup');
}
}
add_action('wp', 'wpstandart_activate_comment_cleanup_cron');
Этот код активирует ежедневное событие.
Удаление старых комментариев
Теперь напишем функцию, которая будет удалять комментарии старше указанного количества дней:
function wpstandart_delete_old_comments() {
$days = get_option('wpstandart_comment_cleanup_days', 30);
if (!$days) {
return; // Если настройка не задана, ничего не делаем
}
global $wpdb;
$date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));
// Получим ID комментариев старше даты
$old_comments = $wpdb->get_col($wpdb->prepare(
"SELECT comment_ID FROM {$wpdb->comments} WHERE comment_date < %s",
$date_threshold
));
if (empty($old_comments)) {
return; // Нет старых комментариев
}
foreach ($old_comments as $comment_id) {
wp_delete_comment($comment_id, true); // Удаляем комментарий с мета-данными
}
}
Таким образом, функция получает список старых комментариев и удаляет их.
Использование плагина для расширенного контроля удаления комментариев
Если вы хотите не писать код, а воспользоваться готовым решением, обратите внимание на плагин Auto Delete Comments. Он позволяет настроить автоматическое удаление комментариев по возрасту и статусу, а также исключения. Для интеграции с настройками вашего сайта можно расширить его функционал.
Также для расширенной оптимизации базы данных можно использовать плагин Clearfy Pro, который помогает удалять мусорные данные и оптимизировать базу.
Рекомендации по безопасности и производительности
Удаление комментариев напрямую влияет на данные сайта, поэтому:
- Всегда делайте резервные копии базы данных перед активацией автоматического удаления.
- Проверяйте настройки и тестируйте код на тестовой среде.
- Оптимизируйте запросы и не запускайте удаление слишком часто — раз в сутки достаточно.
- Убедитесь, что WP-Cron работает корректно на вашем хостинге, иначе задачи могут не запускаться.
Выводы по реализации
Добавление настройки удаления старых комментариев в WordPress — это полезный инструмент для поддержки чистоты базы данных и ускорения работы сайта. С помощью нескольких функций и встроенного WP-Cron можно автоматизировать процесс и управлять им из админки без лишних усилий. Такой подход подходит как для небольших блогов, так и для средних проектов с активной дискуссией.
Если хочется добавить более удобный и мощный функционал, рекомендуем обратить внимание на готовые плагины с возможностью интеграции и расширения.