2017-02-10 15 views
3

WooCommerce製品の単一ページでは、製品が販売価格を所有している場合、通常価格が交換され、その背後で販売価格が強調表示されます。製品の販売時に価格にカスタムテキストラベルを追加する

私の質問:
はどのように私の代わりにのみ消され、新しい価格(販売価格)の"Old Price: XX Dollar""New Price: XX Dollar"のようにラベルを追加することができますか?

+0

この答えはあなたを助けることができるかもしれません。 http://stackoverflow.com/a/41410818/5019802あなたは単純な製品しか持っていませんか? –

答えて

5

アップデート2(シンプル、変数の製品のために+同じバリエーション価格にバグを解決しました)

製品が販売されているとき、あなたはカスタム関数を使用したいと同じようにカスタムラベルを追加することができますがシンプルで変数の製品のために(woocommerce_sale_price_htmlwoocommerce_variation_sale_price_htmlフィルターフックに引っかけ。

変数における最小/最大の価格について製品には、別の機能がフックされている必要がありますwoocommerce_variation_sale_price_htmlフィルターフック。ここで

そのコードです:

add_filter('woocommerce_variation_sale_price_html','sale_prices_custom_labels', 10, 2); 
add_filter('woocommerce_sale_price_html','sale_prices_custom_labels', 10, 2); 
function sale_prices_custom_labels($price, $product){ 
    if (isset($product->sale_price)) { 
     $price = '<del class="strike">' . __('Old Price: ', 'woocommerce') . woocommerce_price($product->regular_price). '</del> 
     <ins class="highlight">' . __('New Price: ', 'woocommerce') . woocommerce_price($product->sale_price) . '</ins>'; 
    } 
    else 
    { 
     $price = '<ins class="highlight">'.woocommerce_price($product->regular_price).'</ins>'; 
    } 
    return $price; 
} 

add_filter('woocommerce_variable_sale_price_html', 'sale_prices_custom_labels_min_max', 20, 2); 
function sale_prices_custom_labels_min_max($price, $product) { 

    $variation_min_reg_price = $product->get_variation_regular_price('min', true); 
    $variation_max_reg_price = $product->get_variation_regular_price('max', true); 
    $variation_min_sale_price = $product->get_variation_sale_price('min', true); 
    $variation_max_sale_price = $product->get_variation_sale_price('max', true); 

    if ($variation_min_reg_price != $variation_min_sale_price || $variation_max_reg_price != $variation_max_sale_price) 
    { 
     if($variation_min_reg_price == $variation_max_reg_price && $variation_min_sale_price == $variation_max_sale_price){ 
      $price = '<del class="strike">' . __('Old Price: ', 'woocommerce') . woocommerce_price($variation_max_reg_price) . '</del> 
      <ins class="highlight">' . __('New Price: ', 'woocommerce') . woocommerce_price($variation_max_sale_price) . '</ins>'; 
     } 
     elseif($variation_min_reg_price != $variation_max_reg_price && $variation_min_sale_price == $variation_max_sale_price) 
     { 
      $price = '<del class="strike">' . __('Old Price: ', 'woocommerce') . woocommerce_price($variation_min_reg_price) . '-' . woocommerce_price($variation_max_reg_price) . '</del> 
      <ins class="highlight">' . __('New Price: ', 'woocommerce') . woocommerce_price($variation_max_sale_price) . '</ins>'; 
     } 
     elseif($variation_min_reg_price == $variation_max_reg_price && $variation_min_sale_price != $variation_max_sale_price) 
     { 
      $price = '<del class="strike">' . __('Old Price: ', 'woocommerce') . woocommerce_price($variation_max_reg_price) . '</del> 
      <ins class="highlight">' . __('New Price: ', 'woocommerce') . woocommerce_price($variation_min_sale_price) . '-' . woocommerce_price($variation_max_sale_price) . '</ins>'; 
     } 
     else 
     { 
     $price = '<del class="strike">' . __('Old Price: ', 'woocommerce') . woocommerce_price($variation_min_reg_price) . '-' . woocommerce_price($variation_max_reg_price) . '</del> 
     <ins class="highlight">' . __('New Price: ', 'woocommerce') . woocommerce_price($variation_min_sale_price) . '-' . woocommerce_price($variation_max_sale_price) . '</ins>'; 
     } 
    } 
    return $price; 
} 

あなたのためのより便利である場合は(も何か他のもので、通常の<ins><del> htmlタグを置き換えると、あまりにもいくつかのクラスを変更したり追加することができます)。 この時点で、エブリシングが可能です。

コードは、あなたのアクティブな子テーマ(またはテーマ)のfunction.phpファイルやも任意のプラグインファイルになります。

このコードはテスト済みであり、動作します。


関連の答え:Conditional custom output around products sale price and regular price

+0

本当にうまくいきます!しかし、あるケースでは、動作しません...製品が販売されていて、製品のバリエーション(例えば、色が異なる)で利用可能な場合、これは機能しません。これにはどんな解決策がありますか? – user6573193

+1

@ user6573193両方の製品タイプ(シンプルおよびバリアブル製品)の機能テスト済みコードおよびワーキングコードを使用して私の回答を更新しました – LoicTheAztec

+0

ありがとうございました!私は答えをupvoted!私はちょっとしたバグを見つけました...商品のバリエーションが各バリエーションで同じになると、ラベルは「新価格:130-130ドル」です。これにはどのような解決策がありますか? – user6573193

0

管理者側では、販売価格と実際の価格を定義して、古い価格と新しい価格のどちらか一方が自動的に正面に反映されるようにする必要があります。

また、このためにいくつかのコードを行う必要があります。

+0

これは間違いありませんが、私は知っていますが、 "Old Price:100 Dollar" - "New Price:90 Dollar"と書かれた2つの価格のラベルが必要です "-100 Dollar-90 Dollar"の代わりに – user6573193

+0

が必要です古い価格と新しい価格の前にコードを追加する:) –

+0

私は知っている...これは私がここで尋ねる理由です...これはどのようにフィルタが必要ですか?私はこの場合テンプレートに書きたいとは思わない。 – user6573193

関連する問題