Работа с медиабиблиотекой WordPress требует не только загрузки и хранения файлов, но и их грамотного управления. Иногда возникает задача удалить определённые файлы из медиабиблиотеки, не удаляя их физически с сервера, или же полностью скрыть часть файлов от отображения в админке. В этой статье мы подробно разберём, как это можно сделать с помощью кода и плагинов, а также какие ситуации требуют таких решений.
Почему надо уметь удалять и скрывать файлы из медиабиблиотеки WordPress
Медиабиблиотека WordPress отображает все файлы, загруженные через неё, а также привязанные к записям и страницам. Однако бывают случаи, когда:
- Нужно убрать устаревшие или временные файлы из админки, чтобы не загромождать интерфейс;
- Файлы необходимы для работы сайта, но не должны быть доступны для редактирования или удаления;
- Требуется скрыть медиафайлы, связанные с определёнными пользователями или ролями;
- Нужно удалить записи о файлах из медиабиблиотеки, но оставить их на сервере для использования в других целях.
Рассмотрим, как решить эти задачи.
Как программно скрыть файлы из медиабиблиотеки по типу или метаданным
Основной инструмент для изменения вывода медиабиблиотеки — фильтр ajax_query_attachments_args. С его помощью можно модифицировать WP_Query, который получает список медиафайлов в админке.
Например, чтобы скрыть файлы с определённым расширением, добавим в functions.php темы или в собственный плагин следующий код:
function wpupload_hide_attachments_by_extension($query_args) {
// Получаем все фильтры, если они есть
$meta_query = isset($query_args['meta_query']) ? $query_args['meta_query'] : [];
// Добавляем условие исключить файлы с расширением .tmp
$meta_query[] = [
'key' => '_wp_attached_file',
'value' => '.tmp',
'compare' => 'NOT LIKE'
];
$query_args['meta_query'] = $meta_query;
return $query_args;
}
add_filter('ajax_query_attachments_args', 'wpupload_hide_attachments_by_extension');
В этом примере мы исключаем файлы с расширением .tmp. Аналогично можно фильтровать файлы по другим признакам, например, по кастомным метаданным.
Скрытие файлов по пользовательским ролям
Иногда нужно, чтобы часть файлов видели только администраторы, а для редакторов и авторов они были скрыты. Добавим проверку роли пользователя:
function wpupload_hide_attachments_by_user_role($query_args) {
if (!current_user_can('administrator')) {
$meta_query = isset($query_args['meta_query']) ? $query_args['meta_query'] : [];
$meta_query[] = [
'key' => '_wpupload_hidden',
'compare' => 'NOT EXISTS'
];
$query_args['meta_query'] = $meta_query;
}
return $query_args;
}
add_filter('ajax_query_attachments_args', 'wpupload_hide_attachments_by_user_role');
Здесь предполагается, что в медиафайлах с мета _wpupload_hidden установлено, что файл скрыт. Администраторы видят все.
Как удалить записи о файлах из медиабиблиотеки, оставив файлы на сервере
Если вы хотите освободить медиабиблиотеку от неиспользуемых записей, но не удалять физически файлы (например, если они подключаются напрямую или используются в кастомных шаблонах), можно удалить посты вложений из базы данных.
Пример функции для удаления вложений по ID:
function wpupload_delete_attachment_post($attachment_id) {
// Удаляем запись вложения без удаления файла
wp_delete_attachment($attachment_id, false);
}
Параметр false отключает удаление самого файла. Будьте осторожны, чтобы не получить «мертвые» ссылки.
Массовое удаление записей вложений по условию
Например, удалить все вложения с расширением .log из медиабиблиотеки, оставив файлы:
function wpupload_bulk_delete_attachments_log() {
$args = [
'post_type' => 'attachment',
'posts_per_page' => -1,
'meta_query' => [
[
'key' => '_wp_attached_file',
'value' => '.log',
'compare' => 'LIKE'
]
],
'fields' => 'ids'
];
$attachments = get_posts($args);
foreach ($attachments as $attachment_id) {
wp_delete_attachment($attachment_id, false);
}
}
Не забудьте запускать такие операции с бэкапом базы и файлов.
Плагины для управления медиабиблиотекой с расширенными возможностями скрытия и удаления
Если вы не хотите писать код, обратите внимание на следующие плагины, которые позволяют гибко управлять медиафайлами:
- Media Library Assistant — расширяет стандартную медиабиблиотеку, добавляет фильтры и массовые операции;
- Enhanced Media Library — позволяет создавать таксономии для файлов и фильтровать их по типам и метаданным;
- FileBird — визуально организует файлы по папкам, что помогает скрывать и структурировать медиа;
- WP Media Folder (платный) — расширенные опции управления, в том числе права доступа к папкам.
Для более продвинутого контроля стоит рассмотреть плагин Clearfy Pro, который оптимизирует работу с медиа, включая скрытие и оптимизацию.
Советы по безопасности при удалении и скрытии файлов в WordPress
Удаление записей вложений без удаления файлов может привести к накоплению мусора на сервере. Регулярно проверяйте папки загрузок и удаляйте неиспользуемые файлы вручную или с помощью скриптов.
При скрытии файлов через фильтры внимательно тестируйте права доступа, чтобы не допустить утечки приватных данных.
Всегда делайте резервные копии базы и файлов перед массовыми операциями.
Итог: гибкое управление файлами медиабиблиотеки WordPress
Управление файлами в медиабиблиотеке — это не только загрузка и удаление, но и умение скрыть ненужные файлы для конкретных пользователей или задач, а также возможность удалить записи файлов без удаления самих файлов. Используя фильтры WordPress, можно создавать гибкие решения без сторонних плагинов, а при необходимости — использовать готовые инструменты для удобства и безопасности.