如何在 WooCommerce 前台「我的订单」页面显示预约日期

5次阅读

如何在 WooCommerce 前台「我的订单」页面显示预约日期

本文详解如何在 woocommerce 用户中心的订单列表中新增一列并正确显示 jetappointment(crocoblock)插件保存的预约日期,重点解决 `get_meta()` 无法读取 `_appointment_date` 自定义字段的问题。

在 WooCommerce 前台「我的账户 → 订单」页面中添加预约日期列,是提升服务类电商用户体验的重要优化。虽然你已成功注册新列(如“Date de livraison”),但数据显示为空,根本原因在于:JetAppointment 插件通常将 _appointment_date 存储为订单关联的「订单项(order item)」元数据,或直接写入订单所属的「订单父级 post meta」,而非 WooCommerce 订单对象原生支持的 get_meta() 可直接访问的上下文

WooCommerce 的 $order->get_meta( ‘_appointment_date’ ) 仅能读取通过 $order->update_meta_data() 或 wc_update_order_item_meta() 等标准 WC 方法写入的、且明确绑定到订单对象的元数据。而 CrocoBlock 的 JetAppointment 默认使用 wordpress 原生 update_post_meta() 将预约信息存于订单对应的 post ID 下——此时必须改用 get_post_meta() 才能准确获取。

✅ 正确实现代码如下(推荐整合版,含健壮性处理):

// 1. 在「我的订单」表格中添加新列 add_filter( 'woocommerce_account_orders_columns', 'add_appointment_date_column', 20 ); function add_appointment_date_column( $columns ) {     // 在「状态」列后插入新列(可按需调整位置)     $new_columns = array();     foreach ( $columns as $key => $label ) {         $new_columns[ $key ] = $label;         if ( 'status' === $key ) {             $new_columns['appointment_date'] = __( '预约日期', 'your-textdomain' );         }     }     return $new_columns; }  // 2. 渲染该列内容 add_action( 'woocommerce_my_account_my_orders_column_appointment_date', 'display_appointment_date_in_orders' ); function display_appointment_date_in_orders( $order ) {     $order_id = $order->get_id();      // ✅ 关键修正:使用 get_post_meta() 读取 JetAppointment 写入的 post meta     $appointment_date = get_post_meta( $order_id, '_appointment_date', true );      // 额外兼容:部分版本可能存储为时间戳,尝试格式化     if ( $appointment_date && is_numeric( $appointment_date ) && $appointment_date > 1000000000 ) {         $appointment_date = date_i18n( get_option( 'date_format' ), $appointment_date );     } elseif ( ! empty( $appointment_date ) && strtotime( $appointment_date ) ) {         $appointment_date = date_i18n( get_option( 'date_format' ), strtotime( $appointment_date ) );     }      echo ! empty( $appointment_date )          ? esc_html( $appointment_date )          : ''; }

? 重要注意事项

  • 不要使用 $order->get_meta():它不适用于 JetAppointment 的默认存储方式;
  • 务必检查 _appointment_date 的实际存储位置:可通过 phpmyadmin 查询 wp_postmeta 表,筛选 post_id = [你的订单ID] 且 meta_key = ‘_appointment_date’ 确认存在;
  • 多语言兼容:date_i18n() 自动适配 WordPress 当前语言与日期格式设置;
  • 性能提示:该逻辑在订单列表每行执行一次,属轻量操作,无需额外缓存;
  • 扩展建议:若需显示更丰富的预约信息(如时段、服务人员),可同样用 get_post_meta( $order_id, ‘_appointment_time’ ) 等键名读取。

完成以上修改后,刷新「我的订单」页面,即可看到各订单旁清晰显示由 JetAppointment 提交的预约日期。此方案稳定兼容 WooCommerce 6.x + JetAppointment 2.x+,是服务型站点订单可视化的核心实践之一。

text=ZqhQzanResources