私はこの自分自身を固定してしまっを使用してみてください。私はPaul de Koningの答えを試しました。 apply_filtersに変更すると、価格は$ 0になりました。私はこれが彼らが入るために必要な注文のためだと思う。
ここに私の解決策があった。根本的な原因は、私がカートの変更価格を提供するためにchange price_html関数を使用していたことでした。その機能の中には、add_action呼び出しなどがありました。どういうわけか、注文の問題があったに違いありません。これは、すべての領域が正しく行われていることを確認するための多段階のプロセスです。
使用すると、表示価格を変更し、価格を隠しながら、カートのため、変更の価格を格納するためのセッションを使用せずに、woocommerceの価格を変更したい場合は、以下のようなものを実行します。
のfunctions.php
add_action('woocommerce_get_price_html','special_price');
function special_price($price) {
//put any if statements for hiding the cart button and discounting pricing below and return true or false
$displayprice = true;
$alterprice = true;
if($displayprice === true) {
add_action('woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10, 2);
add_action('init', 'woocommerce_add_to_cart_action', 10);
add_action('init', 'woocommerce_checkout_action', 10);
} else {
remove_action('woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10, 2);
remove_action('woocommerce_before_add_to_cart_form', 'woocommerce_template_single_product_add_to_cart', 10, 2); //
remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_price', 10);
remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30);
//return blank or something like 'Signup to view price'
return '';
}
//if you are displaying the price (altered)
if($displayprice === true && $alterprice === true){
$price = price_manipulator($theid);
return $price;
//display add to cart and price
}
//if you are displaying the price (unaltered)
return $price
}
function price_manipulator($theid = '') {
if(empty($theid)){
$theid = get_the_ID();
}
$product = wc_get_product($theid);
//30% off example
$newprice = floatval($product->price * (1-0.3));
return $newprice;
}
/*version of pricing if you are adding something to cart*/
function special_price_cart($theid){
$price = price_manipulator($theid);
return $price;
}
add_action('woocommerce_before_calculate_totals', 'woo_add_discount');
add_action('woocommerce_before_mini_cart', 'woo_add_discount'); //this is if you are using the mini-cart woocommerce widget
function woo_add_discount() {
global $woocommerce;
//create if statements same as if you were displaying the price
$displayprice = true;
if($displayprice === true){
foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) {
$price = special_price_cart($cart_item['data']->id);
$price = str_replace('$','',$price);
$price = str_replace(',','',$price);
if($price > 0){
$cart_item['data']->price = floatval($price);
}
}
}
}