web-dev-qa-db-fra.com

post_mime_types Le filtre ne fonctionne pas en mode liste

J'utilise le code suivant pour ajouter de nouvelles options de tri à ma médiathèque:

function modify_post_mime_types( $post_mime_types ) {

    $post_mime_types['application/pdf'] = array( __( 'PDFs' ), __( 'Manage PDFs' ), _n_noop( 'PDF <span class="count">(%s)</span>', 'PDFs <span class="count">(%s)</span>' ) );
    $post_mime_types['application/vnd.openxmlformats-officedocument.presentationml.presentation'] = array( __( 'Powerpoints' ), __( 'Manage Powerpoints' ), _n_noop( 'Powerpoints <span class="count">(%s)</span>', 'Powerpoints <span class="count">(%s)</span>' ) );
    $post_mime_types['application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document'] = array( __( 'Documents' ), __( 'Manage Documents' ), _n_noop( 'Documents <span class="count">(%s)</span>', 'Documents <span class="count">(%s)</span>' ) );

    return $post_mime_types;

}

add_filter( 'post_mime_types', 'modify_post_mime_types' );

Ce qui semble bien fonctionner pour le mode "Grille" activé par JavaScript:

PDFs Grid

Cependant, en mode "Liste", cliquer sur les entrées affiche toutes les extensions/fichiers (même s’ils les comptent correctement) comme indiqué:

PDFs List

Voici l'URL vers laquelle sont redirigés les fichiers PDF:

wp-admin/upload.php? mode = liste et pièce jointe-filter = post_mime_type% 3Application% 252Fpdf & m = 0 & filtre_action = Filtre & s & action = -1 & paginé = 1 & action2 = -1 & affecté & _ajax_nonce = 093720f202 & ps

Si j'essaie avec le filtre standard "Images" de Wordpress, cela fonctionne. Voici l'URL qu'il donne pour ça:

wp-admin/upload.php? mode = liste & attachment-filter = post_mime_type% 3Aimage & m = 0 & filter_action = Filtre & s & action = -1 & paginé = 1 & action2 = -1 & affecté & _ajax_nonce = 093720f202 & ps

Je pense que c'est peut-être un bug de Wordpress, mais assurez-vous que quelqu'un sait quelque chose ici.

5
Drath

Le problème réside dans le paramètre URL attachment-filter=. La barre oblique entre application/pdf (ou autre) est échappée deux fois. Lorsque vous remplacez le %252F par une barre oblique ou %2F, le filtre fonctionnera.

Le premier caractère d'échappement (/ devient %2F) se produit lorsque WP est en train de créer la boîte de sélection contenant les types MIME. La seconde (%2F devient %252F) est effectuée par le navigateur.

La solution la plus simple serait d’urldecoder manuellement le paramètre URL quelque part en PHP:

if ( isset( $_GET['attachment-filter'] ) )
    $_GET['attachment-filter'] = urldecode($_GET['attachment-filter']);

Mise à jour: Il existe un ticket de base WP sur ce problème: https://core.trac.wordpress.org/ticket/30123

Une fois que cela est corrigé, la réponse ci-dessus sera obsolète.

1
Jörn Lund