Tout savoir sur WordPress
Tutoriel WordPress

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.

Cet article a été mis à jour il y a 4373 jours - Il n'est peut être plus à jour !

Article écrit par Julio P.

Fondateur de SecuPress, l’extension de sécurité WordPress, Julio Potier est un Expert WordPress, un Formateur Expérimenté et un Consultant en Sécurité Web.

Il aime partager ses compétences et ses réflexions sur WordPress, donnant des conférences partout dans le monde.

4 Commentaires

  1. 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

  2. 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

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