สมมติว่าคุณให้ฟังก์ชั่นการอัปโหลดผ่านฟังก์ชั่นดั้งเดิมของ WordPress, lik wp_handle_upload
หรืออะไรที่มากกว่านั้นเราจึงสรุปได้ว่ามีตะขอหลายอันที่ถูกดึงออกมา
http://core.trac.wordpress.org/browser/tags/3.3/wp-admin/includes/file.php#L212
wp_handle_upload
ฟังก์ชั่นอาจจะเป็นฟังก์ชั่นพื้นเมืองสุดท้ายที่จะสัมผัสแฟ้มและจะได้รู้ว่าข้อมูลทั้งหมดที่จำเป็นในการติดตาม
สองตะขอภายในฟังก์ชั่นนี้เป็นที่สนใจ: และwp_handle_upload
wp_handle_upload_prefilter
หลังมาก่อนสิ่งนี้สามารถตรวจสอบกับขีด จำกัด ปัจจุบันและป้องกันไม่ให้ไฟล์ถูกอัพโหลด อดีตจะติดตามขนาดและนับ 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;
}
ในทางทฤษฎีงานนี้; ในทางปฏิบัติ - ยังไม่ทดลอง แจ้งให้เราทราบว่ามันไปอย่างไร
จำกัด การอัปโหลดโพสต์ต่อโพสต์จะถูกเก็บไว้ในเมตาโพสต์อาจจะชอบ{$user_id}_upload_count
ฯลฯ อย่าดูว่าทำไมมันไม่ทำงาน
หากคุณใช้รหัสที่กำหนดเองเพื่อจัดการกับการอัปโหลด (ซึ่งฉันเพิ่มเป็นสองเท่า) คุณสามารถใช้การกระทำและตัวกรองของคุณเองwp_handle_uploads
ได้
$upload_bytes_limit_reached = apply_filters( 'wpse47580_upload_bytes_limit_reached', 1024*1024*10 ) > ( $filesize + $upload_bytes );