Я разместил этот код несколько часов назад. Мне удалось решить одну из проблем, но сейчас у меня только один вопрос. Этот код работает хорошо, но мне нужно умножить стоимость каждого отдельного товара, используя определенный класс доставки, а затем добавить ее к обычной стоимости доставки.
Пример, если у меня в корзине 5 товаров:
- 2 из них используют класс доставки-1 (дополнительная стоимость доставки составляет 70 долларов США).
- 3 из них используют класс доставки-2 (дополнительная стоимость доставки составляет 50 долларов США).
Так, если (например) обычная доставка стоит 120 долларов, то доставка должна быть (120 долларов + 290 долларов) = 410 долларов.
add_filter( 'woocommerce_package_rates', 'ph_add_extra_cost_based_on_shipping_class', 10, 2);
if( ! function_exists('ph_add_extra_cost_based_on_shipping_class') ) {
function ph_add_extra_cost_based_on_shipping_class( $shipping_rates, $package ){
$handling_fee_based_on_shipping_class = array(
array(
'shipping_classes' => array( 'shipping-class-1'), // Shipping Class slug array
'adjustment' => 70, // Adjustment
),
array(
'shipping_classes' => array( 'shipping-class-2' ),
'adjustment' => 50,
),
);
$shipping_method_ids = array( 'cologistics-shipping' ); // Shipping methods on which adjustment has to be applied
$adjustment = null;
foreach( $package['contents'] as $line_item ) {
$line_item_shipping_class = $line_item['data']->get_shipping_class();
if( ! empty($line_item_shipping_class) ) {
foreach( $handling_fee_based_on_shipping_class as $adjustment_data ) {
if( in_array( $line_item_shipping_class, $adjustment_data['shipping_classes']) ) {
$adjustment = ( $adjustment_data['adjustment'] > $adjustment ) ? $adjustment_data['adjustment'] : $adjustment;
}
}
}
}
if( ! empty($adjustment) ) {
foreach( $shipping_rates as $shipping_rate ) {
$shipping_method_id = $shipping_rate->get_method_id();
if( in_array($shipping_method_id, $shipping_method_ids) ) {
$shipping_rate->set_cost( (float) $shipping_rate->get_cost() + $adjustment );
}
}
}
return $shipping_rates;
}
}
Я буду очень признателен за вашу помощь.
Заранее спасибо!