Hay muchos y diversos motivos por los que un gestor de un Ecommmerce puede querer desactivar pasarelas de pago específicas según el método de envío.
En este artículo vamos a ver cómo, mediante unas pocas líneas de código, puedes desactivar pasarelas de pago basándote en el método de envío elegido por el cliente en el momento del pago.
En este ejemplo desactivaremos la pasarela de pago ‘bacs‘ (transferencia bancaria) para el método de envío ‘local_pickup‘ (recogida local).
Para empezar necesitamos tener el ID tanto de la pasarela de pago como del método de envío.
Para saber los IDs de las pasarelas de pago puedes verlos en la sección de ajustes correspondientes a las pasarelas de pago disponibles y el método de envío. Solo tienes que ir a WooCommerce > Ajustes > Finalizar compra, abajo del todo, junto a las pasarelas verás sus IDs
Obtener los IDs de los métodos de envío es algo más complicado. Para ello debes abrir el Inspector del navegador e identificar el atributo value
de cada botón radio disponible.
Así, por ejemplo, verás que el value
del botón de Recogida local es local_pickup
,que viene a ser el ID de ese método de envío.
Ahora solo nos queda añadir el siguiente código a nuestro plugin de utilidades o al archivo functions.php
del tema activo.
/** * Filtrar pasarelas de pago por metodo de envio */ add_filter( 'woocommerce_available_payment_gateways', 'mis_pasarelas_disponibles' ); function mis_pasarelas_disponibles( $available_gateways ) { global $woocommerce; if ( !is_admin() ) { $chosen_methods = WC()->session->get( 'chosen_shipping_methods' ); $chosen_shipping = $chosen_methods[0]; if ( isset( $available_gateways['bacs'] ) && 0 === strpos( $chosen_shipping, 'local_pickup' ) ) { unset( $available_gateways['bacs'] ); } } return $available_gateways; }
En este código verás que comprobamos si está seleccionado el método de envío local_pickup
, y en caso de ser así entonces luego desactivamos la pasarela de pago bacs
. Por supuesto, cambia estos IDs a los que quieras aplicar en tu caso particular.
Si quieres desactivar varias pasarelas de pago para un método de envío específico entonces copia la línea que empieza por unset
y añade ahí las otras pasarelas de pago a desactivar para ese método de envío.
¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!
Hola, excelente post, una consulta si quiero agregar dos medios diferentes, como debo hacer? muchas gracias
Separando con comas los
$available_gateways
¡Hola! Una consulta:
Yo deseo agregar varios tipos de envíos para un solo medio de pago, sin embargo, al tratar de hacerlo mediante comas u otras formas no me lo permite.
Por ejemplo este es mi código:
Yo deseo que aparte del tipo 93 del alg_wc_shipping agregar más tipos como 95, 96, etc. Ya que si incluyo toda la familia (escribiendo solamente alg_wc_shipping) me oculta otros métodos de envío que estoy permitiendo.
¿Cómo podría solucionarlo?
Gracias por la respuesta.
Asi lo deje yo y me funciono. Por cada medio de envio que queres eliminar, copia y pega mas abajo el mismo contenido y edita el envio
if ( isset( $available_gateways[‘bacs’] ) && 0 === strpos( $chosen_shipping, ‘flat_rate:3’ ) ) {
unset( $available_gateways[‘bacs’] );
}
if ( isset( $available_gateways[‘bacs’] ) && 0 === strpos( $chosen_shipping, ‘flat_rate:2’ ) ) {
unset( $available_gateways[‘bacs’] );
}
}