Следующий код основан не на пользовательской плате, а на настройке методов доставки. Требуется установить в настройках доставки для каждой зоны доставки:
- «Фиксированная ставка» с определенной стоимостью (
$3
для вас)
- «Бесплатная доставка» без требований (без ограничений) .
Код будет обрабатывать стоимость расчета фиксированной ставки на основе веса , а также налоговые расчеты .
Код будет работать для любой зоны доставки без необходимости определения в коде идентификаторов методов доставки.
Вот код:
add_filter( 'woocommerce_package_rates', 'filter_package_rates_callback', 10, 2 );
function filter_package_rates_callback( $rates, $package ) {
## -------- Settings -------- ##
$targeted_total = 20; // The targeted cart amount
$weight_threshold = 10; // The cart weight threshold
$extra_for_10kg = 2; // 10 Kg addition extra cost;
$total_weight = WC()->cart->get_cart_contents_weight();
$cart_subtotal = WC()->cart->get_subtotal(); // Excluding taxes
// Set shipping costs based on weight
foreach ( $rates as $rate_key => $rate ){
$has_taxes = false;
if( $cart_subtotal < $targeted_total || $total_weight >= $weight_threshold ){
// Remove Free shipping Method
if( 'free_shipping' === $rate->method_id ) {
unset( $rates[$rate_key] );
}
// Flat rate calculation cost when 10 kg weight is reached
if( 'flat_rate' === $rate->method_id && $total_weight >= $weight_threshold ) {
// The default rate cost (set in the shipping method)
$default_cost = $rate->cost;
// The new calculated cost (up to 10 kg)
$new_cost = $default_cost + $extra_for_10kg;
// Tax rate conversion (for tax calculations)
$tax_rate_converion = $new_cost / $default_cost;
// Set the new cost
$rates[$rate_key]->cost = $new_cost;
// TAXES RATE COST (if enabled)
foreach ($rates[$rate_key]->taxes as $key => $tax){
if( $tax > 0 ){
// New tax calculated cost
$taxes[$key] = $tax * $tax_rate_converion;
$has_taxes = true;
}
}
// Set new taxes cost
if( $has_taxes )
$rates[$rate_key]->taxes = $taxes;
}
} else {
// Remove Flat Rate methods (keeping Free Shipping Method only)
if( 'flat_rate' === $rate->method_id ) {
unset( $rates[$rate_key] );
}
}
}
return $rates;
}
Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Проверено и работает.
Обновите кэши доставки: (обязательно)
1) Этот код уже сохранен в вашем файле function.php.
2) В настройках зоны доставки отключите / сохраните любой способ доставки, затем включите обратно / сохранить.
Вы сделали , и вы можете проверить это.
Отображение способов доставки напрямую (Относительно вашего вопроса отредактировать)
Предоставленной информации в вашем вопросе недостаточно, чтобы увидеть, как это можно сделать.
Если вы продаете в одной стране , и у вас есть уникальная зона доставки, вы можете заставить страну для незарегистрированных клиентов отображать способы доставки, используя следующее:
add_action( 'template_redirect', 'allow_display_shipping_methods' );
function allow_display_shipping_methods() {
// HERE define the targeted country code
$country_code = 'GB';
// Set the shipping country if it doesn't exist
if( ! WC()->customer->get_shipping_country() )
WC()->customer->set_shipping_country('GB');
}
Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Проверено и работает.
Теперь это другой вопрос , в вашем первоначальном вопросе , и его следует задать как новый вопрос .
Похожие ответы: