Я пытаюсь добавить общую сумму суммы на значок продажи flash, используя этот фрагмент ниже, но есть что-то не так, поскольку он не работает. Любые советы будут действительно оценены.
// 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 ); }
благодаря
Добавлена совместимость с WC 3+
У вас нет правильных аргументов в вашем фильтре (например, $price
не существует), см. Здесь соответствующий исходный код для woocommerce_sale_flash
фильтра 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 вашей активной дочерней темы (или темы), а также в любом файле плагина.
Этот код проверен и работает.