Unter der Annahme, dass Sie Upload-Funktionen über die nativen Funktionen von WordPress bereitstellen, wie z. B. über wp_handle_upload
etwas höheres , kommen wir zu dem Schluss, dass mehrere Hooks gezogen werden.
http://core.trac.wordpress.org/browser/tags/3.3/wp-admin/includes/file.php#L212
Die wp_handle_upload
Funktion wäre wahrscheinlich die letzte native Funktion, die die Datei berührt, und würde alle Informationen kennen, die erforderlich sind, um den Überblick zu behalten.
Zwei Haken innerhalb dieser Funktion sind von Interesse: wp_handle_upload
und wp_handle_upload_prefilter
. Letzteres steht an erster Stelle. Dies könnte die aktuellen Grenzwerte überprüfen und verhindern, dass die Datei hochgeladen wird. Ersteres würde Dateigrößen verfolgen und zählen. Das Speichern der Informationen würde von niemand anderem als verwaltet 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;
}
Theoretisch funktioniert das; praktisch - ungetestet. Lassen Sie uns wissen, wie es geht.
Die Upload-Limits pro Post würden im Post-Meta beibehalten, wahrscheinlich wie {$user_id}_upload_count
usw. Ich verstehe nicht, warum das nicht funktionieren würde.
Wenn Sie benutzerdefinierten Code verwenden, um Uploads zu verarbeiten (was ich verdopple), können Sie Ihre eigenen Aktionen und Filter genauso implementieren wie dies der wp_handle_uploads
Fall ist.
$upload_bytes_limit_reached = apply_filters( 'wpse47580_upload_bytes_limit_reached', 1024*1024*10 ) > ( $filesize + $upload_bytes );
apply_filters
Code würde es anderen Plugins ermöglichen, sich dort anzuschließen, was nützlich wäre. Können Sie die Art der Probleme beschreiben?Ich habe Soulseekahs Code etwas geändert, da die
apply_filter
Variablen für mich nicht funktionierten - wahrscheinlich, weil ich sie nicht verstehe!Es wäre wirklich einfach, ein Plugin daraus zu machen, damit ich es möglicherweise irgendwann in der Zukunft veröffentlichen kann, wenn ich eine Schnittstelle dafür entwickelt habe.
quelle