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

如何为文章行操作添加调用函数动作且不渲染WP-Admin UI?

解决方案:阻止WP-Admin UI渲染,直接输出PDF

要实现点击文章行操作的PDF链接时,直接生成并输出PDF文件而不加载后台UI,核心是在你的generate_pdf_carte函数中提前发送PDF响应头并终止WordPress的后台渲染流程。以下是具体步骤和修改后的代码:

关键修改点

  1. 权限验证:先确保当前用户有权限执行此操作,避免未授权访问。
  2. 发送正确的HTTP头:告诉浏览器这是一个PDF文件,而不是HTML页面。
  3. 终止后台渲染:生成PDF后立即退出,阻止WordPress加载后台模板。

修改后的完整代码

add_filter( 'post_row_actions', 'pdf_row_actions', 10, 2 );
function pdf_row_actions( $actions, WP_Post $post ) {
    if ( $post->post_type == 'carte' ) {
        $url = admin_url('admin.php?page=generate_pdf_carte&id='.$post->ID);
        $actions['generate-pdf'] = '<a href="'.$url.'" title="PDF generieren" rel="permalink">PDF herunterladen</a>';
    }
    return $actions;
}

function generate_pdf_carte(){
    // 1. 验证用户权限:仅允许能编辑该文章的用户访问
    if (!current_user_can('edit_post', $_GET['id'])) {
        wp_die(__('你没有权限执行此操作。'));
    }

    // 2. 验证文章有效性
    $post = get_post($_GET['id']);
    if (!$post || $post->post_type !== 'carte') {
        wp_die(__('无效的文章ID或文章类型。'));
    }

    // 3. 发送PDF响应头
    header('Content-Type: application/pdf');
    // 可选:设置下载文件名,让浏览器直接下载而非在线预览
    header('Content-Disposition: attachment; filename="carte-'.$post->ID.'-'.$post->post_name.'.pdf"');

    // 4. 这里插入你的PDF生成逻辑
    // 示例(以FPDF为例,需先引入库):
    // require_once(ABSPATH . 'wp-content/plugins/your-plugin-path/fpdf/fpdf.php');
    // $pdf = new FPDF();
    // $pdf->AddPage();
    // $pdf->SetFont('Arial','B',16);
    // $pdf->Cell(0,10, $post->post_title, 0, 1, 'C');
    // $pdf->SetFont('Arial','',12);
    // $pdf->MultiCell(0,10, wp_strip_all_tags($post->post_content));
    // $pdf->Output();

    // 5. 强制终止流程,阻止WP加载后台UI
    exit;
}

注意事项

  • 避免多余输出:确保在发送HTTP头和生成PDF之前,没有任何echo、print或空白字符输出(比如PHP文件开头的空格),否则会导致HTTP头发送失败,PDF无法正常生成。
  • 库路径正确:如果你使用第三方PDF生成库(如FPDF、TCPDF),要确保引入路径正确,建议使用ABSPATH来构建绝对路径。
  • 错误处理:可以根据需求添加更多错误判断(比如文章不存在、PDF生成失败等),用wp_die返回友好提示。

内容的提问来源于stack exchange,提问作者rakete

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:44:28