
本文详解如何在 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() 才能准确获取。
✅ 正确实现代码如下(推荐整合版,含健壮性处理):
v3.0修正版更新:新增加的功能:1、网店logo在线上传。2、添加图片上传预览功能。3、增加ICP备案字段,在线添加。4、添加管理员管理功能。5、添加送货详细设置功能。6、增加客户端验证功能。7、增加5种样式。修正的地方:1、订单不能删除。2、产品图片不能删除。3、管理员不能修改密码。4、小数显示不正常,比如0.68显示为.685、退出不方便。6、前台热门商品文字显示不换行。7、商品详细介绍页面
// 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+,是服务型站点订单可视化的核心实践之一。









