可动态生成.zip压缩包的WordPress插件需求:实现批量文档一键下载
WordPress动态批量打包PDF下载解决方案
方案1:插件实现(无需写代码,适合普通用户)
- Download Attachments
支持给页面/文章批量绑定PDF附件,自带全局「全部下载」开关,附件增删改后会自动同步到打包列表,不需要手动生成替换zip包。安装后可在后台设置 > Download Attachments中配置按钮样式、下载权限、压缩包命名规则。 - WP Download Manager
适合有更复杂权限控制需求的场景,支持给不同用户角色分配下载权限,开启动态打包功能后会实时拉取当前页面关联的所有PDF生成压缩包,还支持统计下载次数、设置下载限速。
方案2:自定义代码实现(更轻量,无冗余功能,适合有一定开发能力的用户)
直接在当前主题中添加代码即可实现,完全可控,不需要依赖第三方插件。
步骤1:添加压缩包生成逻辑
将以下代码添加到当前使用主题的functions.php文件末尾:
// 处理PDF批量下载请求 add_action('init', 'handle_batch_pdf_download'); function handle_batch_pdf_download() { // 验证请求合法性 if (!isset($_GET['download_all_pdfs']) || !isset($_GET['post_id']) || !wp_verify_nonce($_GET['_wpnonce'], 'batch_pdf_download')) { return; } $post_id = intval($_GET['post_id']); // 获取当前页面绑定的所有PDF附件 $args = array( 'post_type' => 'attachment', 'post_mime_type' => 'application/pdf', 'post_parent' => $post_id, 'posts_per_page' => -1 ); $pdfs = get_posts($args); if (empty($pdfs)) { wp_die('当前页面暂无可下载的PDF文档'); } // 初始化压缩包 $zip = new ZipArchive(); $zip_name = '页面文档合集_' . date('YmdHis') . '.zip'; $temp_file = tempnam(sys_get_temp_dir(), 'pdf_zip'); if ($zip->open($temp_file, ZipArchive::CREATE) !== TRUE) { wp_die('压缩包生成失败,请稍后重试'); } // 把所有PDF加入压缩包 foreach ($pdfs as $pdf) { $file_path = get_attached_file($pdf->ID); $file_name = $pdf->post_title . '.pdf'; $zip->addFile($file_path, $file_name); } $zip->close(); // 输出压缩包供用户下载 header('Content-Type: application/zip'); header('Content-Disposition: attachment; filename="' . $zip_name . '"'); header('Content-Length: ' . filesize($temp_file)); readfile($temp_file); // 删除服务器临时文件,不占用存储空间 unlink($temp_file); exit; }
步骤2:添加「全部下载」按钮到页面
将以下代码插入到页面模板需要显示下载按钮的位置:
<!-- 批量下载PDF按钮 --> <?php if (is_singular()): $download_url = wp_nonce_url( add_query_arg( array('download_all_pdfs' => 1, 'post_id' => get_the_ID()), home_url() ), 'batch_pdf_download' ); ?> <a href="<?php echo esc_url($download_url); ?>" class="custom-download-all-btn" target="_blank">全部下载(ZIP)</a> <?php endif; ?>
适配说明
- 如果你的PDF是手动插入到页面内容里的外链,不是存在WordPress附件库,只需要修改
handle_batch_pdf_download函数中的PDF抓取逻辑,用正则匹配当前页面内容中所有.pdf后缀的链接即可适配。 - 如果页面PDF数量较多或者单文件体积较大,建议提前调整PHP配置的
max_execution_time和memory_limit参数,避免生成压缩包时超时。
内容的提问来源于stack exchange,提问作者newhouse-pt
相关产品推荐
相关产品推荐

