Стоимость доставки зависит от количества товара на woocommerce
Я хочу установить количество стоимости доставки на мою тему woocommerce. Я хочу сделать эту опцию:
От 1 до 5 товаров стоимость доставки составит 15%. Стоимость взбивания более 5 продуктов составит $6,99 .
Могу ли я добавить этот вариант доставки без плагина?
1 ответ
Вам нужно подключить функцию к woocommerce_calculate_totals
действие, которое запускается непосредственно перед вычислением итоговой суммы корзины. woocommerce_calculate_totals
действие обеспечивает WC_Cart
экземпляр, на котором вы можете выполнять манипуляции согласно вашему требованию.
add_action('woocommerce_calculate_totals', 'modify_shipping_totals');
function modify_shipping_totals($cart) {
if($cart->get_cart_contents_count() < 6) {
$cart->shipping_total = ( 15/100 ) * $this->cart_contents_total;
// shipping cost will be 15% of cart content total
// you may also want to modify the shipping tax.
$cart->shipping_tax_total = 0;
} else {
$cart->shipping_total = 6.99;
$cart->shipping_tax_total = 0;
}
}
Для получения дополнительной информации о сменных переменных см. Документацию WC_Cart.
// **Note**: This code is working only when you set Flat rate Settings
// cost value is 1
add_filter( 'woocommerce_package_rates', 'custom_package_rates', 10, 2 );
function custom_package_rates( $rates, $packages ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;
$cart_count = WC()->cart->get_cart_contents_count();
$cart_total = WC()->cart->cart_contents_total;
foreach($rates as $rate_key => $rate_values ) {
$method_id = $rate_values->method_id;
$rate_id = $rate_values->id;
if( $method_id == 'flat_rate' ){
if( $cart_count < 99 ){
$flat_rate_value = 4.95; //"Applay Flat rate less then 99 quatity"
$cart_10_percent = 0; // No percent discount
}
if( $cart_count > 99 ){
$flat_rate_value = 9.95; // "Applay Flat rate greater then 99 quatity"
$cart_10_percent = 0; // No percent discount
}
$rate_cost = $flat_rate_value > $cart_10_percent ? $flat_rate_value - $cart_10_percent : 0;
// Set the new calculated rate cost
$rates[$rate_id]->cost = number_format( $rates[$rate_id]->cost * $rate_cost, 2 );
}
}
return $rates;
}
Решение Pranav работает, если вы вызываете add_action внутри хука инициализации, например:
function init_shop(){
add_action('woocommerce_calculate_totals', 'modify_shipping_totals', 10);
}
add_action( 'init', 'init_shop');
Плагин ShippingPro от WooForce может удовлетворить ваши требования.
Но вам может потребоваться оплатить премиум-версию.
Вы можете сослаться на их Live Demo перед покупкой.