В процессе работы с WordPress накапливаются медиафайлы, которые не всегда нужны или используются на сайте. Чаще всего для очистки медиатеки применяются специальные плагины, но бывают ситуации, когда использование плагинов нежелательно или невозможно. В этой статье мы подробно разберём, как удалить загруженные файлы из WordPress без плагинов, используя стандартные инструменты и собственный код.
Почему важно контролировать загруженные файлы
Избыточное количество медиафайлов может негативно сказаться на производительности сайта и усложнить управление контентом. Кроме того, неиспользуемые файлы занимают место на сервере и могут стать причиной проблем при бэкапах и миграциях.
Удаление файлов из папки wp-content/uploads без удаления записей в базе данных приведёт к "битым" ссылкам на изображения в контенте. Поэтому важна синхронизация между базой данных и файловой системой.
Основные способы удаления медиафайлов
- Удаление через админ-панель WordPress (Медиатека).
- Удаление вручную через FTP или файловый менеджер хостинга.
- Удаление через собственный скрипт на PHP, который корректно удалит запись из базы и файл с диска.
Удаление медиафайлов через админ-панель WordPress
Самый простой и безопасный способ — через стандартный интерфейс WordPress. Для этого:
- Перейдите в раздел Медиафайлы > Библиотека.
- Выберите нужные файлы.
- Нажмите кнопку Удалить навсегда.
Этот метод корректно удалит файл с диска и запись из базы данных. Однако при большом количестве файлов такой способ неудобен и неавтоматизирован.
Удаление файлов вручную через FTP или файловый менеджер
Удаление файлов напрямую из папки wp-content/uploads может освободить место, но при этом записи о файлах останутся в базе данных. Это приведёт к ошибкам при отображении медиа в админке и на сайте.
Если вы всё-таки решили использовать этот способ, рекомендуем предварительно сделать резервную копию БД и файлов. После удаления файлов через FTP выполните оптимизацию базы данных и проверьте целостность ссылок.
Автоматизация удаления медиафайлов без плагинов с помощью PHP
Для правильного удаления файла и записи в базе данных можно написать собственный PHP-скрипт, который использует стандартные функции WordPress.
Для примера создадим функцию wpbloger_delete_media_by_id, которая удалит медиафайл по ID, удалив при этом и файл с диска, и запись из базы.
function wpbloger_delete_media_by_id($attachment_id) {
if (!current_user_can('delete_post', $attachment_id)) {
return new WP_Error('permission_denied', 'У вас нет прав для удаления этого файла');
}
// Используем встроенную функцию для удаления вложения
$deleted = wp_delete_attachment($attachment_id, true); // true — удалить файл с диска
if ($deleted) {
return true;
} else {
return new WP_Error('delete_failed', 'Не удалось удалить вложение');
}
}
Эту функцию можно использовать в кастомных скриптах или в консоли WP-CLI, чтобы массово удалять ненужные медиафайлы по ID.
Пример массового удаления по условию
Допустим, нужно удалить все вложения старше 1 года, которые не используются ни в каких постах. Вот пример кода:
function wpbloger_delete_old_unused_media() {
$args = [
'post_type' => 'attachment',
'posts_per_page' => -1,
'date_query' => [
[
'before' => '1 year ago',
],
],
'meta_query' => [
[
'key' => '_wp_attachment_context',
'compare' => 'NOT EXISTS',
],
],
];
$query = new WP_Query($args);
if ($query->have_posts()) {
foreach ($query->posts as $attachment) {
$result = wpbloger_delete_media_by_id($attachment->ID);
if (is_wp_error($result)) {
error_log('Ошибка удаления вложения ID ' . $attachment->ID . ': ' . $result->get_error_message());
}
}
}
}
Этот код можно запускать из файла functions.php вашей темы или в отдельном скрипте с загрузкой WordPress.
Дополнительные рекомендации для безопасного удаления файлов
Перед удалением всегда делайте резервную копию базы данных и файлов. Рекомендуется тестировать удаление на локальной копии сайта.
Если вы хотите более удобный интерфейс для управления медиа, обратите внимание на плагины как Clearfy Pro, который предлагает оптимизацию и управление медиафайлами.
Выводы
Удаление загруженных файлов из WordPress без плагинов возможно и может быть реализовано через стандартные функции CMS. Такой подход полезен для разработчиков, желающих иметь полный контроль над процессом и интегрировать удаление в собственные инструменты.
Используйте функцию wp_delete_attachment для корректного удаления, не забывайте о правах доступа и резервных копиях.