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
が、なぜwoocommerce_product_get_priceはこの https://docs.woocommerce.com/wc-apidocs/class-WC_Deprecated_Filter_Hooks.html – Harry
の下に来ている。しかし、このコードを使用してエラーがあります。チェックアウトページの価格が正しくありません。 たとえば、製品のオリジナル価格は10です。このコードによって価格が倍増します。製品価格は現在20です。この商品をカートに入れたら、カートとチェックアウトページの価格は40です。つまり、この乗算は2回に起こります。 – Harry
https://stackoverflow.com/questions/47788254/after-using-woocommerce-product-get-price-hook-the-checkout-page-price-is-incorr – Harry