2017-12-13 5 views
0

wc_priceフィルタのユーザビリティに関して疑問があります。私はコードを見て[https://docs.woocommerce.com/wc-apidocs/source-function-wc_price.html#489]私はwc_priceフィルタを見つけることができます。Woocommerce wc_priceフィルタの使用

function wc_price($price, $args = array()) { 
    extract(apply_filters('wc_price_args', wp_parse_args($args, array(
     'ex_tax_label'  => false, 
     'currency'   => '', 
     'decimal_separator' => wc_get_price_decimal_separator(), 
     'thousand_separator' => wc_get_price_thousand_separator(), 
     'decimals'   => wc_get_price_decimals(), 
     'price_format'  => get_woocommerce_price_format(), 
    )))); 

    $negative  = $price < 0; 
    $price   = apply_filters('raw_woocommerce_price', floatval($negative ? $price * -1 : $price)); 
    $price   = apply_filters('formatted_woocommerce_price', number_format($price, $decimals, $decimal_separator, $thousand_separator), $price, $decimals, $decimal_separator, $thousand_separator); 

    if (apply_filters('woocommerce_price_trim_zeros', false) && $decimals > 0) { 
     $price = wc_trim_zeros($price); 
    } 

    $formatted_price = ($negative ? '-' : '') . sprintf($price_format, '<span class="woocommerce-Price-currencySymbol">' . get_woocommerce_currency_symbol($currency) . '</span>', $price); 
    $return   = '<span class="woocommerce-Price-amount amount">' . $formatted_price . '</span>'; 

    if ($ex_tax_label && wc_tax_enabled()) { 
     $return .= ' <small class="woocommerce-Price-taxLabel tax_label">' . WC()->countries->ex_tax_or_vat() . '</small>'; 
    } 

    return apply_filters('wc_price', $return, $price, $args); 
} 

これは、このフィルタが製品価格の変更に使用されることを意味します。

これでコードでフロントエンドの価格を2倍にしたいと考えています。したがって、次の関数をiwriteしてください

add_filter('wc_price', 'double_price', 10, 3); 

function double_price($return, $price, $args){ 
    $price=$price*2; 
    return $price; 

} 

価格は通貨記号なしでフロントエンドで表示されています。

その後、私は今、それが働いている。この

function double_price($return, $price, $args){ 
    $price=$price*2; 
    return '<span class="woocommerce-Price-amount amount"><span class="woocommerce-Price-currencySymbol">£</span>'.$price.'</span>'; 

} 

のようにそれを書き換えます。

しかし、私はこれが正しい方法だとは思わない。 誰かがこの機能を正しく使う方法を説明することはできますか?。このフィルタで$args,$price,$retunを使用するとどうなりますか?

また、カテゴリに基づいてすべての製品価格を変更する必要がある場合、このフィルタ内にどのように製品IDを取得できますか?私は、製品IDを書くならば、私は

function double_price($return, $price, $args){ 
    $price=$price*2; 
    if(has_term('shirts', 'product_cat' ,$product->ID)) { 
     $price=130; 
    } 

    return '<span class="woocommerce-Price-amount amount"><span class="woocommerce-Price-currencySymbol">£</span>'.$price.'</span>'; 

} 

を書きますのでご注意ください:この質問はフックwc_price、フォーマット価格フックで After using woocommerce_product_get_price hook the checkout page price is incorrect

答えて

1

サブ疑問を持っている...あなたは代わりにwoocommerce_product_get_priceを使用する必要がありますフィルターフック:

add_filter('woocommerce_product_get_price', 'double_price', 10, 2); 
function double_price($price, $product){ 
    return $price*2; 
} 

テスト済みと作業中

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

このフックは、任意のフォーマットの価格関数の前に解雇され、それがここWC_Productオブジェクト型に適用get_price()法に基づく複合フックです。

+0

が、なぜwoocommerce_product_get_priceはこの https://docs.woocommerce.com/wc-apidocs/class-WC_Deprecated_Filter_Hooks.html – Harry

+0

の下に来ている。しかし、このコードを使用してエラーがあります。チェックアウトページの価格が正しくありません。 たとえば、製品のオリジナル価格は10です。このコードによって価格が倍増します。製品価格は現在20です。この商品をカートに入れたら、カートとチェックアウトページの価格は40です。つまり、この乗算は2回に起こります。 – Harry

+0

https://stackoverflow.com/questions/47788254/after-using-woocommerce-product-get-price-hook-the-checkout-page-price-is-incorr – Harry

関連する問題