Я пытаюсь решить проблему с отображением цены в WordPress Woocomerce. Сайт предварительного просмотра (l oop) работает хорошо, и цены на отдельные страницы продукта показывают хорошо. Только переменная цена не изменяется с полем выбора. Основная проблема, почему я создаю фильтр для цен, это отображение цены с налогом и без. Мой код выглядит так:
add_filter('woocommerce_get_price_html', 'edit_price_display', 10, 2);
function edit_price_display() {
global $product;
$price = $product->get_price();
$tax_rates = WC_Tax::get_rates( $product->get_tax_class() );
if (!empty($tax_rates)) {
$tax_rate = reset($tax_rates);
}
if($product->is_type( 'simple' ) && is_numeric($price)) {
$price_incl_tax = $price + round($price * ( $tax_rate['rate'] / 100 ), 2);
$price_incl_tax = wc_price($price_incl_tax);
$price = wc_price($price);
$display_price = '<span class="price">';
$display_price .= '<span class="amount">' . $price_incl_tax .' s DPH </span>';
$display_price .= '<br>';
$display_price .= '<span class="amount">' . $price .' bez DPH </span>';
$display_price .= '</span>';
return $display_price;
}
if($product->is_type( 'variable' ) && is_numeric($price) && !is_single()) {
$minmax = array( $product->get_variation_price( 'min', true ), $product->get_variation_price( 'max', true ) );
if($minmax[0] == $minmax[1]){
$price_incl_tax = $minmax[0] + round($minmax[0] * ( $tax_rate['rate'] / 100 ), 2);
$price_incl_tax = wc_price($price_incl_tax);
$price = wc_price($minmax[0]);
$display_price = '<span class="price">';
$display_price .= '<span class="amount">' . $price_incl_tax .' s DPH </span>';
$display_price .= '<br>';
$display_price .= '<span class="amount">' . $price .' bez DPH </span>';
$display_price .= '</span>';
}
if($minmax[0] != $minmax[1]){
$price_incl_tax_min = $minmax[0] + round($minmax[0] * ( $tax_rate['rate'] / 100 ), 2);
$price_incl_tax_min = wc_price($price_incl_tax_min);
$price_incl_tax_max = $minmax[1] + round($minmax[1] * ( $tax_rate['rate'] / 100 ), 2);
$price_incl_tax_max = wc_price($price_incl_tax_max);
$price_excl_tax_min = wc_price($minmax[0]);
$price_excl_tax_max = wc_price($minmax[1]);
$display_price = '<span class="price">';
$display_price .= '<span class="amount">' .$price_incl_tax_min. ' - ' .$price_incl_tax_max. ' s DPH </span>';
$display_price .= '<br>';
$display_price .= '<span class="amount">' . $price_excl_tax_min .' - '.$price_excl_tax_max.' bez DPH </span>';
$display_price .= '</span>';
}
return $display_price;
}
if($product->is_type( 'variable' ) && is_numeric($price) && is_single()) {
return $product->price; // Issue is right her !
}
if( $price == '' || $price == '-' ) {
$display_price = '<span class="amount">Cena na dopyt</span>';
return $display_price;
}
}
Я думаю, что проблема в (многомерном) заполнении массива. Потому что файл . php, обрабатывающий цену, отображается для переменного продукта. В варианте мы можем видеть что-то вроде:
<script type="text/template" id="tmpl-variation-template">
<div class="woocommerce-variation-description">{{{ data.variation.variation_description }}}</div>
<div class="woocommerce-variation-price">{{{ data.variation.price_html }}}</div>
<div class="woocommerce-variation-availability">{{{ data.variation.availability_html }}}</div>
</script>
Но я понятия не имею, как выглядит этот упомянутый массив?