Добавление процентной доли дисконта к переменной продукции в продаже

Я пытаюсь добавить процентную скидку в сторону цены на сайте, использующем WooCommerce.

Я применил этот скрипт для стандартной цены и цены продажи:

// Add save percentage next to sale item prices. add_filter( 'woocommerce_get_price_html', 'adventure_tours_sales_price', 10, 2 ); function adventure_tours_sales_price( $price, $product ){ $percentage = round( ( ( $product->regular_price - $product->sale_price ) / $product->regular_price ) * 100 ); return $price . sprintf( __(' Save %s', 'woocommerce' ), $percentage . '%' ); } 

Сценарий выше работает.

В интерфейсе у меня есть процент цены.

Теперь я хочу применить тот же скрипт к цене изменения продукта.

Я проверил вариант изменения продукта и попробовал что-то вроде этого:

 // Add save percentage next to sale item prices. add_filter( 'woocommerce_get_price_html', 'adventure_tours_sales_price', 10, 2 ); function adventure_tours_sales_price( $price, $product ){ if( $product->is_type( 'variable' ) ) { $percentage = round( ( ( $product->regular_price - $product->sale_price ) / $product->regular_price ) * 100 ); return $price . sprintf( __(' Save %s', 'woocommerce' ), $percentage . '%' ); }else{ $percentage = round( ( ( $product->regular_price - $product->sale_price ) / $product->regular_price ) * 100 ); return $price . sprintf( __(' Save %s', 'woocommerce' ), $percentage . '%' ); } } 

Но это не работает, процент не применяется к цене.

Не в интерфейсе.

Обновление. Для переменных продуктов сложнее, поскольку у вас есть 2 разных местоположения с ценами, первый показывает минимальную и максимальную цену (когда у вас несколько вариантов), а во втором отображается цена из выбранных вариантов. Я сильно изменил ваш исходный код.

Здесь правильный код, отображающий, что пользовательские динамические метки arround дисконтированные проценты:

 add_filter('woocommerce_variation_sale_price_html','adventure_tours_sales_price', 10, 2 ); add_filter('woocommerce_sale_price_html','adventure_tours_sales_price', 10, 2 ); function adventure_tours_sales_price( $price, $product ){ // Variables initialisation $regular_price = $product->regular_price; $sale_price = $product->sale_price; $save_text = __('Save', 'woocommerce') . ' '; if(!empty($sale_price)) { // Percentage calculation $percentage = '<span class="save-percent"> ' .$save_text . round( ( ( $regular_price - $sale_price ) / $regular_price ) * 100 ) . '%</span>'; $price = '<del class="strike">' . woocommerce_price( $regular_price ) . '</del> <ins class="highlight">' . woocommerce_price( $sale_price ) . $percentage . '</ins>'; } else { $price = '<ins class="highlight">'.woocommerce_price( $regular_price ).'</ins>'; } return $price; } add_filter('woocommerce_variable_sale_price_html', 'adventure_tours_sales_min_max_prices', 20, 2); function adventure_tours_sales_min_max_prices( $price, $product) { // Variables initialisation $variation_min_reg_price = $product->get_variation_regular_price('min', true); $variation_max_reg_price = $product->get_variation_regular_price('max', true); $variation_min_sale_price = $product->get_variation_sale_price('min', true); $variation_max_sale_price = $product->get_variation_sale_price('max', true); $percentage_min = ''; $percentage_max = ''; $save_text = __('Save', 'woocommerce') . ' '; // Percentage calculations if($variation_min_reg_price != $variation_min_sale_price) $percentage_min = '<span class="save-percent-min"> (' .$save_text . round( ( ( $variation_min_reg_price - $variation_min_sale_price ) / $variation_min_reg_price ) * 100 ) . '%)</span>'; if($variation_max_reg_price != $variation_max_sale_price) $percentage_max = '<span class="save-percent-max"> (' .$save_text . round( ( ( $variation_max_reg_price - $variation_max_sale_price ) / $variation_max_reg_price ) * 100 ) . '%)</span>'; if (($variation_min_reg_price != $variation_min_sale_price) || ($variation_max_reg_price != $variation_max_sale_price)) { $price = '<del class="strike">' . woocommerce_price($variation_min_reg_price) . '-' . woocommerce_price($variation_max_reg_price) . '</del> <ins class="highlight">' . woocommerce_price($variation_min_sale_price) . $percentage_min . ' - ' . woocommerce_price($variation_max_sale_price) . $percentage_max . '</ins>'; } return $price; } 

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

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

Вот что вы получите (скриншоты с моего исходного тестового сервера):

введите описание изображения здесь


Похожие ответы:

  • Добавление пользовательских текстовых меток в цены, когда товары продаются
  • Условный пользовательский выход по цене продажи продуктов и обычной цене