[WORDPRESS] WooCommerce 장바구니 항목 수량 가격 계산을 비활성화하십시오
WORDPRESSWooCommerce 장바구니 항목 수량 가격 계산을 비활성화하십시오
해결법
-
1.예, 수량 품목 가격 계산을 비활성화 할 수 있지만 매우 복잡합니다 ...
예, 수량 품목 가격 계산을 비활성화 할 수 있지만 매우 복잡합니다 ...
코드:
// Custom line item Total/Subtotal price display add_filter( 'woocommerce_cart_product_subtotal', 'custom_cart_subtotal', 10, 4 ); function custom_cart_subtotal( $product_subtotal, $product, $quantity, $wc_cart ) { $price = $product->get_price(); $taxable = $product->is_taxable(); $quantity = 1; // HERE We set the quantity to 1 (So the price is calculated on a quantitity of 1) // Taxable if ( $taxable ) { if ( 'excl' === $wc_cart->tax_display_cart ) { $row_price = wc_get_price_excluding_tax( $product, array( 'qty' => $quantity ) ); $product_subtotal = wc_price( $row_price ); if ( $wc_cart->prices_include_tax && $wc_cart->tax_total > 0 ) { $product_subtotal .= ' <small class="tax_label">' . WC()->countries->ex_tax_or_vat() . '</small>'; } } else { $row_price = wc_get_price_including_tax( $product, array( 'qty' => $quantity ) ); $product_subtotal = wc_price( $row_price ); if ( ! $wc_cart->prices_include_tax && $wc_cart->tax_total > 0 ) { $product_subtotal .= ' <small class="tax_label">' . WC()->countries->inc_tax_or_vat() . '</small>'; } } } // Non-taxable else { $row_price = $price * $quantity; $product_subtotal = wc_price( $row_price ); } return $product_subtotal; } // Custom cart subtotal and totals (Prices calculated on quatity = 1) add_action( 'woocommerce_calculate_totals', 'custom_item_price', 10, 1); function custom_item_price( $wc_cart ) { if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return; $cart_contents_total = 0; foreach ( $wc_cart->get_cart() as $cart_item_key => $cart_item ) $cart_contents_total += floatval( strip_tags( $wc_cart->get_product_subtotal( $cart_item['data'], 1 ) ) ); $wc_cart->subtotal = $cart_contents_total; $wc_cart->subtotal_ex_tax = $cart_contents_total; $wc_cart->cart_contents_total = $cart_contents_total; } // Custom cart subtotal and totals (Prices calculated on quatity = 1) add_action( 'woocommerce_cart_get_taxes', 'custom_cart_get_taxes', 10, 2); function custom_cart_get_taxes( $taxes, $wc_cart ) { if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return; $taxes = $subtotal_taxes = array(); foreach ( $wc_cart->get_cart() as $cart_item_key => $cart_item ){ foreach( $cart_item['line_tax_data']['subtotal'] as $key => $tax_price ){ if( $tax_price > 0 ){ if( array_key_exists($key, $subtotal_taxes)) $subtotal_taxes[$key] += number_format( $tax_price / $cart_item['quantity'], 2 ); else $subtotal_taxes[$key] = number_format( $tax_price / $cart_item['quantity'], 2 ); } else { if( array_key_exists($key, $subtotal_taxes)) $subtotal_taxes[$key] += $tax_price; else $subtotal_taxes[$key] = $tax_price; } } } foreach ( array_keys( $subtotal_taxes + $wc_cart->get_shipping_taxes() ) as $key ) { $taxes[ $key ] = ( isset( $wc_cart->get_shipping_taxes()[ $key ] ) ? $wc_cart->get_shipping_taxes()[ $key ] : 0 ) + ( isset( $subtotal_taxes[ $key ] ) ? $subtotal_taxes[ $key ] : 0 ); } return $taxes; } // Custom line item Total/Subtotal set order prices (Prices calculated on quatity = 1) add_action( 'woocommerce_checkout_create_order_line_item', 'custom_checkout_create_order_line_item', 10, 4 ); function custom_checkout_create_order_line_item( $item, $cart_item_key, $values, $order ){ $line_tax_data = array(); foreach( $values['line_tax_data'] as $key_line => $tax ){ foreach( $tax as $key => $tax_price ){ if( $tax_price > 0 ) $line_tax_data[$key_line] = array( $key => number_format( $tax_price / $values['quantity'], 2 ) ); else $line_tax_data[$key_line] = array( $key => $tax_price ); } } $item->set_props( array( 'quantity' => $values['quantity'], 'variation' => $values['variation'], 'subtotal' => number_format( $values['line_subtotal'] / $values['quantity'], 2 ), 'total' => number_format( $values['line_total'] / $values['quantity'], 2 ), 'subtotal_tax' => number_format( $values['line_subtotal_tax'] / $values['quantity'], 2 ), 'total_tax' => number_format( $values['line_tax'] / $values['quantity'], 2 ), 'taxes' => $line_tax_data, ) ); } // Get the correct Cart gran total amount add_filter( 'woocommerce_calculated_total', 'custom_calculated_total', 10, 2 ); function custom_calculated_total( $price_total, $wc_cart ){ $tax_total = 0; $taxes_arr = $wc_cart->get_taxes(); foreach($taxes_arr as $tax) $tax_total += $tax; return round( $wc_cart->cart_contents_total + $tax_total + $wc_cart->shipping_total + $wc_cart->fee_total, $wc_cart->dp ); } // Replacing the total tax amount add_action( 'woocommerce_checkout_create_order', 'custom_set_order_tax_total', 10, 1 ); function custom_set_order_tax_total( $order ) { $subtotal_taxes = 0; foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ){ foreach( $cart_item['line_tax_data']['subtotal'] as $key => $tax_price ){ if( $tax_price > 0 ){ $subtotal_taxes += number_format( $tax_price / $cart_item['quantity'], 2 ); } else { $subtotal_taxes += $tax_price; } } } $order->set_cart_tax( $subtotal_taxes ); } // Update order line item tax total add_action( 'woocommerce_checkout_update_order_meta', 'custom_update_order_item_tax_total', 10, 1 ); function custom_update_order_item_tax_total( $order_id ) { global $wpdb; $query = $wpdb->get_results( " SELECT woim.meta_id, woim.order_item_id as item_id, woi.order_item_type as type, woim.meta_key as akey, woim.meta_value as value FROM {$wpdb->prefix}woocommerce_order_items AS woi INNER JOIN {$wpdb->prefix}woocommerce_order_itemmeta AS woim ON woi.order_item_id = woim.order_item_id WHERE woi.order_id = $order_id AND woim.meta_key IN ( 'tax_amount', '_line_tax_data', 'rate_id' ) " ); $taxes = $items = array(); foreach( $query as $result){ if( $result->type == 'line_item' ){ $result_taxes = maybe_unserialize( $result->value ); foreach( $result_taxes['subtotal'] as $tax_id => $tax_price ) $taxes[$tax_id] = $tax_price; } elseif( $result->type == 'tax' && $result->akey == 'rate_id' ) { $items[$result->item_id] = array( 'price' => $taxes[$result->value], 'rate_id' => $result->value ); } else { $items[$result->item_id]['meta_id'] = $result->meta_id; } } foreach($items as $item_id => $values){ wc_update_order_item_meta( $item_id, 'tax_amount', $values['price'] ); } }
코드는 활성 자식 테마 (또는 테마)의 function.php 파일 또는 모든 플러그인 파일에서 계속됩니다.
Woocommerce 3+ 및 작동 (세금 포함 또는 세금 포함)을 테스트했습니다.
from https://stackoverflow.com/questions/46822974/disable-woocommerce-cart-line-item-quantity-price-calculation by cc-by-sa and MIT license
'WORDPRESS' 카테고리의 다른 글
[WORDPRESS] 날짜별로 파일 목록을 정렬하십시오 (0) | 2020.11.22 |
---|---|
[WORDPRESS] WordPress를 사용하여 YouTube에 비디오 업로드를 업로드합니다 (0) | 2020.11.22 |
[WORDPRESS] 다중 레벨 카테고리 또는 메뉴 목록에서 항목 삭제 (0) | 2020.11.22 |
[WORDPRESS] WooCommerce - admin이 수신자 또는 주문 상태에 의해서만 BCC 전자 메일 만 (0) | 2020.11.22 |
[WORDPRESS] WordPress에서 동일한 부모가있는 게시물에 대한 다음 / 이전 링크 (0) | 2020.11.22 |