Диагностика проблемы: почему записи удаляются автоматически
Если на вашем сайте WordPress неожиданно пропадают записи, причиной может быть одна из нескольких автоматических процедур очистки или кастомный код, вызывающий удаление. Частые источники проблемы:
- Плагины оптимизации или очистки базы данных, настроенные на удаление старого или неактивного контента;
- Кастомные скрипты или cron-задачи, настроенные на автоматическую очистку;
- Ошибки в плагинах, управляющих кастомными типами записей;
- Проблемы с правами доступа или ролями пользователей, приводящие к ошибочному удалению;
- Вмешательство в WP_Query с параметрами, приводящими к удалению записей.
Для начала нужно выяснить источник удаления, чтобы не устранять симптомы, а устранить причину.
Пошаговое решение: как остановить автоматическое удаление записей
1. Проверка активных плагинов на автоматическую очистку
Перейдите в раздел «Плагины» и обратите внимание на установленные плагины оптимизации, например, WP-Optimize, Advanced Database Cleaner, или кастомные скрипты. В настройках таких плагинов отключите автоматическую очистку или удаление записей.
2. Отключение кастомных cron-задач, вызывающих удаление
Используйте плагин Cron Control или выполните код для просмотра запущенных cron-задач:
add_action('admin_init', function() {
$crons = _get_cron_array();
echo '<pre>';
print_r($crons);
echo '</pre>';
});Ищите задачи, которые могут удалять записи, например, с именами вроде delete_old_posts или похожими. Отключите их через плагин для управления cron или удалите вызов в коде.
3. Поиск кода в functions.php и плагинах
Проверьте, нет ли в functions.php вашей темы или в файлах плагинов функций, вызывающих wp_delete_post() или wp_trash_post() для массового удаления. Например:
function auto_delete_old_posts() {
$args = [
'post_type' => 'post',
'date_query' => [
[
'before' => '1 year ago'
]
],
'posts_per_page' => -1,
'fields' => 'ids'
];
$old_posts = get_posts($args);
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true);
}
}
add_action('wp_scheduled_delete', 'auto_delete_old_posts');Если такой код есть и вы не хотите удаление, закомментируйте или удалите вызов.
4. Проверка прав пользователей и ролей
Убедитесь, что никто из пользователей с достаточными правами не удаляет записи вручную или через сторонние инструменты. Для дополнительной безопасности временно ограничьте права на удаление.
Как проверить, что автоматическое удаление остановлено
1. Создайте тестовую запись с уникальным названием и датой публикации.
2. Подождите период, на протяжении которого раньше происходило удаление (например, сутки).
3. Проверьте наличие записи в админке и через SQL-запрос:
SELECT * FROM wp_posts WHERE post_title = 'Уникальное название тестовой записи';Если запись на месте — автоматическое удаление прекращено.
Частые ошибки и как их исправить
- Ошибка: Отключение плагина, но удаление продолжается.
Причина: Кастомные cron-задачи или код в теме.
Решение: Проверьте cron и functions.php, отключите лишние задачи и функции. - Ошибка: Проблемы после отключения автоматической очистки — база разрастается.
Причина: Нет контроля за устаревшим контентом.
Решение: Настройте ручную очистку по расписанию с проверкой. - Ошибка: Неправильный фильтр по дате удаляет нужные записи.
Причина: Ошибка в параметрахdate_query.
Решение: Перепроверьте параметры и используйте тестовые записи.
Практические советы по безопасности и производительности
- Всегда делайте резервные копии базы перед изменениями.
- Для автоматической очистки используйте WP-CLI с командами, а не крон в PHP, это надежнее.
- Ограничьте права удаления для пользователей с ролями ниже администратора.
- Используйте плагин Clearfy Pro для безопасной оптимизации и удаления дублей (https://wpshop.ru/plugins/clearfy?utm_source=wplessons.ru&utm_medium=article&utm_campaign=kak-ostanovit-avtomaticheskoe-udaleniye-zapisej-v-wordpress).
Сравнение вариантов управления автоматическим удалением
| Метод | Преимущества | Недостатки |
|---|---|---|
| Отключение плагина очистки | Просто, быстро | Может снизить производительность из-за накопления данных |
| Отключение cron-задач | Точный контроль, не влияет на другие функции | Требует технических знаний |
| Редактирование кода | Полный контроль, гибкость | Риск ошибок, требует тестирования |