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

WooCommerce账户订单ACF产品字段不显示及邮件添加问题求助

WooCommerce问题:账户订单页自定义字段不显示+订单邮件添加字段需求

我熟悉WordPress但PHP基础薄弱,通过ACF给WooCommerce产品加了自定义字段course_content_page_url,想让用户下单后,这个字段值能在账户订单页的新增列里显示,方便用户访问。现在列已经创建成功,但字段数据显示不出来,默认显示“no url given”。用的代码如下:

add_filter( 'woocommerce_account_orders_columns', 'add_account_orders_column', 10, 1 );
function add_account_orders_column( $columns ){
    $order_actions  = $columns['order-actions']; // 保存订单操作列
    unset($columns['order-actions']); // 暂时移除订单操作列

    // 添加自定义列的键和标签
    $columns['course_content_page_url'] = __( 'Course URL', 'woocommerce' );

    // 把订单操作列加回去
    $columns['order-actions'] = $order_actions;

    return $columns;
}

// 显示订单元数据中的自定义字段值
add_action( 'woocommerce_my_account_my_orders_column_course_content_page_url', 'add_account_orders_column_rows' );
function add_account_orders_column_rows( $order ) {
    // 读取自定义字段
    if ( $value = $order->get_meta( 'course_content_page_url' ) ) {
        esc_html_e( $value );
    } else {
        printf( '<small>%s</small>', __("no url given") );
    }
}

目前账户订单页的自定义列只显示“no url given”,字段值无法正常展示。另外,想问问能不能把这个自定义字段数据加到订单邮件里?


解决方案

1. 修复账户订单页字段不显示的问题

你之前的代码是从订单的元数据里读取字段,但这个字段是存在产品上的,订单里没有同步这个值,所以读不到。需要先把产品的字段值同步到订单里,再读取显示。

步骤1:添加同步代码

这段代码会在用户下单创建订单时,把对应产品的course_content_page_url字段值保存到订单元数据中:

// 同步产品自定义字段到订单元数据
add_action('woocommerce_checkout_create_order', 'sync_product_course_url_to_order', 10, 2);
function sync_product_course_url_to_order($order, $data) {
    foreach ($order->get_items() as $item) {
        $product = $item->get_product();
        // 获取产品的ACF字段值
        $course_url = get_field('course_content_page_url', $product->get_id());
        if ($course_url) {
            // 将字段值保存到订单元数据,键名和之前的代码保持一致
            $order->update_meta_data('course_content_page_url', $course_url);
        }
    }
}

步骤2:优化显示代码(可选)

保留你原来的列创建代码,把显示部分改成可点击的链接,用户体验更好:

add_action( 'woocommerce_my_account_my_orders_column_course_content_page_url', 'add_account_orders_column_rows' );
function add_account_orders_column_rows( $order ) {
    $value = $order->get_meta( 'course_content_page_url' );
    if ( $value ) {
        // 输出可点击的链接
        echo '<a href="' . esc_url($value) . '" target="_blank">' . esc_html($value) . '</a>';
    } else {
        printf( '<small>%s</small>', __("no url given") );
    }
}

2. 添加自定义字段到订单邮件

可以通过WooCommerce的邮件钩子实现,下面的代码会把课程URL加到订单邮件的订单详情表格之后:

// 在订单邮件中添加课程URL
add_action('woocommerce_email_after_order_table', 'add_course_url_to_order_email', 10, 4);
function add_course_url_to_order_email($order, $sent_to_admin, $plain_text, $email) {
    $course_url = $order->get_meta('course_content_page_url');
    if ($course_url) {
        // 兼容纯文本和HTML格式的邮件
        if ($plain_text) {
            echo "\n课程URL: " . esc_url($course_url) . "\n";
        } else {
            echo '<p><strong>课程URL:</strong> <a href="' . esc_url($course_url) . '" target="_blank">' . esc_html($course_url) . '</a></p>';
        }
    }
}

注意事项

  • 所有代码可以添加到当前主题的functions.php文件,或者使用Code Snippets这类自定义代码插件,避免主题更新导致代码丢失。
  • 确保ACF字段的键名course_content_page_url完全一致,大小写敏感。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 05:01:00