(Обновление): НАЛОГОВЫЕ ВАРИАНТЫ с метод add_fee ()
ВАЖНО: тот факт, что TAX работает или нет с add_fee()
метод зависит от ваших налоговых настроек в woocommerce. Поскольку вы не сообщили в своем вопросе каковы ваши настройки НАЛОГОВ, вам невозможно помочь (настройки налогов могут быть гораздо более разными для каждой электронной коммерции. веб-сайт).
Например, если вы хотите использовать класс налога с нулевой ставкой, но не определили правильный класс налога с нулевой ставкой для страны клиента, это не сработает, если вы попытаетесь его использовать. с:
WC()->cart->add_fee( 'Fees: ', $fee, true, 'zero rate' );
a >… в зависимости от ваших глобальных налоговых настроек.
Вот снимок экрана с РЕАЛЬНОЙ суммой кассовых сборов для 3 товаров в корзине (с использованием кода ниже):
Метод add_fee () класса WC_Cart добавляет дополнительную плату в корзину.
add_fee( string $name, float $amount, boolean $taxable = false, string $tax_class = '' )
Parameters:
$name Unique name for the fee. Multiple fees of the same name cannot be added.
$amount Fee amount.
$taxable (default: false) Is the fee taxable?
$tax_class (default: '') The tax class for the fee if taxable. A blank string is standard tax class.
Исходный ответ (обновленный код):
Ваша основная проблема заключается в этой строке: global $woocommerce, $bookable_total = 0;
- Поскольку вы используете синтаксис
WC()->cart
вместо синтаксиса $woocommerce->cart
, вам действительно не нужен global $woocommerce;
.
- Если вы используете
global $bookable_total = 0;
, этот $bookable_total
будет всегда = 0
.
Вместо этого вы будете использовать global $bookable_total;
без значения, чтобы получить значение, определенное вне вашей функции.
Но если вы хотите установить нулевое значение, если оно не определено вне вашей функции, вы сделаете это следующим образом: woo_add_cart_fee( $bookable_total=0 )
Теперь мы можем определить $bookable_total
значение переменной вне функции.
Это рабочий пример вашего кода:
// This variable value is passed to our function
$bookable_total = 1;
function woo_add_cart_fee( $bookable_total = 0 ) {
global $bookable_total;
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// just for this example
$item_count = 0;
$item_fee = 5;
// going through each cart items
foreach( WC()->cart->get_cart() as $values ) {
$item = $values['data'];
if ( empty( $item ) )
break;
// getting the cart item_id
$item_id = $item->id;
$item_count++;
// your calculations
}
// We test $bookable_total value, defined to '1' outside our function
// and to 'O' if not defined outside (in this case the fee will be '0')
$fee = $item_count * $bookable_total * $item_fee;
// add_fee method (TAX will NOT be applied here)
WC()->cart->add_fee( 'Fees: ', $fee, false );
}
add_action( 'woocommerce_cart_calculate_fees','woo_add_cart_fee' );
Этот код протестирован, и он работает. Он находится в файле function.php вашей активной дочерней темы или темы.
Если переменная $bookable_total
не определена за пределами, значение будет 0
.
Примечание. Лучше получать идентификаторы $ items с помощью: $item = $values['data']; $item_id = $item->id;
Ссылка:
Класс WC_Cart - < strong> add_fee( $name, $amount, $taxable = false, $tax_class = '' )
метод
person
LoicTheAztec
schedule
11.08.2016