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

wcpdf_download_pdf短码在manage_woocommerce_page_wc-orders_custom_column钩子失效

解决WooCommerce订单列表自定义列中WCPDF短码失效的问题

问题原因分析

wcpdf_download_pdf短码在后台订单列表页面的manage_woocommerce_page_wc-orders_custom_column钩子中返回空字符串,核心原因是短码的实现逻辑存在环境上下文限制——比如仅允许在前端页面生成PDF下载链接,或者后台环境下未加载短码依赖的核心功能模块。

解决方案

方案1:直接调用短码回调函数

绕过do_shortcode的环境判断限制,直接调用短码注册的原始回调函数。首先确认短码对应的回调(通常在WooCommerce PDF Invoices & Packing Slips插件源码中,注册代码类似add_shortcode('wcpdf_download_pdf', 'wcpdf_download_pdf_shortcode')),然后在钩子中直接执行:

add_action('manage_woocommerce_page_wc-orders_custom_column', 'factor_rows', 10, 2);
function factor_rows($column, $order)
{
    if ('print' == $column) {
        // 确保回调函数存在再执行
        if (function_exists('wcpdf_download_pdf_shortcode')) {
            $atts = [
                'document_type' => 'invoice',
                'link_text' => 'print',
                'order_id' => $order->get_id() // 用当前订单ID替换硬编码的5746
            ];
            echo wcpdf_download_pdf_shortcode($atts);
        }
    }
}

方案2:临时模拟前端环境

如果短码逻辑通过wcpdf_is_frontend函数判断运行环境,可临时过滤该函数的返回值,让短码认为当前处于前端页面:

add_action('manage_woocommerce_page_wc-orders_custom_column', 'factor_rows', 10, 2);
function factor_rows($column, $order)
{
    if ('print' == $column) {
        // 临时切换为前端环境
        add_filter('wcpdf_is_frontend', '__return_true');
        echo do_shortcode('[wcpdf_download_pdf document_type="invoice" link_text="print" order_id="'.$order->get_id().'"]');
        // 恢复原环境判断
        remove_filter('wcpdf_is_frontend', '__return_true');
    }
}

方案3:强制加载依赖文件(兜底方案)

如果后台未自动加载短码所需的核心模块,可手动引入插件相关文件(路径需根据你的插件安装位置调整):

add_action('manage_woocommerce_page_wc-orders_custom_column', 'factor_rows', 10, 2);
function factor_rows($column, $order)
{
    if ('print' == $column) {
        // 手动引入短码依赖的核心文件
        require_once WP_PLUGIN_DIR . '/woocommerce-pdf-invoices-packing-slips/includes/class-wcpdf-shortcodes.php';
        echo do_shortcode('[wcpdf_download_pdf document_type="invoice" link_text="print" order_id="'.$order->get_id().'"]');
    }
}

注意事项

  • 务必将硬编码的5746替换为$order->get_id(),确保适配所有订单,而非固定某一个订单。
  • 优先使用方案1或方案2,方案3可能因插件版本更新导致文件路径变化,维护成本较高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 06:25:12