如何在WooCommerce后台订单编辑页显示订单项的取件/送件日期
WooCommerce后台订单编辑页显示订单项取件/送件日期的解决方法
问题原因
你之前的代码用了woocommerce_email_order_meta钩子,这是针对订单邮件的,和后台订单编辑页无关;另外如果没有把购物车项里的日期保存到订单项元数据,后台也无法读取到这些信息。
解决步骤
1. 先将购物车项的日期保存到订单项元数据
这段代码会在订单创建时,把购物车中每个商品的取件、送件日期同步保存为订单项的元数据:
// 保存购物车项的取件/送件日期到订单项 add_action('woocommerce_checkout_create_order_line_item', 'save_pickup_dropoff_dates_to_order_item', 10, 4); function save_pickup_dropoff_dates_to_order_item($item, $cart_item_key, $cart_item, $order) { if (!empty($cart_item['pickup_date'])) { // 和结账页保持一致的日期格式化 $pickup_date = date('Y-m-d', strtotime(str_replace('/', '-', $cart_item['pickup_date']))); $item->add_meta_data('pickup_date', $pickup_date, true); } if (!empty($cart_item['dropoff_date'])) { $dropoff_date = date('Y-m-d', strtotime(str_replace('/', '-', $cart_item['dropoff_date']))); $item->add_meta_data('dropoff_date', $dropoff_date, true); } }
2. 在后台订单编辑页的订单项中显示日期
这段代码会在后台订单编辑页面的每个商品项下方,展示对应的取件和送件日期:
// 在后台订单编辑页的订单项中显示取件/送件日期 add_action('woocommerce_after_order_itemmeta', 'display_pickup_dropoff_dates_in_admin_order', 10, 3); function display_pickup_dropoff_dates_in_admin_order($item_id, $item, $product) { // 只处理产品类型的订单项(跳过运费、优惠券等条目) if ($item->get_type() !== 'line_item') return; $pickup_date = wc_get_order_item_meta($item_id, 'pickup_date', true); $dropoff_date = wc_get_order_item_meta($item_id, 'dropoff_date', true); if ($pickup_date && $dropoff_date) { echo '<div style="margin-top: 8px; padding-top: 8px; border-top: 1px solid #eee;">'; echo '<strong>取件日期:</strong> ' . esc_html($pickup_date) . '<br>'; echo '<strong>送件日期:</strong> ' . esc_html($dropoff_date); echo '</div>'; } elseif ($pickup_date || $dropoff_date) { echo '<div style="margin-top: 8px; padding-top: 8px; border-top: 1px solid #eee;">'; if ($pickup_date) echo '<strong>取件日期:</strong> ' . esc_html($pickup_date) . '<br>'; if ($dropoff_date) echo '<strong>送件日期:</strong> ' . esc_html($dropoff_date); echo '</div>'; } }
使用说明
把两段代码添加到你的主题functions.php文件,或者自定义插件中即可。之后新创建的订单,后台编辑页就会显示对应商品的取件/送件日期;如果要让旧订单也生效,需要手动给旧订单项添加对应的元数据(键名为pickup_date和dropoff_date)。
内容的提问来源于stack exchange,提问作者Zohaib Amir
相关产品推荐
相关产品推荐

