Ajouter des filtres par MIME type dans la bibliothèque de médias
Cette astuce permet d’ajouter de nouveaux filtres dans la bibliothèques des médias en fonction des formats précédemment uploader.
Dans la bibliothèque des médias, WordPress propose un seul filtre par image au niveau des types de fichier. Je vous propose d’ajouter de nouveaux filtres en fonction d’un MIME type précis.
Voici le résultat final dans lequel j’ai uploadé 3 fichiers : un .zip, un .rar et un .pdf.
Nous allons ajouter dans WordPress tous les MIME types que vous utilisez avec mise à jour et gestion d’un cache.
Ajout des MIME type dans la liste des filtres
La première partie consiste à ajouter les MIME types dans la liste des filtres sur la page des médias.
Copier le code ci-dessous dans le fichier functions.php présent à la racine de votre thème :
[pastacode lang=”php” message=”” highlight=”” provider=”manual”]
function add_post_mime_types( $post_mime_types ) {
$mimes = get_transient( 'added_post_mime_types' ) != '' ? get_transient( 'added_post_mime_types' ) : request_post_mime_types();
foreach( $mimes as $m ):
$mime_title = explode( '/', strtoupper( $m ) );
$post_mime_types[$m] = array( $mime_title[1], $mime_title[1], _n_noop($mime_title[1].' (%s)', $mime_title[1].' (%s)') );
endforeach;
return $post_mime_types;
}
add_action( 'post_mime_types', 'add_post_mime_types' );
function request_post_mime_types() {
global $wpdb;
$mimes = $wpdb->get_col( 'SELECT DISTINCT(post_mime_type) FROM '.$wpdb->posts.' WHERE post_mime_type!="" AND post_mime_type NOT LIKE "image%"' );
delete_transient( 'added_post_mime_types' );
set_transient( 'added_post_mime_types', $mimes, 60*60*24*30 ); // 30 jours ou prochain media ajouté/édité/supprimé
return $mimes;
}
add_action( 'add_attachment', 'request_post_mime_types' );
add_action( 'edit_attachment', 'request_post_mime_types' );
[/pastacode]
En fait, grâce à la fonction request_post_mime_types, nous réalisons une requête en BDD qui nous renvoie tous les MIME type présents (hormis “image” que WordPress gère déjà). Ensuite, nous gardons dans une donnée transitoire – set_transient()
– ces MIME.
On associe cette fonction aux hooks add_attachment
et edit_attachment
. Je n’utilise pas delete_attachment
car il est lancé avant la suppression en base de données et non après.
Suppression des MIME type dans la liste des filtres
Copier le code ci-dessous dans le fichier functions.php
présent à la racine de votre thème.
[pastacode lang=”php” message=”” highlight=”” provider=”manual”]
function maybe_request_post_mime_types( $post_id ) {
$post = get_post( $post_id );
if( $post->post_type=='attachment' && !in_array( $P->post_mime_type, get_transient( 'added_post_mime_types' ) ) )
request_post_mime_types();
}
add_action( 'deleted_post', 'maybe_request_post_mime_types', 10, 1 );
[/pastacode]
J’utilise le hook deleted_post
car il est lancé après la suppression en base de données. Cependant, je vais mettre à jour ma donnée lorsqu’il s’agit d’un média et que le MIME type est inexistant.
Vous voilà enfin avec vos médias filtrés par type.
4 Commentaires
Hey excellent !
Je crois que ça va me servir tout de suite pour un client.
Merci Julio ;)
PS : désolé, commentaire pas plus constructif que ça aujourd’hui
Pas de mal ;] Je viens aussi de créer ça pour un client ^^ J’ai trouvé ça assez simple pour en faire une astuce ici :p
Bon ben c’est top ! Un grand merci !!!
Excellent ! J’utilise média tags pour faire a peu près la même chose, mais le 2 ensemble ça va être encore mieux ;)