Как вывести конкретную цену вариативного товара woocommerce (цену по умолчанию), а не диапазон?

Здравствуйте! Как можно реализовать следующий момент (все по порядку):

1. есть вариативный товар, который в зависимости от изменения атрибута (цвет товара) меняет цену;

2. на странице каталога у товара под названием, соответственно, выводится диапазон цен, что не есть хорошо для поставленной задачи;

3. есть вариант (найденный на просторах сети, и заключающийся добавлением строк в functions.php) реализовать вывод цены в формате «от «минимальная цена», но это тоже не подходит для достижения нужной цели;

4. собственно вопрос: как сделать так, чтобы под товаром выводилась цена конкретной вариации, той, которая в настройках вариаций товара указана по умолчанию?

Заранее спасибо за помощь!

Добавить Комментарий

    Выводим цену вариативного товара

    
    // выводим цену вариативного товара
    
    add_filter('woocommerce_available_variation', function ($value, $object = null, $variation = null) {
    
    if ($value['price_html'] == '') {
    
    $value['price_html'] = '<span class="price">' . $variation->get_price_html() . '</span>';
    
    }
    
    return $value;
    
    }, 10, 3);
    
    

     

    Выводим цену рядом с вариацией товара

    
    add_filter( 'woocommerce_variation_option_name', 'display_price_in_variation_option_name' );
    function display_price_in_variation_option_name( $term ) {
    
    global $wpdb, $product;
    if ( empty( $term ) ) return $term;
    
    if ( empty( $product->id ) ) return $term;
    $result = $wpdb->get_col( "SELECT slug FROM {$wpdb->prefix}terms WHERE name = '$term'" );
    $term_slug = ( !empty( $result ) ) ? $result[0] : $term;
    $query = "SELECT postmeta.post_id AS product_id
    
    FROM {$wpdb->prefix}postmeta AS postmeta
    
    LEFT JOIN {$wpdb->prefix}posts AS products ON ( products.ID = postmeta.post_id )
    
    WHERE postmeta.meta_key LIKE 'attribute_%'
    
    AND postmeta.meta_value = '$term_slug'
    
    AND products.post_parent = $product->id";
    $variation_id = $wpdb->get_col( $query );
    $parent = wp_get_post_parent_id( $variation_id[0] );
    if ( $parent > 0 ) {
    
    $_product = new WC_Product_Variation( $variation_id[0] );
    
    return $term . ' (' . wp_kses( woocommerce_price( $_product->get_price() ), array() ) . ')';
    
    }
    
    return $term;
    }
    
    

    Если я вас правильно понял.

    Забыл нажать комментарий. написал уточнения, просто как ответы)

    в 01.02.2017.
    Добавить Комментарий

    Немного не то.

    Вот пример товара. http://megapit.kz/product/optimum-nutrition-bcaa-1000-400-kapsul/

    В нем по умолчанию задана вариация товара объемом 400 капсул и ценой 10,500

    Цена над кнопкой добавить в корзину указана сразу правильная, и меняется если выбрать другую вариацию. Все как надо работает.

    Вопрос в следующем.  Как сделать чтобы другая цена, что выше стоит (под кратким описанием) и в самом каталоге, где много товаров выводилась именно от товара что указана в вариация по умолчанию (при создании товара и его вариаций), а не минимальная 6,800 как стоит сейчас на примере данного товара.

    Добавить Комментарий

    Изначально был диапазон цен, как и должно быть при создании вариаций.

    От диапазона я избавился следующим кодом:

     

    add_filter( 'woocommerce_variable_sale_price_html', 'wc_wc20_variation_price_format', 10, 2 );
    
    add_filter( 'woocommerce_variable_price_html', 'wc_wc20_variation_price_format', 10, 2 );
    
    function wc_wc20_variation_price_format( $price, $product ) {
    
    // ???? ???
    
    $prices = array( $product->get_variation_price( 'min', true ), $product->get_variation_price( 'max', true ) );
    
    $price = $prices[0] !== $prices[1] ? sprintf( __( '%1$s', 'woocommerce' ), wc_price( $prices[0] ) ) : wc_price( $prices[0] );
    
    // ?? ? ????
    
    $prices = array( $product->get_variation_regular_price( 'min', true ), $product->get_variation_regular_price( 'max', true ) );
    
    sort( $prices );
    
    $saleprice = $prices[0] !== $prices[1] ? sprintf( __( '%1$s', 'woocommerce' ), wc_price( $prices[0] ) ) : wc_price( $prices[0] );
    if ( $price !== $saleprice ) {
    
    $price = '<del>' . $saleprice . '</del> <ins>' . $price . '</ins>';
    
    }
    
    return $price;
    
    }
    
    

    Уже пол дела сделано — осталась одна цена, а не диапазон цен. Но получается так что она минимальная из возможных цен по вариациям.

    Надо чтобы выводилась цена от товара по умолчанию указанного в вариациях.

    В этой функции сделайте var_dump($price, $product); в самом верху функции. Можете сюда прислать, дамп. Посмотрим можно ли там из чего выбрать вашу цену.

    в 01.02.2017.
    Добавить Комментарий

    Точно такая же проблема, скажите у нее есть решение.?

    Добавить Комментарий
    add_filter('woocommerce_variable_price_html', 'custom_variation_price_default', 10, 2);
    
    add_filter('woocommerce_variable_sale_price_html', 'custom_variation_price_default', 10, 2 );
    
     
    
    function custom_variation_price_default( $price, $product ) {
    
      foreach($product->get_available_variations() as $pav){
    
          $def=true;
    
          foreach($product->get_variation_default_attributes() as $defkey=>$defval){
    
              if($pav['attributes']['attribute_'.$defkey]!=$defval){
    
                  $def=false;             
    
              }   
    
          }
    
          if($def){
    
              $price = $pav['display_price'];         
    
          }
    
      }   
    
     
    
      return woocommerce_price($price);
    
    }

    решение отсюда https://stackoverflow.com/questions/32319835/woocommerce-show-default-variation-price

    Добавить Комментарий

    Ваш ответ

    Размещая свой ответ, вы соглашаетесь с правилами сайта.