You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

可动态生成.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 04:48:04