Je souhaite empêcher les utilisateurs de pouvoir définir une image sélectionnée dans la médiathèque si sa largeur est inférieure à 100 pixels. Au départ, je pensais utiliser le filtre ajax_query_attachments_args
, mais celui-ci filtre un objet WP_Query()
qui ne peut pas être utilisé à cette fin, car le meta_query
's meta_key
— qui est _wp_attachment_metadata
— contient des données sérialisées. C'est ce que je suis en train d'essayer:
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);
Le résultat que je vois est que le modal Médiathèque apparaît, charge une vignette "vide" et le chargeur AJAX continue d'apparaître et de disparaître par intermittence:
Cependant, si je modifie la dernière condition de mon instruction if pour utiliser ==
au lieu de >=
, alors elle semble fonctionner comme prévu pour certaines valeurs :
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);
Cela ne fonctionne pas toujours, mais je soupçonne que quelque chose me manque. Quelqu'un peut-il s'il vous plaît faire la lumière sur cela? Merci!
Jusqu'à présent, la seule solution envisageable que j'ai proposée consiste à exécuter une nouvelle requête dans le filtre ajax_query_attachments_args
.
Ce n'est certainement pas idéal, mais fonctionne comme prévu en l'absence d'une alternative plus efficace:
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');