Dengan asumsi Anda menyediakan fungsionalitas unggah melalui fungsi asli WordPress, wp_handle_upload
atau sesuatu yang lebih tinggi, kami sampai pada kesimpulan bahwa beberapa kait akan ditarik.
http://core.trac.wordpress.org/browser/tags/3.3/wp-admin/includes/file.php#L212
The wp_handle_upload
Fungsi mungkin akan menjadi fungsi asli terakhir untuk menyentuh file, dan akan tahu semua informasi yang diperlukan untuk melacak.
Dua kait di dalam fungsi ini menarik: wp_handle_upload
dan wp_handle_upload_prefilter
. Yang terakhir datang terlebih dahulu, ini bisa memeriksa terhadap batas saat ini dan mencegah file diunggah. Yang pertama akan melacak filesizes dan menghitung. Menyimpan informasi akan ditangani oleh siapa pun update_user_meta
.
add_filter( 'wp_handle_upload', 'wpse47580_update_upload_stats' );
function wpse47580_update_upload_stats( $args ) {
$file = $args['file'];
$size = filesize( $file ); // bytes
$user_id = get_current_user_id();
$upload_count = get_user_meta( $user_id, 'upload_count', $single = true );
$upload_bytes = get_user_meta( $user_id, 'upload_bytes', $single = true );
update_user_meta( $user_id, 'upload_count', $upload_count + 1 );
update_user_meta( $user_id, 'upload_bytes', $upload_bytes + $size );
}
add_filter( 'wp_handle_upload_prefilter', 'wpse47580_check_upload_limits' );
function wpse47580_check_upload_limits( $file ) {
$user_id = get_current_user_id();
$upload_count = get_user_meta( $user_id, 'upload_count', $single = true );
$upload_bytes = get_user_meta( $user_id, 'upload_bytes', $single = true );
$filesize = /* get filesize from $file array */;
$upload_bytes_limit_reached = apply_filters( 'wpse47580_upload_bytes_limit_reached', 1024*1024*10 ) > ( $filesize + $upload_bytes );
$upload_count_limit_reached = apply_filters( 'wpse47580_upload_count_limit_reached', 100 ) > ( $upload_count + 1 );
if ( $upload_count_limit_reached || $upload_bytes_limit_reached )
$file['error'] = 'Upload limit has been reached for this account!';
return $file;
}
Secara teoritis, ini berfungsi; praktis - belum diuji. Marilah kita tahu bagaimana kelanjutannya.
Batas unggah per posting akan disimpan di meta pos, mungkin seperti {$user_id}_upload_count
dll. Tidak mengerti mengapa itu tidak berhasil.
Jika Anda menggunakan kode khusus untuk menangani unggahan (yang saya gandakan), maka Anda dapat menerapkan tindakan dan filter Anda sendiri seperti wp_handle_uploads
halnya.
$upload_bytes_limit_reached = apply_filters( 'wpse47580_upload_bytes_limit_reached', 1024*1024*10 ) > ( $filesize + $upload_bytes );