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

Как видите, если цена нормальная, все работает. Тем не менее, если у товара переменная цена, отображается цена 0 €.

Ну, код для отображения цены такой:

<?php
if (isset($ebookstore_theme_option['woo-list-price']) && 
    $ebookstore_theme_option['woo-list-price'] == 'enable') {
    $ebookstore_woo .= '<strong class="amount">'.esc_attr($currency).''.$price_sale.'</strong>';
}

Есть идеи, как отображать цену с переменным диапазоном?

2
Stefano 18 Дек 2017 в 21:53

1 ответ

Лучший ответ

Для переменного товара в WooCommerce вам понадобятся:

  • нацелить переменный тип продукта
  • чтобы получить минимальную и максимальную цены.

Итак, вам нужно получить экземпляр объекта продукта. В общем, вы можете получить это с помощью:

 global $product;

Если это не сработает, вы воспользуетесь:

global $post;
$product = wc_get_product( $post->ID );

Теперь с этого момента вы будете использовать следующее:

<?php
global $product;

if ( isset( $ebookstore_theme_option['woo-list-price'] ) && $ebookstore_theme_option['woo-list-price'] == 'enable' ){

    // For all product types that are not "variable products"
    if( ! $product->is_type('variable') ){
        $ebookstore_woo .= '<strong class="amount">'.esc_attr($currency).''.$price_sale.'</strong>';
    }
    // For variable products    
    else {
        $min_price = $product->get_variation_price( 'min' );
        $max_price = $product->get_variation_price( 'max' );

        $ebookstore_woo .= '<strong class="amount">'.esc_attr($currency).''.$min_price.' - '.esc_attr($currency).''.$max_price.'</strong>';
    }
}

Как видите, я использую методы WC_Product_Variable


Возможно, вы не знаете, но у woocommerce есть несколько функций форматирования цены, например:

  • wc_price( $price );
  • wc_format_price_range( $from, $to );
  • wc_format_sale_price( $regular_price, $sale_price );

Все они будут включать валюту

7
LoicTheAztec 19 Дек 2017 в 03:44