ধরে নিই যে আপনি ওয়ার্ডপ্রেসের স্থানীয় ফাংশনগুলি, পছন্দ 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 );