WooCommerce 배송비 포함 세금
WooCommerce에서는 세금을 제외하고 배송비만 입력할 수 있습니다.세금을 포함해서 주어진 가격을 어떻게 만들 수 있습니까?
'세금 포함 가격'을 표시하는 설정은 제품에만 적용됩니다.
예를 들어 배송료 €1,00을 설정에 입력하면 계산대에 €1,21(0,21 = 세금)로 표시됩니다.
1,00유로(0,21세금 포함)여야 합니다(여기서 계산은 상관없습니다, 단지 예시일 뿐입니다)
이에 대한 해결책이나 기능을 가진 사람이 있다면 감사합니다.
원래 질문이 있은 지 1년 후에 저는 똑같은 문제에 부딪혔고 도움이 될 만한 것이 별로 없었습니다.
조사해본 결과, 아래 하드코드에서 세금 전용으로 발송되는 "class-wc-tax.php"에서 발송 세금 계산이 문제가 된 것으로 드러났습니다.
/**
* Calculate the shipping tax using a passed array of rates.
*
* @param float Price
* @param array Taxation Rate
* @return array
*/
public static function calc_shipping_tax( $price, $rates ) {
$taxes = self::calc_exclusive_tax( $price, $rates );
return apply_filters( 'woocommerce_calc_shipping_tax', $taxes, $price, $rates );
}
어떤 이유에서인지 woo는 다운스트림 세금 계산을 통해 배송이 세금 전용이라는 가정을 밀어붙인 것으로 드러났기 때문에 기능에 필터를 몇 개 추가해야 합니다.php는 물건을 고치기 위해서 입니다.
1) 최초로 포함된 세금을 계산한 것.
function yourname_fix_shipping_tax( $taxes, $price, $rates) {
if(wc_prices_include_tax()){
return WC_Tax::calc_inclusive_tax( $price, $rates );
}
return $taxes;
}
add_filter( 'woocommerce_calc_shipping_tax', 'yourname_fix_shipping_tax',10,3);
add_filter 끝에 있는 10,3을 잊지 않도록 주의하세요.10은 제가 디폴트로 남겨둔 우선순위입니다.3은 인수의 개수입니다.이것이 정말 필요합니다. 필터는 생략할 경우 행동 문제를 표시합니다.
2) 두 번째 필터는 다운스트림 계산에서 합계를 고정하는 것입니다.
function yourname_fix_totals( $cart) {
if(wc_prices_include_tax()){
$cart->shipping_total -= $cart->shipping_tax_total;
}
}
add_filter( 'woocommerce_calculate_totals', 'yourname_fix_totals');
이것이 우리가 말하는 진짜 돈이고 진짜 세금이라고 걱정하는 사람들을 위한 세부 사항.
첫 번째 필터는 상당히 간단합니다. 포괄적인 경우의 세금을 다시 계산하는 것뿐입니다.
두 번째 필터는 독점세 가정을 그들의 세금 계산에 더 밀어 넣는 우를 다루는 것입니다.
class-wc-cart.php'의 1396번 행에는 다음과 같은 내용이 있습니다.
// Grand Total - Discounted product prices, discounted tax, shipping cost + tax
$this->total = max( 0, apply_filters( 'woocommerce_calculated_total', round( $this->cart_contents_total + $this->tax_total + $this->shipping_tax_total + $this->shipping_total + $this->fee_total, $this->dp ), $this ) );
이것이 원하는 것은 우리가 원하지 않는 운송 총액에 운송세를 추가하는 것입니다. 그리고 그들은 그것을 하드 코딩했습니다...
우리가 할 일은 1392번 선 주변의 몇 줄 위에 있는 편리한 위치의 'wocommerce_calulate_totals' 필터()를 사용하여 위의 두 번째 필터를 사용하여 모두 합산하기 전에 배송세를 합계에서 차감하는 것입니다.
// Allow plugins to hook and alter totals before final total is calculated
do_action( 'woocommerce_calculate_totals', $this );
몇 주 전의 이 게시물의 이전 컷에서 저는 이것이 벌레 통조림이 될까 봐 걱정했습니다. 그리고 이제는 제가 물건들을 테스트할 수 있다는 것이 드러났습니다.
엄청나게 큰 동굴이네요.최종 세금 합계와 하위 합계를 철저하게 테스트하십시오. 이는 더 이상 위험하지 않습니다.우 전 수석은 세금 전용 해운을 상정하고 이를 자신들의 하류 계산으로 밀어붙였습니다.유감스럽게도 코드에 버그가 있었다 하더라도 해당 정부에 세금을 납부해야 합니다.
또한 우커머스 설정에서 전용세에서 포함세로 변경할 때는 이전 가격에 영향을 받지 않으므로 깨끗한 테스트 데이터를 사용해야 할 수도 있음을 유의해야 합니다.
지금까지 말한 것은 괜찮지만, 제 시나리오에서는 많은 양의 woo를 우회하고 있습니다. 저는 그들의 프론트 엔드 코드를 사용하지 않고 있는데, 이는 세금 전용 배송으로 인한 영향을 받는 다른 곳을 발견하지 못했을 수도 있다는 것을 의미합니다.
가능한 대안은 배송에 대한 가격을 수동으로 조정하여 VAT 전용이 되도록 하는 것입니다.즉, 20% 세금이 포함된 배송비가 6유로인 경우, 5유로로 조정합니다.이는 모든 배송지에 대해 세율이 동일한 경우에만 적용됩니다.
WooCommerce 개발자들이 언급한 것처럼 운송세 계산은 세금을 제외하는 것으로 하드코드화되어 있습니다.이를 변경하려면 먼저 를 사용하여 배송세를 조정합니다.woocommerce_calc_shipping_tax:
function calculateShippingInclusiveOfTax($taxes, $shippingPrice, $taxRates)
{
// If site-wide configuration is inclusive of taxes calculate taxes as such
if (wc_prices_include_tax()) {
return WC_Tax::calc_inclusive_tax($shippingPrice, $taxRates);
}
// Reaching this point means side-wide configuration is exclusive of tax, therefore return shipping taxes
// as such
return $taxes;
}
add_filter('woocommerce_calc_shipping_tax', 'calculateShippingInclusiveOfTax', 10, 3);
이렇게 하면 운송세가 카트에 올바르게 표시됩니다.그러나 WooCommerce는 내부적으로Shipping cost without Tax + Calculated Tax (either from inclusive price or exclusive price)배송세 총액을 산출하기 위해, 그리고 지금까지 우리는 어디에서도 세금이 없는 배송비를 변경하지 않았습니다.이것 때문에, 우리의 합계는 여전히 틀릴 것입니다.따라서 "세금 없는 배송비" 값을 변경하거나 모든 것을 합산한 후 카트 토탈에서 총 배송세를 삭제해야 합니다.보시다시피 후자가 더 쉽기 때문에 우리는 그것을 사용합니다.woocomerce_calculated_total후크:
function fixCartTotalAmountCalculationDueToMakingShippingInclusiveOfTax($total, $cart)
{
if (wc_prices_include_tax()) {
$total -= $cart->shipping_tax_total;
}
return $total;
}
add_filter('woocommerce_calculated_total', 'fixCartTotalAmountCalculationDueToMakingShippingInclusiveOfTax', 10, 2);
의 865번 라인을 참조wp-content/plugins/woocommerce/includes/class-wc-cart-totals.php자세한 정보는.
보너스: Brenton Thomas의 답변이 효과가 없는 이유에 대한 통찰력:
일단은.woocommerce_calculate_totals후크는 필터 대신 액션입니다.값을 수정하는 것은 작업의 용도가 아니며 대신 필터를 사용해야 합니다.
이 문제는 차치하고, 카트 총계는 이미 합계를 기준으로 작업이 실행되는 지점에서 계산되었다는 것입니다.Shipping cost without Tax + Calculated Tax, 그래서 정확한 수술은$cart->total - $cart->shipping_tax_total.
언급URL : https://stackoverflow.com/questions/31335937/woocommerce-shipping-price-inclusive-tax
'programing' 카테고리의 다른 글
| jQuery/JavaScript 충돌 탐지 (0) | 2023.10.20 |
|---|---|
| 화면 문제의 중앙에 AJAX ModalPopup Extender 위치 지정 (0) | 2023.10.20 |
| 프로그래밍 방식으로 워드프레스에 하위 게시물 삽입 (0) | 2023.10.20 |
| 여러 블로그 설치 간에 Wordpress Core Files를 그대로 공유하기 (0) | 2023.10.20 |
| 스크립트가 로드된 후 javascript 함수 호출 (0) | 2023.10.20 |