按 WooCommerce 订单和电子邮件通知上的名称对费用进行排序

我需要按名称对费用进行排序,而不是按 WooCommerce 订单中的默认价格进行排序。

在 Woocommerce 购物车和结账页面答案代码中使用不同的重新排序多项费用,我成功地按购物车和结账页面中的名称对费用进行排序。但它不适用于订单确认和发送的电子邮件。

感谢您的帮助。


芜湖不芜
浏览 60回答 1
1回答

眼眸繁星

更新要按客户订单和电子邮件通知上的名称对费用进行排序,您将使用以下内容:// Custom function that sort displayed fees by name on order itemsfunction wc_get_sorted_order_item_totals_fee_rows( &$total_rows, $tax_display, $order ) {    $fees = $order->get_fees();    if ( $fees ) {        $fee_names = []; // initializing        // First Loop        foreach ( $fees as $fee_id => $fee ) {            $fee_names[$fee_id] = $fee->get_name();        }        asort($fee_names); // Sorting by name        // 2nd Loop        foreach ( $fee_names as $fee_id => $fee_name ) {            $fee = $fees[$fee_id];            if ( apply_filters( 'woocommerce_get_order_item_totals_excl_free_fees', empty( $fee['line_total'] ) && empty( $fee['line_tax'] ), $fee_id ) ) {                continue;            }            $total_rows[ 'fee_' . $fee->get_id() ] = array(                'label' => $fee->get_name() . ':',                'value' => wc_price( 'excl' === $tax_display ? $fee->get_total() : $fee->get_total() + $fee->get_total_tax(), array( 'currency' => $order->get_currency() ) ),            );        }    }}// Display sorted fees by name everywhere on orders and emailsadd_filter( 'woocommerce_get_order_item_totals', 'display_date_custom_field_value_on_order_item_totals', 10, 3 );function display_date_custom_field_value_on_order_item_totals( $total_rows, $order, $tax_display ){    // Initializing variables    $new_total_rows = $item_fees = [];    // 1st Loop - Check for fees    foreach ( $total_rows as $key => $values ) {        if( strpos($key, 'fee_') !== false ) {            $item_fees[] = $key;        }    }    if( count($item_fees) > 1 ) {        // 2nd Loop - Remove item fees total lines        foreach ( $item_fees as $key ) {            unset($total_rows[$key]);        }        $key_start = isset($total_rows['shipping']) ? 'shipping' : ( isset($total_rows['discount']) ? 'discount' : 'cart_subtotal' );        // 3rd Loop - loop through order total rows        foreach( $total_rows as $key => $values ) {            $new_total_rows[$key] = $values;            // Re-inserting sorted fees            if( $key === $key_start ) {                wc_get_sorted_order_item_totals_fee_rows( $new_total_rows, $tax_display, $order );            }        }        return $new_total_rows;    }    return $total_rows;}代码位于活动子主题(或活动主题)的functions.php 文件中。经过测试并有效。
打开App,查看更多内容
随时随地看视频慕课网APP