Giả sử rằng bạn đang cung cấp chức năng tải lên thông qua các chức năng gốc của WordPress, thích wp_handle_upload
hoặc một cái gì đó ở cấp độ cao hơn, chúng tôi đi đến kết luận rằng một số móc sẽ được kéo.
http://core.trac.wordpress.org/browser/tags/3.3/wp-admin/includes/file.php#L212
Các wp_handle_upload
chức năng có lẽ sẽ là chức năng có nguồn gốc cuối cùng để chạm vào tập tin, và sẽ biết tất cả những thông tin đó là cần thiết để theo dõi.
Hai móc bên trong chức năng này được quan tâm: wp_handle_upload
và wp_handle_upload_prefilter
. Cái sau có trước, cái này có thể kiểm tra các giới hạn hiện tại và ngăn không cho tập tin được tải lên. Các cựu sẽ theo dõi tập tin và đếm. Lưu trữ thông tin sẽ được xử lý bởi không ai khác hơn 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;
}
Về mặt lý thuyết, điều này hoạt động; thực tế - chưa được kiểm tra Hãy cho chúng tôi biết làm thế nào nó đi.
Mỗi giới hạn tải lên bài đăng sẽ được giữ trong meta bài đăng, có thể như {$user_id}_upload_count
v.v. Đừng hiểu tại sao điều đó không hiệu quả.
Nếu bạn đang sử dụng mã tùy chỉnh để xử lý các video tải lên (mà tôi nhân đôi), thì bạn có thể thực hiện các hành động và bộ lọc của riêng mình giống như wp_handle_uploads
vậy.
$upload_bytes_limit_reached = apply_filters( 'wpse47580_upload_bytes_limit_reached', 1024*1024*10 ) > ( $filesize + $upload_bytes );