Oferta SiteGround Black Friday

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.

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en los emoticonos para valorarlo!

Promedio de puntuación 5 / 5. Total de votos: 3

Hasta ahora ¡no hay votos!. Sé el primero en valorar este contenido.

Ya que has encontrado útil este contenido...

¡Sígueme en las redes sociales!

¡Siento que este contenido no te haya sido útil!

¡Ayúdame a mejorar este contenido!

Por favor, dime, ¿cómo puedo mejorarlo?

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

AVISO: Esta publicación es de hace 3 años o más. Si es un código o un plugin podría no funcionar en las últimas versiones de WordPress, y si es una noticia podría estar ya obsoleta. Luego no digas que no te hemos avisado. ¡Ah! ¿te funciona? pues entonces no he dicho nada :)

Sobre el autor

4 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.

  2. 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’] );
    }

    }

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

 

Scroll al inicio