Suponiendo que está proporcionando funcionalidad de carga a través de las funciones nativas de WordPress, lik wp_handle_upload
o algo más de alto nivel, llegamos a la conclusión de que se van a tirar varios ganchos.
http://core.trac.wordpress.org/browser/tags/3.3/wp-admin/includes/file.php#L212
La wp_handle_upload
función probablemente sería la última función nativa en tocar el archivo y conocería 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 verificar los límites actuales y evitar que el archivo se cargue. El primero rastrearía el tamaño de los archivos y contaría. El almacenamiento de la información sería 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 la meta de publicación, probablemente como {$user_id}_upload_count
etc. No veo por qué eso no funcionaría.
Si está utilizando un código personalizado para manejar cargas (lo cual dudo), entonces puede implementar sus propias acciones y filtros como lo wp_handle_uploads
hace.
$upload_bytes_limit_reached = apply_filters( 'wpse47580_upload_bytes_limit_reached', 1024*1024*10 ) > ( $filesize + $upload_bytes );
apply_filters
código permitiría que otros complementos se conectaran allí, pensé que sería útil. ¿Podría describir la naturaleza de los problemas?Modifiqué un poco el código de Soulseekah porque las
apply_filter
variables no me funcionaban, ¡probablemente porque no las entiendo!Sería realmente sencillo crear un complemento para poder lanzarlo en algún momento en el futuro, cuando haya desarrollado una interfaz para él.
fuente