Хук ajax_query_attachments_args
в WordPress используется для изменения параметров запроса WP_Query
, который выполняется через AJAX для получения вложений (медиафайлов) в модальном окне медиа-библиотеки. Этот фильтр позволяет ограничивать видимость файлов для пользователей, настраивать количество загружаемых файлов и другие параметры выборки.
apply_filters( 'ajax_query_attachments_args', array $query );
Параметры
$query
(array): Массив параметров запроса, передаваемый вWP_Query
. Этот массив может включать такие параметры, как:author
(int): ID автора файлов, если требуется ограничить вывод вложений.posts_per_page
(int): Количество файлов для отображения на одной странице.post_mime_type
(string): Тип медиафайла, напримерimage
,video
,audio
.
Пример 1: Ограничение отображения медиафайлов только для текущего пользователя
Если необходимо, чтобы пользователи видели только свои собственные файлы, можно задать авторство для вложений, отфильтровав по ID текущего пользователя.
add_filter( 'ajax_query_attachments_args', 'filter_attachments_by_current_user', 10, 1 );
function filter_attachments_by_current_user( $query ) {
$user_id = get_current_user_id();
if ( $user_id ) {
$query['author'] = $user_id;
}
return $query;
}
Пример 2: Показ только изображений в медиа-библиотеке
Если вам нужно ограничить выборку только изображениями, можно установить MIME-тип вложений на image
.
add_filter( 'ajax_query_attachments_args', 'show_only_images_in_media_library', 10, 1 );
function show_only_images_in_media_library( $query ) {
$query['post_mime_type'] = 'image';
return $query;
}
Пример 3: Настройка количества загружаемых файлов
Этот пример устанавливает лимит на количество медиафайлов, загружаемых в библиотеке при каждом AJAX-запросе.
add_filter( 'ajax_query_attachments_args', 'limit_media_files_per_page', 10, 1 );
function limit_media_files_per_page( $query ) {
$query['posts_per_page'] = 15; // Показывать по 15 файлов за раз
return $query;
}
Пример 4: Показ медиафайлов по категории
Можно настроить вывод вложений, чтобы они были ограничены определенной категорией. Например, если медиафайлы имеют определенные категории через таксономии, можно фильтровать запрос по этой категории.
add_filter( 'ajax_query_attachments_args', 'filter_attachments_by_category', 10, 1 );
function filter_attachments_by_category( $query ) {
$query['tax_query'] = array(
array(
'taxonomy' => 'media_category',
'field' => 'slug',
'terms' => 'design', // Только файлы из категории "design"
),
);
return $query;
}
Пример 5: Динамическое изменение количества файлов в зависимости от параметров запроса
Этот пример динамически изменяет количество загружаемых файлов в зависимости от количества ID, переданных в параметре post__in
, что полезно для плагинов, таких как Carbon Fields.
add_filter( 'ajax_query_attachments_args', 'dynamic_posts_per_page_based_on_post_in', 10, 1 );
function dynamic_posts_per_page_based_on_post_in( $query ) {
if ( isset( $query['post__in'] ) && is_array( $query['post__in'] ) ) {
$query['posts_per_page'] = count( $query['post__in'] );
}
return $query;
}
Пример 6: Исключение определенного типа файлов
Если вам нужно исключить из медиабиблиотеки, например, видеофайлы, можно добавить соответствующую проверку в фильтр.
add_filter( 'ajax_query_attachments_args', 'exclude_video_files_from_media_library', 10, 1 );
function exclude_video_files_from_media_library( $query ) {
$query['post_mime_type'] = array( 'audio', 'image' ); // Исключаем видео, показываем только аудио и изображения
return $query;
}
Заключение
Хук ajax_query_attachments_args
предоставляет гибкие возможности для управления отображением медиафайлов в модальном окне медиабиблиотеки. С его помощью можно ограничивать доступ, фильтровать по типам файлов, категориям и настраивать видимость медиафайлов.