En supposant que vous fournissez une fonctionnalité de téléchargement via les fonctions natives de WordPress, lik wp_handle_upload
ou quelque chose de plus haut niveau, nous arrivons à la conclusion que plusieurs crochets vont être tirés.
http://core.trac.wordpress.org/browser/tags/3.3/wp-admin/includes/file.php#L212
La wp_handle_upload
fonction serait probablement la dernière fonction native à toucher le fichier et connaîtrait toutes les informations nécessaires pour garder une trace.
Deux crochets à l'intérieur de cette fonction sont intéressants: wp_handle_upload
et wp_handle_upload_prefilter
. Ce dernier vient en premier, cela pourrait vérifier les limites actuelles et empêcher le téléchargement du fichier. Le premier suivrait la taille des fichiers et compterait. Le stockage des informations serait géré par nul autre 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;
}
Théoriquement, cela fonctionne; pratiquement - non testé. Tiens nous au courant de comment ça se passe.
Les limites de téléchargement par publication seraient conservées dans la méta-publication, probablement comme {$user_id}_upload_count
etc. Ne voyez pas pourquoi cela ne fonctionnerait pas.
Si vous utilisez du code personnalisé pour gérer les téléchargements (que je double), vous pouvez implémenter vos propres actions et filtres comme vous le faites wp_handle_uploads
.
$upload_bytes_limit_reached = apply_filters( 'wpse47580_upload_bytes_limit_reached', 1024*1024*10 ) > ( $filesize + $upload_bytes );