「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');
});
});
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' );
それがどのように行われるかを私たちに知らせてください - これはテストされていませんが、私は自信を持っています!