Limitar la carga por tipo de archivo solo para cierto tipo de publicación personalizada

2

He creado un tipo de publicación personalizada llamada "pdf". Tengo un metabox personalizado donde el usuario puede cargar un archivo pdf a través de un cargador de medios incorporado en wordpress Necesito restringir los archivos permitidos (pdf) solo en este cargador. Ya sé cómo restringir los archivos permitidos: Cómo configurar tipo de archivo en wp_handle_upload? Pero el enlace de arriba, interfiere con todas las subidas. ¿Alguna pista?

Gracias

Editar: He encontrado cómo limitar el tipo de archivo en plupload, así que he resuelto la mitad del problema:

 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;
}

Editar # 2: El uso del filtro wp_handle_upload_prefilter no funciona: Esto es lo que está disponible dentro del objeto $ _REQUEST después de cargar una imagen en una nueva publicación:

    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)

No hay información sobre mi tipo de publicación personalizada. El ID es 0 porque la publicación aún no está guardada.

Editar # 3:

Gracias a la respuesta de @TheDeadMusic, he agregado una línea de código a mi javascript. Este es el código js que realmente utilizo que funciona muy 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');

}); 

});
    
pregunta cardy 25.07.2012 - 15:18

1 respuesta

5
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' );

Háganos saber cómo va. ¡Esto no se ha probado, pero estoy seguro!

    
respondido por el TheDeadMedic 25.07.2012 - 15:45

Lea otras preguntas en las etiquetas