Поддержка WooCommerce «Цена по запросу» у вариативного товара

  • Добрый день!

    Как вывести фразу «Цена по запросу» для вариативного товара именно для одной (минимальной) цены вариации?
    Есть код который отлично работает и для простого и для вариативного товара:
    ———————

    add_filter( 'woocommerce_get_price_html', 'product_price_free_zero_empty', 100, 2 );
    
    function product_price_free_zero_empty( $price, $product ){
    if ( '' === $product->get_price() || 0 == $product->get_price() ) {
        $price = '<span class="woocommerce-Price-amount amount">Цена по запросу</span>';
    }
    return $price;
    }

    ———————
    Он выводит правильную фразу «Цена по запросу» для вариации, где цена = 0.
    Но проблема в том, что при его использовании на карточке товара ДО выбора вариации ценник указан = «Цена по запросу», а мне надо, чтоб была указана минимальная цена, но отличная от нуля.

    Т.е. в идеале при вариации цен: 0 (это при вариации цена по запросу), 10, 50, 200
    В карточке товара было бы указано: «от 10 рублей»,
    а при выборе товара цена бы указывалась: «Цена по запросу», 10, 50, 200 (в том месте, где она обычно выводится).

Просмотр 3 ответов — с 1 по 3 (всего 3)
  • У меня так получилось:

    
    add_filter( 'woocommerce_get_price_html', 'product_price_free', 100, 2 );
    
    function product_price_free( $price, $product ){
     if( $product->get_type() === 'variable' ){
      $my_price = my_product_price_html( $price, $product );
      return $my_price;
     }
     return $price;
    }
    
    function my_product_price_html( $price, $product ){ 
     //print_r( $product );
     
     $this_price = $product->get_variation_prices();
     $this_price = $this_price['price'];
     $min_price = 0;
     foreach( $this_price as $key => $value ){
      if( ($value < $min_price) OR ($min_price == 0) ){
       $min_price = $value;
      }
     }
     //print_r( $this_price );
     
     $price_A = '
     <p class="price">
     Цена от 
     <span class="woocommerce-Price-amount amount"><bdi>{{price}}&nbsp;
     <span class="woocommerce-Price-currencySymbol">₽</span></bdi></span>
     </p>';
     
     $price_A = str_replace( '{{price}}', $min_price, $price_A );
      
     return $price_A;
    }
    
    

    Супер! Спасибо огромное!!!!!!!!!!!!!!

    А вдруг еще сможешь помочь?
    Суть: в function.php стоит пересчет цены. Примерно так написано:
    $price=$price*$k
    Цена товара пересчитывется с учётом коэффициента к
    Все работает.
    Но если я делаю акцию/распродажу и ставлю распродажную цену, то коэффициент применяется только к распродажной цене. К цене ДО распродажи этот коэффициент не применяется.
    Вопрос в том, как и к ней (к цене ДО распродажи/базовой) его применить?

Просмотр 3 ответов — с 1 по 3 (всего 3)