Skip to content

Instantly share code, notes, and snippets.

@acanza
Last active November 19, 2019 13:23
Show Gist options
  • Select an option

  • Save acanza/21a322f807d5b1ec71f7db6e35dcb84f to your computer and use it in GitHub Desktop.

Select an option

Save acanza/21a322f807d5b1ec71f7db6e35dcb84f to your computer and use it in GitHub Desktop.
[Solo sirve para WSS] Restringe métodos de envío cuando hay productos de una (o varias) clases de envío determinadas en el carrito
// [Solo sirve para WSS]Restringe métodos de envío cuando hay productos de una (o varias) clases de envío determinadas en el carrito
if ( in_array( 'woocommerce/woocommerce.php', get_option( 'active_plugins' ) ) && version_compare( WC()->version , '3.0.0', '>' ) ){
add_filter( 'woocommerce_package_rates', 'restrict_shipping_methods_by_shipping_class', 10, 2 );
function restrict_shipping_methods_by_shipping_class( $rates, $package ){
$shipping_classes = array( 'bulky' ); //Listado de slugs de clases de envío que activan la restricción de métodos de envío
$methods_to_restrict = array( 34, 33 ); //Introduce dentro de los paréntesis los IDs -separados por coma- de los métodos de envío a bloquear
foreach ( $package[ 'contents' ] as $key => $value ) {
if ( in_array( $value[ 'data' ]->get_shipping_class() , $shipping_classes ) ) {
$rates = remove_shipping_method_by_id( $rates, $methods_to_restrict );
}
}
return $rates;
}
function remove_shipping_method_by_id( $rates, $list_ids ){
foreach ( $list_ids as $id ) {
foreach ( $rates as $shipping_rate ) {
if ( $shipping_rate->get_instance_id() == $id ){
unset( $rates[ $shipping_rate->get_id() ] );
}
}
}
return $rates;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment