에서 사라 :사용자 정의 WooCommerce 수수료는 내가 <code>woocommerce_cart_calculate_fees</code>에서 사용자 정의 수수료를 추가 체크 아웃
add_action('woocommerce_cart_calculate_fees', 'delivery_surcharge');
function delivery_surcharge() {
global $woocommerce;
// ...
$woocommerce->cart->add_fee('Delivery fee', $fee, false, '');
}
그러나 즉시 사용자가 클릭 수수료를 제거하고 총으로 계산되지 않습니다 체크 아웃한다.
나는 수수료가 아직 woocommerce_checkout_process
는 아래의 검사를 수행하여 호출 할 때 제거되지 않았 음을 확인했습니다 나에게 체크 아웃에 오류를 준
add_action('woocommerce_checkout_process', 'checkout_validator');
function checkout_validator() {
global $woocommerce;
wc_add_notice($woocommerce->cart->get_total(), 'error');
}
사용자 정의 수수료를 포함 총을 표시합니다. 그러나 두 번째로 체크 아웃을 클릭하면 수수료가 사라지고 두 번째로 다시 호출해야합니다 (woocommerce_cart_calculate_fees
).
woocommerce_checkout_process
에 체크하면 WC_Cart::get_fees()
에 의해 반환 된 배열에 수수료도 있습니다.
편집 : 5.
관련 질문
업데이트를 참조하십시오“Woocommerce won't add my custom fee to the cart total”—Related but with no useful answer
업데이트
업데이트 1 :
: 나는 다음과 같은WC_Checkout::create_order()
에 추가
251 // Store fees
+ 252 error_log(print_r(WC()->cart->get_fees(), true));
253 foreach (WC()->cart->get_fees() as $fee_key => $fee) {
체크 아웃 처리와 주문 생성간에 요금이 제거되는 빈 배열이 출력되었습니다.
업데이트 2 : 내가 WC_Shortcode_Checkout::checkout()
에 추가하여 위와 유사한 다른 디버그 체크, 이번에 수행은 :
230 // Check cart has contents
231 if (WC()->cart->is_empty()) {
232 return;
233 }
+ 234
+ 235 error_log(print_r(WC()->cart->get_fees(), true));
236
237 // Check cart contents for errors
238 do_action('woocommerce_check_cart_items');
결과는 다시 한번 하늘의 배열이었다.
업데이트 3 : 마지막으로 일부 진행!
359 if (! defined('WOOCOMMERCE_CHECKOUT')) {
360 define('WOOCOMMERCE_CHECKOUT', true);
361 }
+ 362
+ 363 error_log(print_r(WC()->cart->get_fees(), true));
364
365 // Prevent timeout
366 @set_time_limit(0);
을 그리고 수수료는 실제로 error_log
에서 나타났다 : 나는 WC_Ajax::checkout()
에 의해 호출되는 WC_Checkout::process_checkout()
에, 다시 시간이 유사한 검사를 수행!
[12-Aug-2016 13:45:24 UTC] Array
(
[0] => stdClass Object
(
[id] => delivery-fee
[name] => Delivery fee
[amount] => 4
[tax_class] =>
[taxable] =>
[tax] => 0
[tax_data] => Array
(
)
)
)
요금이 설정되지 않은 정확한 위치를 찾을 때까지이 기능을 계속 추적 할 것입니다.
업데이트 4 : 나는 WC_Cart::calculate_totals()
이 WC_Checkout::process_checkout()
에 의해 호출 된 후 수수료 어딘가에 설정되지 않은 것을 추적 관리했습니다. 더 조사.
업데이트 5 : 나는이 문제점을 완전히 발견했다. 분명히 WC_Cart::calculate_totals()
은 WC_Cart::reset()
으로 전화를 걸어 모든 요금을 취소합니다.나는 이것이 이제까지 어떻게 작동했는지에 관해 모른다. 그러나 어떻게 든, 이전에, 요금은 WC_Cart::reset()
에 전화에서 살아 남았다. 이 시점에서 이것이 내 구현 또는 WooCommerce 자체의 버그인지 여부는 확실하지 않습니다.
참고 :'global $ woocommerce; $ Woocommerce-> cart-> add_fee ('배달 수수료', $ fee, false, '');'** WC() -> 카트'** 문법을 대신 사용할 수 있으므로 더 이상' global $ woocommerce; ... 그래서 WC() -> cart-> add_fee ('배달 수수료', $ 수수료, 허위, ') ** – LoicTheAztec