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

解决WooCommerce账户我的订单列表自定义下载URL列显示异常问题

WooCommerce账户订单页自定义列无法获取PDF URL的问题排查与修复

问题描述

我想在WooCommerce的「账户 > 订单」页面添加一列,通过Jet-Engine给WooCommerce客户订单添加了名为url-from-download的字段,用于选择PDF文件。现有代码已经成功添加了名为"Invoice"的列,但始终无法提取到可下载的文件URL,只会显示"Download"文本,请问问题出在哪里?

原代码如下:

/**
 * Adds a new column to the "My Orders" table in the account.
 *
 * @param string[] $columns the columns in the orders table
 * @return string[] updated columns
 */
function th_wc_add_my_account_orders_column( $columns ) {

    $new_columns = array();

    foreach ( $columns as $key => $name ) {

        $new_columns[ $key ] = $name;

        // add ship-to after order status column
        if ( 'order-total' === $key ) {
            $new_columns['url-from-download'] = __( 'Invoice', 'textdomain' );
        }
    }

    return $new_columns;
}
add_filter( 'woocommerce_my_account_my_orders_columns', 'th_wc_add_my_account_orders_column' );

/**
 * Adds data to the custom "url-from-download" column in "My Account > Orders".
 *
 * @param \WC_Order $order the order object for the row
 */
function th_wc_my_orders_url_from_download_column( $order ) {

    $url_from_download = get_post_meta( $order->get_id(), 'url_from_download', true ); // Get custom order meta
    echo ! empty( $url_from_download ) ? $url_from_download : 'Download';
    
}
add_action( 'woocommerce_my_account_my_orders_column_url-from-download', 'th_wc_my_orders_url_from_download_column' ); 

问题分析

  • 元键名称不匹配:Jet-Engine创建的字段名是url-from-download,但代码中调用get_post_meta时用的是url_from_download(下划线替换了连字符),导致根本读不到对应的元数据。
  • Jet-Engine文件字段存储逻辑误解:Jet-Engine的文件选择字段默认存储的是媒体库中文件的ID,不是直接的文件URL,直接读取的话拿到的是数字ID,无法直接作为链接使用。
  • 未生成可交互的下载链接:原代码直接输出文本,就算拿到URL也只是纯文本,用户没法直接点击下载。

修正后的代码

/**
 * 给账户页面的「我的订单」表格添加新列
 *
 * @param string[] $columns 订单表格的现有列
 * @return string[] 更新后的列数组
 */
function th_wc_add_my_account_orders_column( $columns ) {

    $new_columns = array();

    foreach ( $columns as $key => $name ) {

        $new_columns[ $key ] = $name;

        // 在订单总计列后添加发票列
        if ( 'order-total' === $key ) {
            $new_columns['url-from-download'] = __( 'Invoice', 'textdomain' );
        }
    }

    return $new_columns;
}
add_filter( 'woocommerce_my_account_my_orders_columns', 'th_wc_add_my_account_orders_column' );

/**
 * 给「账户 > 订单」页面的自定义列「url-from-download」添加数据
 *
 * @param \WC_Order $order 当前行对应的订单对象
 */
function th_wc_my_orders_url_from_download_column( $order ) {
    // 使用Jet-Engine创建的正确元键名
    $attachment_id = get_post_meta( $order->get_id(), 'url-from-download', true ); 

    if ( ! empty( $attachment_id ) && is_numeric( $attachment_id ) ) {
        // 将附件ID转换为文件URL
        $download_url = wp_get_attachment_url( $attachment_id );
        // 输出可点击的下载链接
        echo '<a href="' . esc_url( $download_url ) . '" target="_blank" rel="noopener noreferrer">' . __( 'Download Invoice', 'textdomain' ) . '</a>';
    } else {
        // 没有文件时显示友好提示
        echo __( 'No Invoice Available', 'textdomain' );
    }
}
add_action( 'woocommerce_my_account_my_orders_column_url-from-download', 'th_wc_my_orders_url_from_download_column' ); 

代码说明

  1. 修正了元键名称,和Jet-Engine创建的字段名保持一致,确保能正确读取数据。
  2. 增加了附件ID判断,通过wp_get_attachment_url()将存储的ID转换为可访问的文件URL。
  3. 生成了带安全属性的可点击链接,用户可以直接点击下载PDF。
  4. 无文件时替换成更友好的提示文本,避免显示无意义的"Download"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:25:37