【发布时间】:2020-07-03 16:55:42
【问题描述】:
我正在尝试解决有关在 wordpress woocomerce 中显示价格的问题。预览网站(循环)也可以很好地显示单个产品页面的价格。只有可变价格不会随选择字段而变化。我为价格创建过滤器的主要问题是显示含税和不含税的价格。我的代码看起来像:
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;
}
}
我认为问题在于(多维)数组填充。因为处理价格的 variation.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>
但我不知道上面提到的数组是什么样子的?
【问题讨论】:
标签: php wordpress woocommerce