यह मानते हुए कि आप वर्डप्रेस के मूल कार्यों, इसी तरह 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 );