Настройка флэш-значка продажи товара

Я пытаюсь добавить сумму сохранения на значок флэш-продажи, используя этот фрагмент ниже, но что-то не так, так как он не работает.
Любой совет будет очень признателен.

// Add save amount on the sale badge.
add_filter( 'woocommerce_sale_flash', 'woocommerce_custom_badge', 10, 2 );
function woocommerce_custom_badge( $price, $product ) {
$saved = wc_price( $product->regular_price - $product->sale_price );
return $price . sprintf( __(' <div class="savings">Save %s</div>', 'woocommerce' ), $saved );
}

Спасибо

1

Решение

Добавлена ​​совместимость с WC 3+

У вас нет правильных аргументов в вашем фильтре ($price например, не существует), см. здесь соответствующий исходный код для woocommerce_sale_flash фильтр-крюк, чтобы лучше понять:

/*
*  The filter hook woocommerce_sale_flash is located in:
*  templates/loop/sale-flash.php and templates/single-product/sale-flash.php
*/

<?php if ( $product->is_on_sale() ) : ?>

<?php echo apply_filters( 'woocommerce_sale_flash', '<span class="onsale">' . esc_html__( 'Sale!', 'woocommerce' ) . '</span>', $post, $product ); ?>

Итак, ваш рабочий код будет выглядеть примерно так:

add_filter( 'woocommerce_sale_flash', 'woocommerce_custom_badge', 10, 3 );
function woocommerce_custom_badge( $output_html, $post, $product ) {

// Added compatibility with WC +3
$regular_price = method_exists( $product, 'get_regular_price' ) ? $product->get_regular_price() : $product->regular_price;
$sale_price = method_exists( $product, 'get_sale_price' ) ? $product->get_sale_price() : $product->sale_price;

$saved_price = wc_price( $regular_price - $sale_price );
$output_html = '<span class="onsale">' . esc_html__( 'Save', 'woocommerce' ) . ' ' . $saved_price . '</span>';

return $output_html;
}

Код находится в файле function.php вашей активной дочерней темы (или темы) или также в любом файле плагина.

Этот код протестирован и работает.

2

Другие решения

Других решений пока нет …