【问题标题】:Display woocommerce variable product price显示 woocommerce 可变产品价格
【发布时间】:2017-11-24 07:18:07
【问题描述】:

如何在单个产品页面上显示当前活动变化的 woocommerce 可变价格? 我使用代码:

<?php 
global $product;
if ($product->is_type( 'simple' )) { ?>
  <p class="price"><?php echo $product->get_price_html(); ?></p>
<?php } ?>
<?php 
if($product->product_type=='variable') {
  $available_variations = $product->get_available_variations();
  $variation_id=$available_variations[0]['variation_id']; // Getting the variable id of just the 1st product. You can loop $available_variations to get info about each variation.
  $variable_product1= new WC_Product_Variation( $variation_id );
  $regular_price = $variable_product1 ->regular_price;
  $sales_price = $variable_product1 ->sale_price;
  echo $regular_price+$sales_price;
  }
?>

但它仅显示最低可变价格,而不是当前所选变体的价格。 任何想法如何显示主动变化的当前价格?

【问题讨论】:

    标签: php woocommerce variations


    【解决方案1】:

    所以,您只需修改 \your-theme\woocommerce\single-product\sale-flash.php 文件

    或者,您也可以使用过滤器。 顺便还有更简单的解决方案:

    if ($product->is_type( 'simple' )) {
            $sale_price     =  $product->get_sale_price();
            $regular_price  =  $product->get_regular_price();
        }
        elseif($product->is_type('variable')){
            $sale_price     =  $product->get_variation_sale_price( 'min', true );
            $regular_price  =  $product->get_variation_regular_price( 'max', true );
        }
    
    
        $discount = round (($sale_price / $regular_price -1 ) * 100);
    }
    

    或者你可以复制这个要点https://gist.github.com/sholex/4064fc2b656c0857a78228cf5324b370

    【讨论】:

      【解决方案2】:
      <?php 
                      global $product;
                      if ($product->is_type( 'simple' )) { ?>
                          <p class="price"><?php echo $product->get_price_html(); ?></p>
                      <?php } ?>
                      <?php 
                      if($product->product_type=='variable') {
                          $available_variations = $product->get_available_variations();
      $count = count($available_variations)-1;
                          $variation_id=$available_variations[$count]['variation_id']; // Getting the variable id of just the 1st product. You can loop $available_variations to get info about each variation.
                          $variable_product1= new WC_Product_Variation( $variation_id );
                          $regular_price = $variable_product1 ->regular_price;
                          $sales_price = $variable_product1 ->sale_price;
                          echo $regular_price+$sales_price;
                          }
                      ?>
      

      试试这个。这可能会对您有所帮助。

      【讨论】:

      • 感谢您的回答,但这个显示了变化的最高价格。如果我切换到另一个变体,它仍然显示相同的价格:(
      • 例如有 2 种变体:第一种成本 7 美元,第二种成本 14 美元。我的代码始终显示最低价格,而您的代码始终显示最高价格。我需要动态更改该价格:如果我选择第一个变体,它显示价格 7 美元,如果我选择第二个 - 14 美元
      • 您对所选的变体有唯一的 id 吗?
      • 有没有办法自动获取ID?我想避免手动创建或计算它们:)
      • 您应该使用 ajax 调用在您的下拉更改中显示可变价格
      【解决方案3】:
      <?php 
                      global $product;
                      if ($product->is_type( 'simple' )) { ?>
                          <p class="price"><?php echo $product->get_price_html(); ?></p>
                      <?php } ?>
                      <?php 
                      if($product->product_type=='variable') {
                          $available_variations = $product->get_available_variations();
      foreach($available_variations as $key=>$val){ 
           if(trim($val['variation_id'])==**"your selected variant id"**){
                          $variation_id=$available_variations[$key]['variation_id']; // Getting the variable id of just the 1st product. You can loop $available_variations to get info about each variation.
           }
      }
                          $variable_product1= new WC_Product_Variation( $variation_id );
                          $regular_price = $variable_product1 ->regular_price;
                          $sales_price = $variable_product1 ->sale_price;
                          echo $regular_price+$sales_price;
                          }
                      ?>
      

      【讨论】:

      • 这可能会帮助您获得选定的变体 id $variable_product1=new WC_Product_Variation( )::get_variation_id();
      • 该代码会引发很多通知,但可以正常工作。需要修复间接数据访问。请使用数据调用,而不是直接访问。
      【解决方案4】:
          add_action( 'woocommerce_before_single_product', 'check_if_variable_first' );
      function check_if_variable_first(){
          if ( is_product() ) {
              global $post;
              $product = wc_get_product( $post->ID );
              if ( $product->is_type( 'variable' ) ) {
                  // removing the price of variable products
      remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 );
      
      // Change location of
      add_action( 'woocommerce_single_product_summary', 'custom_wc_template_single_price', 10 );
      function custom_wc_template_single_price(){
          global $product;
      
      // Variable product only
      if($product->is_type('variable')):
      
          // Main Price
          $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] );
      
          // Sale Price
          $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 && $product->is_on_sale() ) {
              $price = '<del>' . $saleprice . $product->get_price_suffix() . '</del> <ins>' . $price . $product->get_price_suffix() . '</ins>';
          }
      
          ?>
          <style>
              div.woocommerce-variation-price,
              div.woocommerce-variation-availability,
              div.hidden-variable-price {
                  height: 0px !important;
                  overflow:hidden;
                  position:relative;
                  line-height: 0px !important;
                  font-size: 0% !important;
              }
          </style>
          <script>
          jQuery(document).ready(function($) {
              $('select').blur( function(){
                  if( '' != $('input.variation_id').val() ){
                      $('p.price').html($('div.woocommerce-variation-price > span.price').html()).append('<p class="availability">'+$('div.woocommerce-variation-availability').html()+'</p>');
                      console.log($('input.variation_id').val());
                  } else {
                      $('p.price').html($('div.hidden-variable-price').html());
                      if($('p.availability'))
                          $('p.availability').remove();
                      console.log('NULL');
                  }
              });
          });
          </script>
          <?php
      
          echo '<p class="price">'.$price.'</p>
          <div class="hidden-variable-price" >'.$price.'</div>';
      
      endif;
      }
      
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2015-10-10
        • 2015-09-24
        • 2019-02-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-13
        相关资源
        最近更新 更多