Запрет автоматического удаления постов в WordPress: практические решения

В процессе работы с WordPress иногда возникает ситуация, когда записи (посты) удаляются автоматически — например, по истечении срока публикации, при работе с плагинами очистки или из-за ошибок в коде. В этой статье мы разберём, как запретить автоматическое удаление постов, чтобы избежать потери важного контента, а также рассмотрим примеры кода и полезные плагины для контроля этого процесса.

Почему в WordPress могут удаляться посты автоматически

Автоматическое удаление постов может происходить по нескольким причинам:

  • Использование плагинов для автоматической очистки базы данных и удаления старого или неактивного контента.
  • Настройки публикации с ограничением срока жизни записи (expiration date).
  • Ошибки в кастомных скриптах или хуках, которые вызывают удаление записей.
  • Использование Cron-задач, которые выполняют удаление по расписанию.

В первую очередь необходимо понять источник удаления и только потом внедрять запрет.

Использование хуков для предотвращения удаления постов

WordPress предоставляет несколько хуков, которые позволяют перехватить процесс удаления записи и отменить его. Основной — это before_delete_post и wp_trash_post. Можно использовать фильтр wp_trash_post, чтобы запретить перемещение поста в корзину, и хук before_delete_post для блокировки окончательного удаления.

Пример функции запрета удаления поста

function wpclass_prevent_post_deletion($post_id) {
    // Можно добавить условие по типу записи или ID
    $protected_post_ids = array(1, 2, 3); // ID защищённых постов
    if (in_array($post_id, $protected_post_ids)) {
        wp_die('Удаление этого поста запрещено.');
    }
}
add_action('before_delete_post', 'wpclass_prevent_post_deletion');

Этот код остановит удаление постов с ID 1, 2 и 3, выдав сообщение об ошибке.

Запрет перемещения записи в корзину

function wpclass_prevent_trash_post($post_id) {
    $protected_post_types = array('post', 'page');
    $post = get_post($post_id);
    if (in_array($post->post_type, $protected_post_types)) {
        return false; // Запретить отправку в корзину
    }
    return true;
}
add_filter('wp_trash_post', 'wpclass_prevent_trash_post');

Такой фильтр заблокирует перемещение в корзину для постов и страниц.

Пример: блокируем удаление постов с кастомным полем «protect»

Если вы используете кастомное поле, например, protect, для пометки важных постов, можно блокировать удаление по его наличию:

function wpclass_prevent_deletion_by_meta($post_id) {
    $protect = get_post_meta($post_id, 'protect', true);
    if ($protect === '1') {
        wp_die('Этот пост защищён от удаления.');
    }
}
add_action('before_delete_post', 'wpclass_prevent_deletion_by_meta');

Это позволит гибко управлять защитой постов без жёсткой привязки к ID.

Плагины для контроля автоматического удаления контента

Для удобства управления и мониторинга удаления постов можно использовать плагины:

  • Clearfy Pro — плагин для оптимизации WordPress, позволяющий отключить автоматические процессы, которые могут повлиять на удаление контента.
  • WPRemark — плагин для управления комментариями и контентом, с настройками по сохранению важных данных.

Эти продукты помогут снизить риск потери данных из-за сторонних автоматизаций.

Отслеживание и логирование удаления постов

Чтобы понимать, когда и почему происходит удаление, полезно вести логирование. Ниже пример простого кода для записи информации в лог при попытке удаления.

function wpclass_log_post_deletion_attempt($post_id) {
    $post = get_post($post_id);
    $log_message = sprintf('Попытка удаления поста ID %d, заголовок: %s, тип: %s', $post_id, $post->post_title, $post->post_type);
    error_log($log_message);
}
add_action('before_delete_post', 'wpclass_log_post_deletion_attempt');

Логи будут сохраняться в файле error_log сервера, что поможет выявить неожиданное удаление.

Практические рекомендации

  • Всегда делайте бэкапы перед внесением изменений в логику удаления.
  • Используйте кастомные поля и фильтры для гибкого управления защитой записей.
  • Проверяйте сторонние плагины, которые могут выполнять автоматическую очистку — отключайте или настраивайте их корректно.
  • Используйте логирование для мониторинга удалений, чтобы быстро реагировать на проблемы.
  • При необходимости создайте отдельный плагин с кодом защиты для удобного управления и обновления.
Как удалить пустующие таксономии в WordPress
17.04.2026
Как создать собственный тип записей (Custom Post Type) в WordPress с примером кода
20.02.2026
Как сделать автоматическое удаление старого контента в WordPress
17.11.2025
Как изменить URL структуру таксономии в WordPress без потери SEO
17.02.2026
Блокировка индексации страниц с UTM-метками в WordPress
04.01.2026