Urutkan biaya berdasarkan nama di Pesanan WooCommerce dan pemberitahuan email
Aug 17 2020
Saya perlu mengurutkan biaya berdasarkan nama daripada default berdasarkan harga di pesanan WooCommerce.
Menggunakan Menyusun ulang beberapa biaya secara berbeda di keranjang Woocommerce dan kode jawaban halaman checkout , saya telah berhasil mengurutkan biaya berdasarkan nama di keranjang dan halaman checkout. Tetapi itu tidak berfungsi untuk konfirmasi pesanan dan email yang dikirim.
Terima kasih untuk bantuannya.
Jawaban
LoicTheAztec Aug 17 2020 at 13:46
Diperbarui
Untuk mengurutkan biaya berdasarkan nama pada pesanan pelanggan dan pemberitahuan email, Anda akan menggunakan yang berikut ini:
// Custom function that sort displayed fees by name on order items
function 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 emails add_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;
}
Kode masuk ke file functions.php dari tema anak aktif Anda (atau tema aktif). Teruji dan berhasil.
Selalu Menjadi Ancaman: Mengapa Orang Berkulit Coklat dan Hitam Tidak Bisa Nyaman di Amerika Serikat