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');
});
});
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!