Как вывести конкретную цену вариативного товара 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.
Добавить Комментарий

Ваш ответ

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