Está claro que cuanto más fácil le pongas a tu cliente poder pagar más conversiones tendrás en la página de finalizar compra. Pero hay ciertos métodos de pago que no son posibles en ciertos países o no te saldrían rentables, por ello lo más idóneo sería ocultarlos si vienen de dicho país.
No vamos a necesitar ningún plugin, eso sí habrá que modificar dos secciones de código para poner el país/ciudad y el método de pago.
Índice
Snippet para ocultar pagos por país
Añade este Snippet en tu plugin de funcionalidades para snippets o bien en el archivo functios.php de tu child theme.
add_filter('woocommerce_available_payment_gateways','dl_ocultar_pago_checkout',10,1);
function dl_ocultar_pago_checkout($array_payments) {
if( WC()->customer->get_billing_country() == 'ES' ) //Aquí ponemos el código del país, puedes consultarlo en woocommerce.com
unset($array_payments['paypal']); // El codigo del pago
return $array_payments;
}
En el código que muestro aquí sirve para quitar paypal en España, se puede modificar cómo queráis. Para saber que código ISO hay que poner en el país o ciudad os dejo este enlace.
También os estaréis preguntando cual es el código(ID) de los métodos de pago, aquí os dejo los que más se usan:
- Transferencia bancaria: bacs
- Tarjeta de crédito con Stripe: stripe
- Tarjeta con Redsys: redsys
- Paypal: paypal
- Paypal de YITH: yith-paypal-ec
- Por cheques: cheque
- Contrarrembolso: cod
- Bizum: bizum
Si tienes otra diferente a esta habla con tu proveedor y pídele que te proporcione la ID.
Snippet para quitar pagos en ciudades
¿Y si queremos ocultarlo en una ciudad concreta?
add_filter('woocommerce_available_payment_gateways','dl_ocultar_pago_checkout',10,1);
dl_ocultar_pago_checkout($array_payments) {
if( WC()->customer->get_billing_country() == 'ES' && WC()->customer->get_billing_state() == 'MU' ) //Cambia el ES por el país y el MU por la comunidad
unset($array_payments['bacs']);
return $array_payments;
}
?>
En este caso estoy excluyendo la transferencia bancaria a Murcia en España. Para saber los códigos ISO de las ciudades con poner en Google ISO de las ciudades del país es suficiente.
Activar solo en una región de un país
En este caso es al revés que el anterior, solo activarlo en Murcia España:
add_filter('woocommerce_available_payment_gateways', 'dl_personalizar_metodos_pago_checkout', 10, 1);
function dl_personalizar_metodos_pago_checkout($available_gateways) {
// Comprueba si el país de facturación NO es España o la provincia NO es Murcia
if (WC()->customer->get_billing_country() != 'ES' || WC()->customer->get_billing_state() != 'MU') {
// Si no es Murcia, elimina 'bacs' de los métodos de pago disponibles
unset($available_gateways['bacs']);
}
// Para clientes en Murcia, todos los métodos de pago, incluido 'bacs', permanecen disponibles
return $available_gateways;
}
Eso es todo por este tutorial, cualquier duda como siempre en comentarios. Podéis consultar mis servicios de Mantenimiento de Woocommerce para ayudaros en es
Hola, muchas gracias. Si tengo 3 metodos de pago y quiero quitar 2 para un mismo pais lo puedo hacer tambien con ese snippet ? gracias.
Hola Guillermo,
Exacto, con que dupliques en el código esta parte para poner los dos es suficiente:
unset($array_payments[‘bacs’]);
unset($array_payments[‘stripe’]);
Igualmente si no te aclaras con el código hice un tutorial también con un plugin: https://diegol.top/woocommerce/herramientas/excluir-metodos-de-envio-o-formas-de-pago-en-un-producto/
Esper que te sirva,
Un saludo!
Hola como estas?
cómo podria hacer para definir de hacer envíos solo a una provincia o ciudad especifica.
Hola amigo. Excelete post. Pregunta, funciona igual para paypal express? Hice una prueba insertando el codigo en el funtions.php de theme divi pero no funciono. Quedo atento. Gracias
Hola Olber,
No depende del Theme, sino del (ID) que menciono en el post, ya que el de PayPal y PayPal Express no es el mismo. Sino das con el te lo puedo buscar.
Un saludo!
Hola! Y para ocultar el mismo medio de pago en más paises, por ejemplo Estados Unidos, como sería?
Gracias
Hola Alberto,
Deberías cambiar el código ISO, en el artículo tienes un enlace con la lista. En tu caso deberías modificar esta línea del código(he cambiado ES por US):
if( WC()->customer->get_billing_country() == 'US' )
Espero que te sirva.
Para oculatarlo en más paises sería repetir esa linea por pais?
Por ejemplo
if( WC()->customer->get_billing_country() == ‘US’ )
if( WC()->customer->get_billing_country() == ‘ES’ )
if( WC()->customer->get_billing_country() == ‘NL’ )
O se puede hacer de algún otro modo que añada varios códigos de pais juntos?
Gracias por tu ayuda
Hola
Como se podría hacer para que un método de pago solo se pueda ver en ciertos paises determinados?
Consulta, yo necesito lo contrario, que oculte un método en todos los paises EXCEPTO uno en concreto.
Intente hacer lo siguiente pero no me lo toma
if( WC()->customer->get_billing_country() != ‘ES’ )
¿Alguna idea? Gracias y excelente snipper
¿Alguien sabe cuál sería el código para no mostrar mercadopago de argentina?
unset($array_payments[‘???????’]); // El codigo del mercado pago argentina
El código de MP argentina es : “woo-mercado-pago-basic” . Si queres filtrar solo para Argentina o un país en particular y para el resto usar todos o un metodo en particular hay que usar un Else. Para Argentina filtra paypal y para el resto Mercado Pago.
if( WC()->customer->get_billing_country() == ‘AR’)
unset($array_payments[‘paypal’]);
else
unset($array_payments[‘woo-mercado-pago-basic’]);