在 WooCommerce 中,我有一些自定义购物车项目数据,我可以使用以下方式在结帐时显示这些数据:
<td class="custom-date-cell">
<?php
if (!empty($cart_item['pickup_date']) && !empty($cart_item['dropoff_date'])) {
$pickup_date = date('Y-m-d', strtotime(str_replace('/', '-', $cart_item['pickup_date'])));
$dropoff_date = date('Y-m-d', strtotime(str_replace('/', '-', $cart_item['dropoff_date'])));
echo $pickup_date . " <br>to<br>" . $dropoff_date;
} else {
echo 'No dates available';
}
?>
</td>
这将显示特定产品的日期。
但现在我还想在 WooCommerce 订单编辑页面中显示这些日期,并且应该为每个订单项目显示这些日期。
我尝试了以下方法:
add_action('woocommerce_email_order_meta', 'add_booking_dates_to_order_emails', 10, 3);
function add_booking_dates_to_order_emails($order, $sent_to_admin, $plain_text) {
foreach ($order->get_items() as $item_id => $item) {
$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) {
if ($plain_text) {
echo "Pickup Date: $pickup_date\n";
echo "Dropoff Date: $dropoff_date\n";
}
}
}
}
但是根本不起作用。
要使其正常工作,您首先需要将这些日期保存为自定义订单项数据,它们将显示在任何地方(包括订单编辑页面)。
尝试以下(与HPOS兼容):
// Utility function
function shipping_dates_key_labels() {
return array(
'pickup_date' => esc_html__('Pickup Date', "woocommerce"),
'dropoff_date' => esc_html__('Dropoff Date', "woocommerce"),
)
}
// Save custom cart item data as order item meta
add_action( 'woocommerce_checkout_create_order_line_item', 'save_cart_item_dates_as_order_item_meta', 10, 4 );
function save_cart_item_dates_as_order_item_meta( $item, $cart_item_key, $values, $order ) {
foreach ( shipping_dates_key_labels() as $date_key => $label ) {
if( isset($cart_item[$date_key]) ) {
$item->add_meta_data( $date_key, date('Y-m-d', strtotime( str_replace('/', '-', $cart_item[$date_key]) ) ) );
}
}
}
// Replace custom order item displayed keys with a readable "meta key" label name
add_filter( 'woocommerce_order_item_display_meta_key', 'filter_order_item_display_meta_key', 10, 3 );
function filter_order_item_display_meta_key( $display_key, $meta, $item ) {
foreach ( shipping_dates_key_labels() as $date_key => $readable_label ) {
if( $item->get_type() === 'line_item' && $meta->key === $date_key ) {
$display_key = $readable_label;
}
}
return $display_key;
}
代码位于子主题的functions.php 文件中(或插件中)。应该可以。