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
相关产品推荐
相关产品推荐

