web-dev-qa-db-fra.com

Limiter le téléchargement par type de fichier uniquement pour certains types de publication personnalisés

J'ai créé un type de message personnalisé appelé "pdf". J'ai une métabox personnalisée dans laquelle l'utilisateur peut télécharger un fichier PDF via un éditeur de média intégré à wordpress. J'ai besoin de restreindre les fichiers autorisés (pdf) uniquement dans cet outil de téléchargement. Je sais déjà comment restreindre les fichiers autorisés: Comment définir le type de fichier dans wp_handle_upload? mais le lien ci-dessus interfère avec tous les téléchargements. Un indice?

Merci

Edit: j'ai trouvé comment limiter le type de fichier dans plupload, j'ai donc résolu la moitié du problème:

 add_filter( 'plupload_init', 'my_plupload_init', 0, 1 );

 function my_plupload_init( $plupload_init ) {
 $plupload_init['filters'] = array( array('title' => __( 'Allowed Files' ), 'extensions' => 'pdf') );
 return $plupload_init;
}

Éditer # 2: L'utilisation du filtre wp_handle_upload_prefilter ne fonctionne pas: c'est ce qui est disponible dans l'objet $ _REQUEST après le téléchargement d'une image sur un nouveau message:

    array
  'type' => string 'image' (length=5)
  'tab' => string 'type' (length=4)
  'post_id' => string '0' (length=1)
  '_wpnonce' => string '375c5f46f2' (length=10)
  '_wp_http_referer' => string '/wp-admin/media-upload.php?post_id=' (length=37)
  'html-upload' => string 'Carica media' (length=12)

Il n'y a pas d'informations sur mon type de message personnalisé. L'identifiant est 0 car la publication n'est pas encore enregistrée.

Edit # 3:

Grâce à @TheDeadMusic answer, j'ai ajouté une ligne de code à mon javascript. C’est le code js que j’utilise réellement qui fonctionne très bien:

jQuery(document).ready(function($){
// #btn_upload is my custom button
$('#btn_upload').click(function(event){
    event.preventDefault();
    var backup = window.send_to_editor;
    var src=''; 
//post_id is always set so I can pass it safely to tickbox
    var post_id=$('#post_ID').val(); 
var target=$('#pdf_url');
    window.send_to_editor = function(html) 
     {
//I have to get the link to "original file" from html returned by tickbox
        link = $('a',html).attr('href');
         $(target).val(link);
         tb_remove();
         window.send_to_editor=backup; //reset default action
    }
    //show the uploader
     tb_show('', 'media-upload.php?post_id='+post_id+'&TB_iframe=true');

}); 

});
2
cardy
function wpse_59621_mimes_filter( $mimes ) {
    return array( 'pdf' => 'application/pdf' );
}

function wpse_59621_delay_mimes_filter( $value ) {
    if ( isset( $_REQUEST['post_id'] ) && get_post_type( $_REQUEST['post_id'] ) === 'my_post_type' )
        add_filter( 'upload_mimes', 'wpse_59621_mimes_filter' );
    else
        remove_filter( 'upload_mimes', 'wpse_59621_mimes_filter' );

    return $value;
}

add_filter( 'wp_handle_upload_prefilter', 'wpse_59621_delay_mimes_filter' );

Faites-nous savoir comment ça se passe - cela n'a pas été testé, mais je suis confiant!

5
TheDeadMedic