Поддержание актуальности и чистоты контента на сайте WordPress — важная задача для поддержания производительности, улучшения SEO и удобства пользователей. Часто на сайтах накапливается старый, неактуальный контент: записи, страницы, медиафайлы, которые уже не нужны и только загромождают базу данных и файловую систему.
Почему важно автоматизировать удаление старого контента WordPress
Ручное удаление — трудоемкий и рискованный процесс, особенно на больших сайтах. Автоматизация позволяет:
- Экономить время и ресурсы администратора.
- Поддерживать базу данных в оптимальном состоянии.
- Минимизировать ошибки удаления нужных данных.
- Автоматически очищать сервер от неиспользуемых медиафайлов.
Для этого удобно сочетать использование WP Cron — встроенного планировщика задач WordPress, и AJAX-запросов для мониторинга и управления процессом удаления через административную панель.
Как работает автоматическое удаление старого контента в WordPress
Основная идея — настроить периодическую задачу, которая будет запускать функцию удаления записей и медиа, старше определенного периода (например, 1 год). При этом через AJAX можно реализовать мониторинг прогресса удаления и управление задачей без перезагрузки страницы.
Шаг 1. Создаем функцию удаления старых записей и медиа
В файл functions.php вашей темы или в плагин добавьте следующий код:
function wpbit_delete_old_content() {
$days = 365; // удалять записи старше 365 дней
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
// Удаление записей
$args = [
'post_type' => ['post', 'page'],
'post_status' => 'publish',
'date_query' => [
[
'before' => $date_threshold,
'inclusive' => true,
],
],
'fields' => 'ids',
'posts_per_page' => -1,
];
$old_posts = get_posts($args);
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true); // принудительное удаление
}
// Удаление неиспользуемых медиафайлов
$media_args = [
'post_type' => 'attachment',
'post_status' => 'inherit',
'date_query' => [
[
'before' => $date_threshold,
'inclusive' => true,
],
],
'fields' => 'ids',
'posts_per_page' => -1,
];
$old_attachments = get_posts($media_args);
foreach ($old_attachments as $attachment_id) {
// Проверяем, используется ли файл
$meta = get_attached_file($attachment_id);
if (!wpbit_is_attachment_used($attachment_id)) {
wp_delete_attachment($attachment_id, true);
}
}
}
function wpbit_is_attachment_used($attachment_id) {
global $wpdb;
$query = $wpdb->prepare(
"SELECT post_content FROM $wpdb->posts WHERE post_content LIKE %s",
'%' . $attachment_id . '%'
);
$result = $wpdb->get_var($query);
return !empty($result);
}
Функция wpbit_delete_old_content удалит все записи и страницы старше года, а также медиафайлы, которые не используются в контенте. Для проверки использования медиа используется функция wpbit_is_attachment_used, которая ищет ID вложения в постах.
Шаг 2. Настраиваем WP Cron для автоматического запуска
Добавим задачу в планировщик WordPress, чтобы функция запускалась раз в сутки:
function wpbit_schedule_delete_old_content() {
if (!wp_next_scheduled('wpbit_delete_old_content_event')) {
wp_schedule_event(time(), 'daily', 'wpbit_delete_old_content_event');
}
}
add_action('wp', 'wpbit_schedule_delete_old_content');
add_action('wpbit_delete_old_content_event', 'wpbit_delete_old_content');
// Очистка при деактивации плагина или темы
function wpbit_clear_schedule() {
$timestamp = wp_next_scheduled('wpbit_delete_old_content_event');
if ($timestamp) {
wp_unschedule_event($timestamp, 'wpbit_delete_old_content_event');
}
}
register_deactivation_hook(__FILE__, 'wpbit_clear_schedule');
Эта часть кода регистрирует ежедневное событие, вызывающее чистку старого контента.
Шаг 3. Добавляем AJAX для мониторинга удаления
Иногда полезно запускать удаление вручную и видеть прогресс. Реализуем AJAX-запрос для запуска удаления и вывода результата:
add_action('wp_ajax_wpbit_manual_delete', 'wpbit_manual_delete_callback');
function wpbit_manual_delete_callback() {
if (!current_user_can('manage_options')) {
wp_send_json_error('Недостаточно прав');
wp_die();
}
wpbit_delete_old_content();
wp_send_json_success('Удаление завершено');
wp_die();
}
Чтобы вызвать этот AJAX из админки, можно добавить кнопку с JavaScript:
<button id="wpbit-delete-old-content">Удалить старый контент</button>
<script type="text/javascript">
document.getElementById('wpbit-delete-old-content').addEventListener('click', function() {
var btn = this;
btn.disabled = true;
btn.textContent = 'Удаление...';
jQuery.post(ajaxurl, { action: 'wpbit_manual_delete' }, function(response) {
if(response.success) {
alert(response.data);
} else {
alert('Ошибка: ' + response.data);
}
btn.disabled = false;
btn.textContent = 'Удалить старый контент';
});
});
</script>
Таким образом, администратор может сам запускать удаление и получать обратную связь без перезагрузки страницы.
Использование плагинов для автоматизации удаления
Если вы не хотите писать код самостоятельно, можно использовать плагины с похожими возможностями:
- Clearfy Pro — в числе прочих функций содержит инструменты для оптимизации базы и удаления мусорных данных.
- WPRemark — позволяет управлять комментариями и удалять спам и старые комментарии автоматически.
Однако для точечного удаления именно старого контента лучше применять собственный код, так как плагины обычно не предоставляют такой гибкости.
Советы по безопасности и производительности
При автоматическом удалении старого контента важно соблюдать осторожность:
- Обязательно делайте резервные копии перед внедрением автоматизации.
- Тестируйте код на тестовом сервере или локальной копии сайта.
- Не удаляйте контент без подтверждения или логов — добавляйте запись в системный журнал.
- Для больших сайтов разбивайте удаление на части, чтобы избежать превышения лимитов по времени выполнения PHP.
Если нужно, можно доработать функцию удаления, чтобы она удаляла записи порциями, например по 50 штук за один вызов, и запускать повторно через AJAX, обновляя прогресс.
Заключение
Автоматизация удаления старого контента в WordPress с помощью WP Cron и AJAX — мощный инструмент для поддержания сайта в порядке. Используя приведенный пример кода, вы сможете настроить регулярное удаление записей и медиафайлов, что повысит производительность и удобство работы с сайтом.
Если хотите расширить функциональность, обратите внимание на плагины Clearfy Pro и WPRemark, которые помогут с оптимизацией и управлением контентом на вашем сайте.