如果产品在 WooCommerce 中具有特定的自定义字段,则显示订单项目的预计交货日期

问题描述

如果产品是从延期交货中订购的,我将以编程方式添加产品自定义字段(预计交货日期)作为自定义购物车项目数据。

我还想在订单商品上显示该信息,以便在订单和发送给客户的电子邮件通知显示

这是我到目前为止尝试过的:

add_filter( 'woocommerce_get_item_data','display_acf_on_cart_and_checkout',10,2 );
function display_acf_on_cart_and_checkout( $cart_data,$cart_item ) {
    if ( ($cart_item['variation_id'] > 0 && $cart_item['data']->get_stock_quantity() <= 0
    && $cart_item['data']->get_Meta('_ab_preorder_checkBox') === 'yes') || isset( $cart_item['is_preorder_field'] ) ) {
        if ( $estimated_delivery_date = $cart_item['data']->get_Meta('_ab_preorder_estimated_date') ) {
            $custom_items[] = array( "name" => __("Date de livraison estimée (précommande) ","woocommerce"),"value" => $estimated_delivery_date );
        }
    }
    return $custom_items;
}

该消息显示在购物车和结帐页面上:

enter image description here

enter image description here

但不在发送给客户的发票/电子邮件上:

enter image description here

我希望它显示在下面的屏幕截图中(在红色矩形中)。可能吗?

感谢任何帮助。

解决方法

您可以使用以下内容将预购商品的预计交货日期保存为自定义订单商品元数据,并在订单和电子邮件通知中显示:

// Save as custom order item meta data and display on orders and email notifications
add_action('woocommerce_checkout_create_order_line_item','action_checkout_create_order_line_item',10,4 );
function action_checkout_create_order_line_item( $item,$cart_item_key,$values,$order ) {
    if ( ($values['variation_id'] > 0 && $values['data']->get_stock_quantity() <= 0
    && $values['data']->get_meta('_ab_preorder_checkbox') === 'yes') || isset( $values['is_preorder_field'] ) ) {
        if ( $estimated_delivery_date = $values['data']->get_meta('_ab_preorder_estimated_date') ) {
            $item->update_meta_data( 'is_preorder',$estimated_delivery_date );
        }
    }
}

// Change required displayed meta key label to something readable
add_filter('woocommerce_order_item_display_meta_key','filter_order_item_displayed_meta_key',20,3 );
function filter_order_item_displayed_meta_key( $displayed_key,$meta,$item ) {
    // Change displayed meta key label for specific order item meta key
    if( $item->get_type() === 'line_item' && $meta->key === 'is_preorder' ) {
        $displayed_key = __("Date de livraison estimée (précommande) ","woocommerce");
    }
    return $displayed_key;
}

代码位于活动子主题(或活动主题)的functions.php 文件中。它应该可以工作。