web-dev-qa-db-ja.com

特定のカスタム投稿タイプに対してのみファイルタイプによるアップロードを制限する

「pdf」というカスタム投稿タイプを作成しました。私はユーザーがワードプレス内蔵メディアアップローダを通してPDFファイルをアップロードすることができるカスタムメタボックスを持っています。許可されたファイルを制限する方法はすでに知っています: wp_handle_uploadでファイルタイプを設定するには? しかし上記のリンクはすべてのアップロードを妨害します。どんなヒント?

ありがとう

編集:私はpluploadでファイルタイプを制限する方法を見つけたので、私は問題の半分を解決しました:

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

編集#2:wp_handle_upload_prefilterフィルタの使用が機能しない:これは画像が新しい投稿にアップロードされた後に$ _REQUESTオブジェクト内で利用可能なものです:

    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)

カスタム投稿タイプに関する情報がありません。投稿はまだ保存されていないため、IDは0です。

#3を編集:

@TheDeadMusic回答のおかげで私は私のJavaScriptに1行のコードを追加しました。これは私が実際に使うjsコードです。

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

それがどのように行われるかを私たちに知らせてください - これはテストされていませんが、私は自信を持っています!

5
TheDeadMedic