Проблема управления мультисайтом WordPress: когда и зачем удалять старые сайты
Если у вас настроен мультисайт WordPress (Multisite), со временем количество созданных сайтов может разрастаться, включая неактивные, тестовые или заброшенные чужие сайты. Это приводит к росту базы данных и замедлению работы сети. Важно периодически проводить уборку — удалять сайты, которые давно не обновлялись или не используются.
Ручное удаление каждого сайта неудобно и подвержено ошибкам, особенно если сайтов сотни. Поэтому полезно автоматизировать этот процесс, чтобы экономить время и поддерживать чистоту базы.
В этой статье мы рассмотрим, как настроить автоматическое удаление старых сайтов в мультисайте WordPress на основе даты последнего обновления, а также обзор плагинов, которые могут помочь в управлении мультисайтом.
Определение критериев удаления сайтов: какие параметры учитывать
Для автоматизации нужно чётко определить, какие сайты считать «старыми» или «заброшенными». Основные критерии:
- Дата последнего обновления контента: если сайт не обновлялся в течение, например, 6 месяцев или года;
- Дата последнего входа администратора: отсутствие активности со стороны владельца;
- Отсутствие опубликованных постов или страниц;
- Флаг неактивности в метаданных сайта.
В большинстве случаев достаточно проверить дату последнего обновления публикации — это простой и надёжный способ.
Пример функции для удаления старых сайтов в мультисайте WordPress
Ниже пример кастомной функции wpreboot_delete_old_sites(), которая перебирает все сайты сети и удаляет те, где последний пост старше 180 дней. Код можно добавить в файл functions.php вашей темы или в отдельный плагин.
function wpreboot_delete_old_sites() {
if (!is_multisite()) {
return;
}
$sites = get_sites(['number' => 0]);
$threshold = strtotime('-180 days');
foreach ($sites as $site) {
$blog_id = $site->blog_id;
switch_to_blog($blog_id);
$last_post = new WP_Query([
'post_type' => 'any',
'posts_per_page' => 1,
'orderby' => 'modified',
'order' => 'DESC',
'fields' => 'ids',
]);
if ($last_post->have_posts()) {
$last_post_id = $last_post->posts[0];
$last_modified = get_post_modified_time('U', false, $last_post_id);
if ($last_modified < $threshold) {
wpreboot_delete_site_safely($blog_id);
}
} else {
// Нет постов, можно удалить
wpreboot_delete_site_safely($blog_id);
}
restore_current_blog();
}
}
function wpreboot_delete_site_safely($blog_id) {
// Запрет удалять основной сайт
if ($blog_id == 1) {
return;
}
// Функция wp_delete_site доступна с WP 5.1
if (function_exists('wp_delete_site')) {
wp_delete_site($blog_id);
error_log("Сайт с ID {$blog_id} удалён автоматически.");
}
}Этот код можно запускать по крону — добавьте хук в wp_schedule_event для регулярного запуска.
Автоматизация удаления через WP-Cron
Чтобы функция запускалась автоматически, добавьте планировщик событий:
function wpreboot_schedule_delete_old_sites() {
if (!wp_next_scheduled('wpreboot_cron_delete_old_sites')) {
wp_schedule_event(time(), 'daily', 'wpreboot_cron_delete_old_sites');
}
}
add_action('wp', 'wpreboot_schedule_delete_old_sites');
add_action('wpreboot_cron_delete_old_sites', 'wpreboot_delete_old_sites');Теперь каждые сутки система будет проверять и удалять «старые» сайты. Если хотите настроить вручную — используйте WP-CLI или запускайте функцию через админку.
Обзор плагинов для управления мультисайтом и удаления сайтов
Если кодирование — не ваш конек, есть готовые решения:
- Multisite Enhancements — улучшает интерфейс мультисайта, позволяет быстро просматривать и удалять сайты.
- NS Cloner — позволяет клонировать и удалять сайты, удобно для тестирования.
- WP Ultimo — платный плагин для создания SaaS-платформ на базе мультисайта с гибкими настройками удаления и управления.
Для автоматической очистки по времени можно использовать кастомные скрипты, как выше, или расширить их с помощью плагинов Clearfy Pro, который оптимизирует базу и может помочь с удалением ненужных данных.
Дополнительные советы по безопасности и резервному копированию
Перед автоматическим удалением всегда делайте резервную копию базы и файлов. Используйте плагины типа UpdraftPlus, чтобы иметь возможность быстро восстановить данные.
Рекомендуется также логировать все операции удаления, чтобы отслеживать, какие сайты были удалены и когда.
Если в мультисайте есть сайты с разными владельцами, уведомляйте их заранее о возможном удалении из-за неактивности.
Итоги и рекомендации по внедрению автоматического удаления
Автоматизация удаления старых сайтов мультисайта помогает поддерживать базу данных в порядке, снижает нагрузку на сервер и упрощает управление сетью.
Главное — правильно определить критерии и обеспечить безопасность процесса через резервные копии и логи.
Используйте приведённый пример кода как основу и адаптируйте под свои задачи. Для расширенного управления рассмотрите плагины, которые интегрируются с мультисайтом и дают удобный интерфейс.