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