Filtern Sie Medienbibliothekselemente nach Größe

Ich möchte verhindern, dass Benutzer ein ausgewähltes Bild aus der Medienbibliothek festlegen können, wenn die Breite weniger als 100 Pixel beträgt. Ursprünglich dachte ich, den ajax_query_attachments_args Filter zu verwenden, aber es filtert ein WP_Query() -Objekt, das effektiv nicht für diesen Zweck verwendet werden kann, da der meta_querymeta_key der meta_querymeta_key , der _wp_attachment_metadata serialisierte Daten enthält. Das versuche ich gerade:

 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); 

Das Ergebnis, das ich sehe, ist, dass das Medienbibliothek-Modal erscheint, ein “leeres” Thumbnail lädt und der AJAX-Loader intermittierend weiterhin erscheint und verschwindet:

Bildbeschreibung hier eingeben

Wenn ich jedoch die letzte Bedingung in meiner if-statement ändere, um == anstelle von >= dann scheint sie für bestimmte Werte wie erwartet zu funktionieren:

 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); 

Es funktioniert nicht immer, aber ich vermute, dass ich hier etwas verpasse. Kann jemand bitte etwas Licht darauf casting? Vielen Dank!

Solutions Collecting From Web of "Filtern Sie Medienbibliothekselemente nach Größe"

Bis jetzt ist die einzige praktikable Lösung, die ich gefunden habe, eine neue Abfrage im ajax_query_attachments_args Filter ajax_query_attachments_args .

Es ist definitiv nicht ideal, aber funktioniert wie erwartet, ohne eine effizientere Alternative:

 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');