在 WooCommerce 管理员编辑订单中显示额外的订单项目详细信息

问题描述 投票:0回答:1

在 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";
            } 

        }
    }
}

但是根本不起作用。

php wordpress woocommerce orders
1个回答
0
投票

要使其正常工作,您首先需要将这些日期保存为自定义订单项数据,它们将显示在任何地方(包括订单编辑页面)。

尝试以下(与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 文件中(或插件中)。应该可以。

© www.soinside.com 2019 - 2024. All rights reserved.