また、製品のカスタムフィールドに基づいてWooCommerceMinicartのアイテム価格を変更します
Aug 24 2020
基づいて、顧客が製品価格(ギフトカード)を設定し、合計がWooCommerceで最小100の場合は、カートに追加することを許可する私の最初の質問に答える、 -私はWooCommerceのminicartに関する一つの小さな問題が残っています。
商品の価格は、顧客がギフトカードフィールドを使用して送信した内容に応じて更新されません。だから私は2つの異なる解決策を持っていますが、どちらも失敗します。
これは私が試したものです:
add_filter('woocommerce_widget_cart_item_quantity', 'custom_wc_widget_cart_item_quantity', 10, 3 );
function custom_wc_widget_cart_item_quantity( $cart, $cart_item, $cart_item_key ) { foreach ( $cart->get_cart() as $cart_item ) { if ( isset ( $cart_item['giftcard_product_price'] ) ) {
$cart_item['data']->set_price( $cart_item['giftcard_product_price'] );
return sprintf( '<span class="quantity">%s × <span class="woocommerce-Price-amount amount">%s <span class="woocommerce-Price-currencySymbol">%s</span></span></span>', $cart_item['quantity'], $cart_item['giftcard_product_price'] );
}
}
}
それは機能しません:ミニカートは空白になります。それから私も試しました:
add_filter('woocommerce_cart_item_price','modify_cart_product_price',10,3);
function modify_cart_product_price( $price, $cart_item, $cart_item_key){ $price = $cart_item['data']->set_price($cart_item['giftcard_product_price']);
return $price;
}
私が得ることができるどんな助けもありがたいです。
回答
LoicTheAztec Aug 24 2020 at 05:10
使用する正しいフックはwoocommerce_cart_item_price
次のとおりです。
add_filter( 'woocommerce_cart_item_price', 'giftcard_cart_item_price', 10, 3 );
function giftcard_cart_item_price( $price_html, $cart_item, $cart_item_key ) { $giftcard_key = 'giftcard_product_price';
if( isset( $cart_item[$giftcard_key] ) ) {
$args = array( 'price' => floatval( $cart_item[$giftcard_key] ) ); if ( WC()->cart->display_prices_including_tax() ) { $product_price = wc_get_price_including_tax( $cart_item['data'], $args );
} else {
$product_price = wc_get_price_excluding_tax( $cart_item['data'], $args ); } return wc_price( $product_price );
}
return $price_html;
}
これで、カスタム価格がミニカートに正しく表示されます...
1 SerhiiKorneliuk Dec 05 2020 at 04:39
可変製品のバスケット内の無料価格の完全なバリアント。
/**
* Initialize Session cart
*/
add_action('init', 'init_cart_session', 1);
function init_cart_session() {
if (!session_id()) {
session_start();
}
if (!isset($_SESSION['cart'])) { $_SESSION['cart'] = [];
}
}
/**
* Custom size correct
*/
add_action('woocommerce_before_calculate_totals', 'woo_size_correct', 10, 6);
function woo_size_correct() {
global $woocommerce; if (isset($_POST['attribute_pa_size']) && $_POST['attribute_pa_size'] == 'custom') { $_SESSION['cart'][$_POST['variation_id']] = $_POST['custom'];
}
foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) {
if (array_key_exists($cart_item['data']->variation_id, $_SESSION['cart'])) {
$cart_item['data']->set_price($_SESSION['cart'][$cart_item['data']->variation_id]); } } } add_filter('woocommerce_cart_item_price', 'woo_size_mini_cart_correct', 10, 6); function woo_size_mini_cart_correct($price_html, $cart_item, $cart_item_key) {
global $woocommerce; if (array_key_exists($cart_item['data']->variation_id, $_SESSION['cart'])) { $args = array('price' => floatval($_SESSION['cart'][$cart_item['data']->variation_id]));
if (WC()->cart->display_prices_including_tax()) {
$product_price = wc_get_price_including_tax($cart_item['data'], $args); } else { $product_price = wc_get_price_excluding_tax($cart_item['data'], $args);
}
return wc_price($product_price); } return $price_html;
}