【问题标题】:Wordpress woocommerce price displaiyng issueWordpress woocommerce 价格显示问题
【发布时间】: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


    【解决方案1】:

    修改原始loop/price.php文件不是最好的解决方案,但它很快。最终代码如下:

    global $product;
    
    if ( $price_html = $product->get_price_html() ) {
    
        $price = $product->get_price();
    
        $tax_rates = WC_Tax::get_rates( $product->get_tax_class() );
        if (!empty($tax_rates)) {
            $tax_rate = reset($tax_rates);
        }
    
        if ( '' === $price || 0 == $price ) {
            $display_price = $price_html;
        }
    
        if($product->is_type( 'simple' ) && is_numeric($price)) {
            $price_incl_tax = round($price * (1 + ($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>';    
        }
    
        if($product->is_type( 'variable' ) && is_numeric($price) && $price > 0) {
    
            $minmax = array( $product->get_variation_price( 'min', true ), $product->get_variation_price( 'max', true ) );
    
            if($minmax[0] == $minmax[1]){
                $price_excl_tax = round($minmax[0] / (1 + ($tax_rate['rate'] / 100) ), 2);  
                $price_excl_tax = wc_price($price_excl_tax);
                $price = wc_price($minmax[0]);
                $display_price = '<span class="price">';
                $display_price .= '<span class="amount">' . $price .' s DPH </span>';
                $display_price .= '<br>';
                $display_price .= '<span class="amount">' . $price_excl_tax .' bez DPH </span>';
                $display_price .= '</span>';    
            }
    
            if($minmax[0] != $minmax[1]){
                $price_excl_tax_min = round($minmax[0] / (1 + ($tax_rate['rate'] / 100) ), 2); 
                $price_excl_tax_min = wc_price($price_excl_tax_min);
                $price_excl_tax_max = round($minmax[1] / (1 + ($tax_rate['rate'] / 100) ), 2); 
                $price_excl_tax_max = wc_price($price_excl_tax_max);
    
                $price_incl_tax_min = wc_price($minmax[0]);
                $price_incl_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>';    
            }               
        }
    
    echo $display_price;
    }
    

    对于单个产品页面,使用短代码 {price_exclude_tax} 作为 woocommerce 税中的价格后缀。

    【讨论】:

      猜你喜欢
      • 2019-10-25
      • 2015-09-24
      • 1970-01-01
      • 2016-03-29
      • 2021-11-24
      • 2021-05-18
      • 2017-11-24
      • 2022-01-03
      • 1970-01-01
      相关资源
      最近更新 更多