高考結(jié)束了,中考也跟著結(jié)束了,馬上到了高中新生入學(xué)的日子,在新生入學(xué)的前夕,我們幫一個高中做了一個學(xué)生登記的管理系統(tǒng)。學(xué)校負(fù)責(zé)招生的老師把學(xué)生的中考信息導(dǎo)入到數(shù)據(jù)庫后,系統(tǒng)會以學(xué)生的中考報名號為用戶名,一個隨機字符串為密碼為學(xué)生生成一個用戶,然后把密碼通過短信發(fā)送給學(xué)生家長預(yù)留的手機號。
上傳信息只是第一步,整理使用這些信息才是這個系統(tǒng)最重要的功能,也是做這個系統(tǒng)的目的所在。比如,每個班每個尺寸的校服需要做多少件,哪個學(xué)生定的是哪個尺寸的校服?沒做這個系統(tǒng)以前,都需要人工收集信息、統(tǒng)計、核對,可是個累人的活。做了這個系統(tǒng)以后,班主任只需要在后臺點擊一個下載按鈕,統(tǒng)計信息就清清楚楚得下載下來了。然后把數(shù)據(jù)發(fā)送給校服供應(yīng)商、收到校服后,根據(jù)打印出來的表格分發(fā)給學(xué)生,輕松多了。
閑話扯得有點多了,我們來通過代碼看一下其中批量導(dǎo)出用戶照片的功能。
批量導(dǎo)出用戶上傳的照片為 Zip 壓縮包并自動下載
首先我們需要創(chuàng)建一個文件夾,導(dǎo)出的所有照片都放在這個文件夾里面,方便下一步的生成壓縮包。然后我們獲取照片,并根據(jù)需要重命名照片,把照片復(fù)制到上一步創(chuàng)建的文件夾里面。最后就是生成壓縮包,供用戶下載了,整個流程也就下面幾行代碼,非常簡單。
/**
* 導(dǎo)出用戶上傳的內(nèi)容
*/
new Dispatch( [
'export/([a-z]*)' => function ( $request, $status = "fexiang" ) {
$dir = wp_upload_dir() [ 'basedir' ] . '/export';
$archive = wp_upload_dir() [ 'basedir' ] . '/archive.zip';
if ( ! is_dir( $dir ) ) {
mkdir( $dir );
}
// 獲取用戶提交的內(nèi)容
$args = [
'post_type' => $status,
'post_status' => 'any',
'posts_per_page' => - 1,
];
$query = new WP_Query( $args );
// 準(zhǔn)備需要壓縮的目錄
$folders = [];
foreach ( $query->posts as $post ) {
if ( $status === 'fexiang' || $status === "zhufu" ) {
$username = get_post_meta( $post->ID, '_name', true );
} else {
$username = $post->post_title;
}
$user_dir = $dir . '/' . $username;
// 創(chuàng)建用戶目錄
if ( ! is_dir( $user_dir ) ) {
mkdir( $user_dir, 0700 );
}
$folders[ $username ] = $user_dir;
// 獲取用戶上傳的文件
$files = get_post_meta( $post->ID, 'files', false );
// 復(fù)制用戶上傳的文件到用戶目錄中
foreach ( $files as $file ) {
$image_path = get_attached_file( $file );
$filename = basename( $image_path );
copy( $image_path, $user_dir . '/' . $filename );
}
}
// 先刪除存檔文件,然后再創(chuàng)建,編輯添加文件到存檔中出錯
if ( file_exists( $archive ) ) {
unlink( $archive );
}
$zippy = Zippy::load();
$zippy->create( $archive, $folders );
wp_redirect( wp_upload_dir()[ 'baseurl' ] . '/archive.zip' );
exit;
},
] );
根據(jù)項目的實際情況,我們可以還有對上面的代碼進(jìn)行進(jìn)一步的處理,比如當(dāng)用戶的照片不存在時,跳過處理,避免出錯;把用戶的照片和其他字段一起導(dǎo)出等等,上面的代碼是在 WordPress 系統(tǒng)中實現(xiàn)的批量導(dǎo)出照片的功能,在其他系統(tǒng)中,肯定也有類似的輔助功能來幫助我們實現(xiàn),如有需要,可以參考上面的代碼進(jìn)行實現(xiàn)。


