Удалите дублированные пакеты доставки, используя класс доставки в Woocommerce
Продукты на моем веб-сайте обрабатываются одним из этих двух плагинов для доставки: Printful Integration для WooCommerce и Printify для WooCommerce Shipping. когда есть смешанные элементы из каждого плагина доставки. Эти плагины разделяют каждый пакет доставки на две части, когда есть смешанные элементы (что является конфликтом и проблемой).
Поэтому я добавил класс доставки 'printful'
(какой идентификатор 548
) к продуктам, которые обрабатываются плагином Printful и пытались настроить метод Спрятать доставку для определенных классов доставки в коде ответа woocommerce с помощью @LoicTheAzec (приветствия), чтобы удалить метод доставки только из определенных дублированных пакетов доставки с идентификаторами 2 и 3 из-за конфликта между плагинами доставки…
Вот мой фактический код:
add_filter( 'woocommerce_package_rates', 'hide_shipping_method_based_on_shipping_class', 10, 2 );
function hide_shipping_method_based_on_shipping_class( $rates, $package )
{
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// HERE define your shipping class to find
$class = 548; //CAMDEN HARBOR CHART MUG is in shipping class
// HERE define the shipping methods you want to hide
$method_key_ids = array('printify_shipping_s', 'printify_shipping_e');
// Checking in cart items
foreach( WC()->cart->get_cart() as $cart_item ){
// If we find the shipping class
if( $cart_item['data']->get_shipping_class_id() == $class ){
foreach( $method_key_ids as $method_key_id ){
unset($rates[$method_key_id]); // Remove the targeted methods
}
break; // Stop the loop
}
}
return $rates;
}
Но это не работает, и я все еще получаю 4 пакета доставки вместо двух:
Любая помощь приветствуется.
1 ответ
Проблема здесь связана с конфликтом разделения пакетов между двумя вашими плагинами доставки, когда смешанные товары находятся в корзине. В этом случае каждый плагин разделяет пакет доставки, который добавляет 4 пакета вместо 2.
Эти плагины используют woocommerce_cart_shipping_packages
разделить пакеты доставки с неизвестным приоритетом (so I will set a very high priority)
,
Следующий код будет хранить первые 2 сплит-пакета в корзине (и также оформить заказ):
add_filter( 'woocommerce_cart_shipping_packages', 'remove_split_packages_based_on_items_shipping_class', 100000, 1 );
function remove_split_packages_based_on_items_shipping_class( $packages ) {
$has_printful = $has_printify = false; // Initializing
// Lopp through cart items
foreach( WC()->cart->get_cart() as $item ){
// Check items for shipping class "printful"
if( $item['data']->get_shipping_class() === 'printful' ){
$has_printful = true;
} else {
$has_printify = true;
}
}
// When cart items are mixed (using both shipping plugins)
if( $has_printful && $has_printify ){
// Loop through split shipping packages
foreach( $packages as $key => $package ) {
// Keeping only the 2 first split shipping packages
if( $key >= 2 ){
// Removing other split shipping packages
unset($packages[$key]);
}
}
}
return $packages;
}
Код помещается в файл function.php вашей активной дочерней темы (active theme). Он должен работать и отображать только две упаковки, когда элементы корзины смешаны.