Получение и отображение налоговой ставки на страницах с одним продуктом Woocommerce

Я пытаюсь найти способ, как я могу отображать только налоговую ставку (16% или 7%), которая есть у продукта. В основном идея в том, что должен быть статический налог вроде.

Цена включает налоги 16%

или же

Цена включает налоги 7%

Таким образом, процентная ставка должна быть динамической в ​​зависимости от того, какой рейтинг имеет продукт.

Есть идеи, как это решить. Все найденные мной решения отображают полную сумму налога, а мне нужна только ставка.

2 ответа

Решение

Налоги зависят от ваших настроек, которые относятся к одному или нескольким налоговым классам и для каждого налогового класса в местоположении клиента. Ниже вы найдете правильный способ получить и отобразить налоговую ставку для продукта (как она установлена ​​в WooCommerce):

// Get the WC_Product Object
global $product;

if( ! is_a( $product, 'WC_Product' ) ) {
    $product = wc_get_product( get_the_id() );
}

// Get an instance of the WC_Tax object
$tax_obj = new WC_Tax();

// Get the tax data from customer location and product tax class
$tax_rates_data = $tax_obj->find_rates( array(
    'country'   => WC()->customer->get_shipping_country() ? WC()->customer->get_shipping_country() : WC()->customer->get_billing_country(),
    'state'     => WC()->customer->get_shipping_state() ? WC()->customer->get_shipping_state() : WC()->customer->get_billing_state(),
    'city'      => WC()->customer->get_shipping_city() ? WC()->customer->get_shipping_city() : WC()->customer->get_billing_city(),
    'postcode'  => WC()->customer->get_shipping_city() ? WC()->customer->get_shipping_city() : WC()->customer->get_billing_city(),
    'tax_class' => $product->get_tax_class()
) );

// Finally we get the tax rate (percentage number) and display it:
if( ! empty($tax_rates_data) ) {
    $tax_rate = reset($tax_rates_data)['rate'];

    // The display
    printf( '<span class="tax-rate">' . __("The price includes %s Taxes", "woocommerce") . '</span>',  $tax_rate . '%' );
}

Проверено и работает. Вы можете встроить этот код в функцию, которую сможете использовать повторно.


Пример использования:

Чтобы отобразить ставку налога на отдельные продукты ниже цены (с помощью функции с подключением):

add_action( 'woocommerce_single_product_summary', 'display_tax_rate_on_single_product', 15 );
function display_tax_rate_on_single_product() {
    global $product; // The current WC_Product Object instance

    // Get an instance of the WC_Tax object
    $tax_obj = new WC_Tax();
    
    // Get the tax data from customer location and product tax class
    $tax_rates_data = $tax_obj->find_rates( array(
        'country'   => WC()->customer->get_shipping_country() ? WC()->customer->get_shipping_country() : WC()->customer->get_billing_country(),
        'state'     => WC()->customer->get_shipping_state() ? WC()->customer->get_shipping_state() : WC()->customer->get_billing_state(),
        'city'      => WC()->customer->get_shipping_city() ? WC()->customer->get_shipping_city() : WC()->customer->get_billing_city(),
        'postcode'  => WC()->customer->get_shipping_city() ? WC()->customer->get_shipping_city() : WC()->customer->get_billing_city(),
        'tax_class' => $product->get_tax_class()
    ) );
    
    // Finally we get the tax rate (percentage number) and display it:
    if( ! empty($tax_rates_data) ) {
        $tax_rate = reset($tax_rates_data)['rate'];
    
        // The display
        printf( '<span class="tax-rate">' . __("The price includes %s Taxes", "woocommerce") . '</span>',  $tax_rate . '%' );
    }
}

Код находится в файле functions.php вашей активной дочерней темы (или активной темы). Проверено и работает.

Связанный: Получите налоговую ставку отдельно для каждой корзины и заказывайте товары в Woocommerce

Пример использования:

Чтобы отобразить ставку налога на отдельные продукты ниже цены (с помощью функции с подключением):

add_action ('woocommerce_single_product_summary','display_tax_rate_on_single_product', 15); функция display_tax_rate_on_single_product() {global $ product; // Текущий экземпляр объекта WC_Product

       // Get an instance of the WC_Tax object
$tax_obj = new WC_Tax();

// Get the tax data from customer location and product tax class
$tax_rates_data = $tax_obj->find_rates( array(
    'country'   => WC()->customer->get_shipping_country() ? WC()->customer->get_shipping_country() :

WC () -> customer-> get_billing_country(),'state' => WC () -> customer-> get_shipping_state ()? WC () -> customer-> get_shipping_state ():WC () -> customer-> get_billing_state (), 'city' => WC () -> customer-> get_shipping_city ()? WC () -> customer-> get_shipping_city ():WC () -> customer-> get_billing_city(),'почтовый индекс' => WC () -> customer-> get_shipping_city ()? WC () -> customer-> get_shipping_city ():WC () -> customer-> get_billing_city(),'tax_class' => $ product-> get_tax_class ()));

       // Finally we get the tax rate (percentage number) and display it:
if( ! empty($tax_rates_data) ) {
    $tax_rate = reset($tax_rates_data)['rate'];

    // The display
    printf( '<span class="tax-rate">' . __("The price includes %s Taxes", "woocommerce") . '</span>',  $tax_rate . '%' );
} }

Код находится в файле functions.php вашей активной дочерней темы (или активной темы). Проверено и работает.

Связанный: Получите налоговую ставку отдельно для каждой корзины и заказывайте товары в Woocommerce

в общем я тоже решил эту проблему

Другие вопросы по тегам