Ocultar el método de envío para clases de envío específicas en woocommerce

Básicamente, estoy tratando de hacer que el método de tasa fija Id flat_rate:7 deshabilite cuando hay elementos de carrito que tienen la clase de envío “Roller” (ID 92 ).

Este es el código que probé:

 add_filter('woocommerce_package_rates', 'wf_hide_shipping_method_based_on_shipping_class', 10, 2); function wf_hide_shipping_method_based_on_shipping_class($available_shipping_methods, $package) { $hide_when_shipping_class_exist = array( 92 => array( 'flat_rate:7' ) ); $shipping_class_in_cart = array(); foreach(WC()->cart->cart_contents as $key => $values) { $shipping_class_in_cart[] = $values['data']->get_shipping_class_id(); } foreach($hide_when_shipping_class_exist as $class_id => $methods) { if(in_array($class_id, $shipping_class_in_cart)){ foreach($methods as & $current_method) { unset($available_shipping_methods[$current_method]); } } } return $available_shipping_methods; } 

La clase de envío ID 92 es la clase de envío y quiero ocultar flat_rate:7 por ella.

Mi sitio es este: http://www.minimoto.me/ WordPress: 4.8.4 WooCommerce: 3.1.1

Cualquier ayuda será apreciada.

En su lugar, debe intentar esta forma más corta, compacta y efectiva:

 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 = 92; // HERE define the shipping method to hide $method_key_id = 'flat_rate:7'; // 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 ){ unset($rates[$method_key_id]); // Remove the targeted method break; // Stop the loop } } return $rates; } 

El código va en el archivo function.php de su tema hijo activo (o tema) o también en cualquier archivo de complemento.

Probado y funciona.

En ocasiones, es posible que debas actualizar los métodos de envío para ir a las áreas de envío, luego deshabilitar / guardar y volver a habilitar / guardar los métodos de envío de “tarifas planas”.


Actualización para muchos métodos de envío diferentes (relacionados con sus comentarios):

 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 = 92; // HERE define the shipping methods you want to hide $method_key_ids = array('flat_rate:7', 'local_pickup:3'); // 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; } 

Probado y funciona …