Я разрабатываю систему бронирования, в которой клиент хочет только внести депозит в размере 50 долларов США, а оставшуюся сумму обговаривать отдельно. Для этого я использовал следующий код, чтобы обновить общую цену до 50 долларов США и показать оставшуюся цену.
function prefix_add_discount_line( $cart ) {
$deposit = 50;
$remaining = $cart->subtotal - 50;
$cart->add_fee( __( 'Amount Remaining', 'remaining' ) , -$remaining);
}
add_action( 'woocommerce_cart_calculate_fees', 'prefix_add_discount_line' );
В письмах с заказами оставшаяся сумма отображается со знаком минус (-). Пожалуйста, дайте мне знать, как удалить символ минуса в электронных письмах с заказами woocommerce.
Чтобы все отрицательные суммы сборов отображались как положительные суммы в итоговых строках WooCommerce Orders, используйте следующее:
add_filter( 'woocommerce_get_order_item_totals', 'custom_order_total_line_html', 10, 3 );
function custom_order_total_line_html( $total_rows, $order, $tax_display ){
// Loop through WooCommerce orders total rows
foreach ( $total_rows as $key_row => $row_values ) {
// Target only "fee" rows
if ( strpos($key_row, 'fee_') !== false ) {
$total_rows[$key_row]['value'] = str_replace('-', '', $row_values['value']);
}
}
return $total_rows;
}
Теперь, чтобы сделать это только для уведомлений по электронной почте WooCommerce, используйте вместо этого:
add_filter( 'woocommerce_get_order_item_totals', 'custom_order_total_line_html', 10, 3 );
function custom_order_total_line_html( $total_rows, $order, $tax_display ){
// Only on emails
if ( ! is_wc_endpoint_url() ) {
// Loop through WooCommerce orders total rows
foreach ( $total_rows as $key_row => $row_values ) {
// Target only "fee" rows
if ( strpos($key_row, 'fee_') !== false ) {
$total_rows[$key_row]['value'] = str_replace('-', '', $row_values['value']);
}
}
}
return $total_rows;
}
Код находится в файле functions.php активной дочерней темы (или активной темы). Проверено и работает.
Другой ответ не сработал для меня.
add_filter( 'woocommerce_cart_totals_fee_html', 'remove_minus_sign_from_wc_fee', 10, 2 );
function remove_minus_sign_from_wc_fee( $fee_html, $fee ) {
if ( 0 > $fee->amount ) {
$fee_html = str_replace( '-', '', $fee_html );
}
return $fee_html;
}