Cómo desactivar pasarelas de pago según el método de envío

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.

(3 votos, promedio: 5) Valora este artículo para ayudar a mejorar la calidad del blog

¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!

Sobre el autor

3 comentarios en “Cómo desactivar pasarelas de pago según el método de envío”

  1. ¡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:

    if ( isset( $available_gateways['cheque'] ) && 0 === strpos( $chosen_shipping, 'alg_wc_shipping:93')) {
                unset( $available_gateways['cheque'] );

    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.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Información base sobre privacidad:
  • Responsable: Fernando Tellado ([email protected])
  • Fin del tratamiento: Moderación de comentarios para evitar spam
  • Legitimación: Tu consentimiento
  • Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal
  • Derechos: Acceso, rectificación, portabilidad, olvido

 

Ir arriba Ir al contenido