2017-12-06 9 views
1

この質問への回答 - Replace Variable Product Price by the chosen variation price in WooCommerce 3 - は、問題の解決の答えでした。バグ - 状態 "在庫あり"(WooCommerce)

どうすればこのバグを修正できますか?

変数の製品はこのように、there is a duplication of the status "In stock"そして、バリエーションの同じ価格を持っている場合:このスレッドで私の答えは、ストアフロントのテーマにWooCommerce 3で素敵な仕事をしていた

enter image description here

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(__('From: %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(__('From: %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; 
} 

     } 
    } 
} 
+0

変数製品のライブリンクを与えるために良いはず行う必要があります、あなたのようにテーマは、htmlの構造とクラスの名前をカスタマイズすることができます... – LoicTheAztec

+0

http://fh7988px.bget.ru/?product=product-41 –

+0

こんにちは!ご回答いただきありがとうございました。私はボットではありません。昨日私は最初のメッセージに書いたエラーを見ることができるリンクを示しました。今日、私はコードを昨日の答えで提案したものに置き換えました。エラーは修正されていません。 –

答えて

0

...

この再訪されたコードを代わりに試してみてください。

add_action('woocommerce_before_single_product', 'custom_template_single_price', 1); 
function custom_template_single_price(){ 
    if (! is_product()) return; // Only on single product pages 

    global $product, $post; 

    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', 'replace_template_single_price', 10); 
    } 
} 

function replace_template_single_price(){ 
    global $product; 

    // Main Price 
    $prices = array($product->get_variation_price('min', true), $product->get_variation_price('max', true)); 
    $price = $prices[0] !== $prices[1] ? sprintf(__('From: %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(__('From: %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()){ 
       if($('p.availability')) 
        $('p.availability').remove(); 
       if($('p.stock')) 
        $('p.stock').remove(); 
       $('p.price').html($('div.woocommerce-variation-price > span.price').html()).append('<p class="availability">'+$('div.woocommerce-variation-availability').html()+'</p>'); 
      } else { 
       $('p.price').html($('div.hidden-variable-price').html()); 
       if($('p.availability')) 
        $('p.availability').remove(); 
       if($('p.stock')) 
        $('p.stock').remove(); 
      } 
     }); 
    }); 
    </script> 
    <?php 

    echo '<p class="price">'.$price.'</p> 
    <div class="hidden-variable-price" >'.$price.'</div>'; 
} 

はWooCommerceの3.2.xの中でテストされたと私はがそれを設定する前に、在庫の有無のラベルを削除するには、いくつかのjQueryのコードを追加してい

(店頭テーマに)動作します。それもあなたのために働くはずです。 HTML構造上のカスタマイズやクラス名を持ついくつかのテーマについては

、あなたは、コード内のいくつかの変更

関連する問題