El siguiente snipet que muestro a continuación te permite desactivar varios metodos de envió segun el país. Este se debe de colocar en el archivo functions.php del tema, o bién mejor aún en un gestor de snipets, a mi personalmente me gusta code snipet.
La configuración es añadiendo valores al array $country_list, se debe especificar el codigo de país ISO de 2 letras, y los metodos de envio que quieras desactivar de los que estén disponibles.
add_filter('woocommerce_package_rates', 'wf_remove_shipping_options_for_particular_country', 10, 2);
function wf_remove_shipping_options_for_particular_country($available_shipping_methods, $package){
global $woocommerce;
//Configura este array con la lista de paises y los diferentes metodos de envío a ocultar.
$country_list = array(
‘CA’ => array(‘wf_fedex_woocommerce_shipping’,’free_shipping’),
);
$customer_country = $woocommerce->customer->get_shipping_country();
if ( in_array( $customer_country , array_keys($country_list) ) ) {
if( !empty( $country_list[$customer_country] ) ){
foreach ($country_list[$customer_country] as $shipping_methods) {
foreach ($available_shipping_methods as $shipping_method => $value) {
if( strpos( $shipping_method, $shipping_methods ) !== false ) {
unset($available_shipping_methods[$shipping_method]);
}
}
}
}
}
return $available_shipping_methods;
}