Many errors on my previous code due to:
- the use of a custom plugin to alter the price.
- trying to compare float with integers.
- not using the proper methods.
Here’s the working version in case someone finds it useful:
Note that the var_dump is used for debugging and to obtain some values, in case you don’t know them.
/* Pedir 200 si el usuario es de fuera de España en los wallpapers */
add_action( 'woocommerce_check_cart_items', 'precio_minimo_en_wallpapers', 10, 0 );
function precio_minimo_en_wallpapers() {
// Funionar solo en la página de carrito o de finalizar compra
if( is_cart() || is_checkout() ) {
global $woocommerce;
// Precio Minimo para realizar envios a Europa y USA
$minimo_pedido_wallpaper = 200;
// Obtener los productos
$productos = $woocommerce->cart->get_cart();
// Obtener metodos de envio seleccionados en la sesión
$method = WC()->session->get( 'chosen_shipping_methods' );
// Filtrar productos con clase de envio wallpaper y comenzar a sumar el precio
$precio = 0.00;
foreach ( $productos as $producto ) {
$shipping_class = $producto['data']->get_shipping_class();
if ( $shipping_class == 'wallpapers' ) {
$precio += $producto['line_total'];
}
}
$precio_final = intval($precio);
if ( $precio_final < $minimo_pedido_wallpaper && 'flat_rate:8' == $method[0] && $shipping_class == 'wallpapers' || $precio_final < $minimo_pedido_wallpaper && 'flat_rate:9' == $method[0] && $shipping_class == 'wallpapers' ) {
wc_add_notice( '<strong>Se requiere un pedido de mínimo 200 euros en Wallpapers para envíos Europeos o Internacionales.</strong>'/* . + var_dump($shipping_class) */, 'error' );
}
}
}