Suponiendo que está proporcionando la funcionalidad de carga a través de las funciones nativas de WordPress, como wp_handle_upload
o algo más alto A nivel, llegamos a la conclusión de que se van a tirar varios ganchos.
enlace
La función wp_handle_upload
probablemente sea la última función nativa en tocar el archivo, y conocerá toda la información necesaria para realizar un seguimiento.
Dos ganchos dentro de esta función son de interés: wp_handle_upload
y wp_handle_upload_prefilter
. Lo último es lo primero, esto podría compararse con los límites actuales y evitar que se cargue el archivo. El primero rastrearía los tamaños de archivo y contaría. El almacenamiento de la información será manejado por nada menos que 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;
}
Teóricamente, esto funciona; prácticamente - no probado. Háganos saber cómo va.
Los límites de carga por publicación se mantendrían en el meta de la publicación, probablemente como {$user_id}_upload_count
, etc. No veo por qué no funcionaría.
Si estás usando un código personalizado para manejar las subidas (que yo doblé), puedes implementar tus propias acciones y filtros al igual que wp_handle_uploads
.