Stop worrying about the potholes in the road and enjoy the journey

Как автоматически удалить вложения к постам и избранные изображения в WordPress

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

В этой статье мы покажем вам, как автоматически удалять вложения и избранные изображения при удалении записей в WordPress с помощью простого фрагмента кода.

Понимание проблемы

По умолчанию, когда вы удаляете запись в WordPress, ее вложения (такие как изображения, PDF или другие медиафайлы) и избранные изображения остаются в медиатеке. Это может быть проблематично при масштабной очистке или когда вы хотите убедиться, что все связанные данные удалены вместе с записью.

Решение

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

Пошаговое руководство

  1. Откройте директорию вашей темы WordPress и найдите файл functions.php. В качестве альтернативы, вы можете создать пользовательский плагин для этого кода.
  2. Добавьте следующий фрагмент кода в файл:
function delete_post_attachments($post_id) {
    // Проверьте, является ли удаленный элемент записью
    if (get_post_type($post_id) !== 'post') {
        return;
    }

    // Получите все вложения, связанные с записью
    $attachments = get_attached_media('', $post_id);
    foreach ($attachments as $attachment) {
        wp_delete_attachment($attachment->ID, true);
    }

    // Получите и удалите избранное изображение записи
    $featured_image_id = get_post_thumbnail_id($post_id);
    if ($featured_image_id) {
        wp_delete_attachment($featured_image_id, true);
    }
}
add_action('before_delete_post', 'delete_post_attachments');

Эта функция использует хук before_delete_post, чтобы запускаться всякий раз, когда запись удаляется. Она удаляет:

  • Все медиа-вложения, связанные с записью.
  • Избранное изображение записи (если установлено).

Как это работает

Функция проверяет, является ли удаленный элемент записью. Если да, она извлекает все вложения, связанные с записью, используя get_attached_media(), и удаляет их с помощью wp_delete_attachment(). Кроме того, она удаляет избранное изображение, используя get_post_thumbnail_id().

Что нужно иметь в виду

  • Это решение работает специально для записей. Если вы хотите включить другие типы записей, вы можете изменить условие в функции.
  • Убедитесь, что протестировали эту функциональность в тестовой среде, прежде чем применять ее на живом сайте.
  • Сделайте резервное копирование вашей базы данных и файлов, чтобы предотвратить случайную потерю данных.

Заключение

С помощью этого простого фрагмента кода вы можете упростить процесс управления записями и убедиться, что никакие ненужные вложения или избранные изображения не остаются после удаления записей. Это особенно полезно для массовых удалений или масштабной очистки сайта.

Мы надеемся, что это руководство поможет вам поддерживать ваш сайт на WordPress в порядке и эффективности. Если у вас есть вопросы или нужна дополнительная помощь, не стесняйтесь обращаться!

2