欢迎光临 WordPress 智库!

批量导出 WordPress 中用户上传的照片并压缩为 Zip 文件供用户下载

批量导出 WordPress 中用户上传的照片并压缩为 Zip 文件供用户下载

批量导出 WordPress 中用户上传的照片并压缩为 Zip 文件供用户下载

高考结束了,中考也跟着结束了,马上到了高中新生入学的日子,在新生入学的前夕,我们帮一个高中做了一个学生登记的管理系统。学校负责招生的老师把学生的中考信息导入到数据库后,系统会以学生的中考报名号为用户名,一个随机字符串为密码为学生生成一个用户,然后把密码通过短信发送给学生家长预留的手机号。

上传信息只是第一步,整理使用这些信息才是这个系统最重要的功能,也是做这个系统的目的所在。比如,每个班每个尺寸的校服需要做多少件,哪个学生定的是哪个尺寸的校服?没做这个系统以前,都需要人工收集信息、统计、核对,可是个累人的活。做了这个系统以后,班主任只需要在后台点击一个下载按钮,统计信息就清清楚楚得下载下来了。然后把数据发送给校服供应商、收到校服后,根据打印出来的表格分发给学生,轻松多了。

闲话扯得有点多了,我们来通过代码看一下其中批量导出用户照片的功能。

批量导出用户上传的照片为 Zip 压缩包并自动下载

首先我们需要创建一个文件夹,导出的所有照片都放在这个文件夹里面,方便下一步的生成压缩包。然后我们获取照片,并根据需要重命名照片,把照片复制到上一步创建的文件夹里面。最后就是生成压缩包,供用户下载了,整个流程也就下面几行代码,非常简单。

/**
 * 导出用户上传的内容
 */
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 );
		}

		// 获取用户提交的内容
		$args = [
			'post_type'      => $status,
			'post_status'    => 'any',
			'posts_per_page' => - 1,
		];

		$query = new WP_Query( $args );

		// 准备需要压缩的目录
		$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;

			// 创建用户目录
			if ( ! is_dir( $user_dir ) ) {
				mkdir( $user_dir, 0700 );
			}

			$folders[ $username ] = $user_dir;

			// 获取用户上传的文件
			$files = get_post_meta( $post->ID, 'files', false );

			// 复制用户上传的文件到用户目录中
			foreach ( $files as $file ) {
				$image_path = get_attached_file( $file );
				$filename   = basename( $image_path );

				copy( $image_path, $user_dir . '/' . $filename );
			}
		}

		// 先删除存档文件,然后再创建,编辑添加文件到存档中出错
		if ( file_exists( $archive ) ) {
			unlink( $archive );
		}
		$zippy = Zippy::load();
		$zippy->create( $archive, $folders );

		wp_redirect( wp_upload_dir()[ 'baseurl' ] . '/archive.zip' );
		exit;

	},

] );

根据项目的实际情况,我们可以还有对上面的代码进行进一步的处理,比如当用户的照片不存在时,跳过处理,避免出错;把用户的照片和其他字段一起导出等等,上面的代码是在 WordPress 系统中实现的批量导出照片的功能,在其他系统中,肯定也有类似的辅助功能来帮助我们实现,如有需要,可以参考上面的代码进行实现。

本站提供 WordPress 主题定制开发服务

本站长期承接 WordPress 主题、插件、基于 WooCommerce 的商店商城开发业务。 我们有 8 年 WordPress 开发经验,如果你想 用 WordPress 开发网站, 请联系 QQ: 470266798,或邮箱: 4626395@gmail.com 咨询。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*