Filtre os itens da biblioteca de mídia por tamanho

Eu quero evitar que os usuários possam configurar uma Imagem em Destaque da biblioteca de mídia se sua largura for inferior a 100px. Originalmente, pensei em usar o filtro ajax_query_attachments_args , mas filtra um object WP_Query() que efetivamente não pode ser usado para este propósito porque a meta_query da meta_key – que é _wp_attachment_metadata – contém dados serializados. Isso é o que eu estou tentando atualmente:

 function restrict_media_library_by_width($response, $attachment, $meta) { if(isset($response['width']) && isset($response['height']) && $response['width'] >= 100) { return $response; } return false; } add_filter('wp_prepare_attachment_for_js', 'restrict_media_library_by_width', 10, 3); 

O resultado que vejo é que o Media Library modal aparece, carrega uma miniatura “vazia” e o carregador AJAX continua intermitentemente aparecendo e desaparecendo:

insira a descrição da imagem aqui

No entanto, se eu alterar o último condicional na minha instrução if para usar == vez de >= então parece funcionar como esperado para determinados valores :

 function restrict_media_library_by_width($response, $attachment, $meta) { if(isset($response['width']) && isset($response['height']) && $response['width'] == 100) { return $response; } return false; } add_filter('wp_prepare_attachment_for_js', 'restrict_media_library_by_width', 10, 3); 

Isso nem sempre funciona, mas eu suspeito que estou perdendo algo aqui. Alguém pode esclarecer isso? Obrigado!

Solutions Collecting From Web of "Filtre os itens da biblioteca de mídia por tamanho"

Até agora, a única solução viável que encontrei é executar uma nova consulta dentro do filtro ajax_query_attachments_args .

Definitivamente, não é ideal, mas funciona como esperado na ausência de uma alternativa mais eficiente:

 function restrict_media_library_by_width($query) { $include = array(); $exclude = array(); $temp_query = new WP_Query($query); if($temp_query->have_posts()) { while($temp_query->have_posts()) { $temp_query->the_post(); $meta = wp_get_attachment_metadata(get_the_ID()); $meta['mime-type'] = get_post_mime_type(get_the_ID()); if(isset($meta['mime-type']) && ($meta['mime-type'] == 'image/jpeg' && isset($meta['width']) && $meta['width'] >= 100) || $meta['mime-type'] == 'image/svg+xml') { $include[] = get_the_ID(); } else { $exclude[] = get_the_ID(); } } } wp_reset_query(); $query['post__in'] = $include; $query['post__not_in'] = $exclude; return $query; } add_filter('ajax_query_attachments_args', 'restrict_media_library_by_width');