Cómo ocultar métodos de pago por producto o categoría en WooCommerce

Por defecto WooCommerce mostrará todos los métodos de pago activos en tu página de finalizar compra pero no siempre eso es lo que quieres.

Imagina, por ejemplo, que en algún producto no quieres que se pueda usar la transferencia bancaria, o Paypal, o contra reembolso.

Las situaciones pueden ser muy variopintas, desde un producto de entrega inmediata donde no tiene sentido la transferencia bancaria, o simplemente productos virtuales donde no tiene lógica ninguna que se muestre el pago a la entrega o contrareembolso ¿verdad?

Pues bien, WooCommerce nos permite decidir muchas cosas en sus ajustes o en los detalles de los productos, pero esto no. Vamos a retomar las riendas.

Oculta métodos de pago por producto con código (GRATIS)

Si tienes claro en qué productos quieres ocultar algunas pasarelas de pago nada mejor que usar un poco de código. Solo tienes que añadirlo al archivo functions.php  de tu tema activo o a tu plugin de personalizaciones o mu-plugin.

/* Quitar métodos de pago
* Oculta las pasarelas de pago disponibles por producto
* Añade este codigo a tu plugin de funciones o el archivo functions.php del tema activo
* En el ejemplo se desactivan las pasarelas Paypal (paypal) y contrareembolso (cod) pero
* tambien puedes desactivar otras como transferencia bancaria (bacs) o Stripe (stripe), por ejemplo
* Cambia los IDs de producto de ejemplo en el array $prodids, p.ej. $prodids=array(15,30);
*/
//Primero comprobamos si el producto esta disponible o no en el carrito.
function is_product_in_cart( $prodids ){
	$product_in_cart = false;
	foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
		$product = $cart_item['data'];
    		if ( in_array( $product->id, $prodids ) ) {
	        	$product_in_cart = true;
		}
            
	}
	return $product_in_cart;
}
//  Luego ya desactivamos la pasarela que queramos por ID de producto. Cambia los números de ID en el array $prodids
function payment_gateway_disable_product( $available_gateways ) {
	global $woocommerce;
	//print_r( $available_gateways );
	$prodids=array(15,30);
	if ( isset( $available_gateways['paypal'] ) && is_product_in_cart( $prodids ) ) {
	    unset(  $available_gateways['paypal'] );
	}
        if ( isset( $available_gateways['cod'] ) && is_product_in_cart( $prodids ) ) {
	    unset(  $available_gateways['cod'] );
	}
	return $available_gateways;
}
add_filter( 'woocommerce_available_payment_gateways', 'payment_gateway_disable_product' );

En el ejemplo anterior solo debes tener en cuenta las variables a modificar. Por un lado está el array $prodids , que es donde pones la lista de los IDs de tus productos para los que quieres ocultar pasarelas de pago, en el ejemplo los IDs 15 y 30.

Para saber el ID de un producto solo tienes que pasarte por la página de administración de productos, ahí lo tienes bien clarito, al pasar el cursor sobre cualquier producto.

El otro parámetro a tener en cuenta es la(s) pasarela(s) de pago a ocultar, en el ejemplo Paypal (paypal) y contrareembolso (cod). Si quieres añadir o quitar pasarelas de pago a ocultar simplemente sigue el ejemplo, pudiendo también ocultar otras pasarelas como la transferencia bancaria (bacs), Stripe (stripe) u otras, depende de tu objetivo.

Para saber el ID de las pasarelas de pago simplemente pásate por la administración de tu tienda en WooCommerce -> Ajustes -> Finalizar compra  y ahí los tienes.

Ocultar métodos de pago por categoría con código (GRATIS)

También puedes decidir qué pasarelas de pago ocultar, no por producto sino por categoría completa. Puedes hacerlo con este otro código.

/*
 * Oculta pasarelas de pago si un producto de una categoría está en el carrito.
 *  - Nota: Si se añaden varios productos y solo uno es de la categoría tampoco aparece la pasarela ocultada
 * Uso:
 *    payment_NAME : Nombre de las pasarelas de pago estandar de WooCommerce - paypal, cod, bacs y cheque
 *    category_ID :  El ID de la categoría para la que se ocultar la pasarela de pago. El ID lo tienes haciendo clic en la categoria en Productos -> Categorias, se mostrará el "tag_ID" en la barra de direcciones
 */
function filter_gateways($gateways){

$payment_NAME = 'paypal'; // <--------------- cambia aquí el nombre de pasarela
$category_ID = '15';  // <----------- cambia aquí el ID de categoría
 global $woocommerce;

 foreach ($woocommerce->cart->cart_contents as $key => $values ) {
    // Se obtienen los terminos, p.ej. lista de categorias usando el ID del producto
    $terms = get_the_terms( $values['product_id'], 'product_cat' );
    // Como un producto puede tener varias categorias tenemos que iterar la lista de categorias del producto
    foreach ($terms as $term) {
        if($term->term_id == $category_ID){
               unset($gateways[$payment_NAME]);
                   // Si quieres ocultar otra pasarela añadela aqui así: unset($gateways['cod']);
                    break;
          }
        break;
    }

   }
    return $gateways;

}

add_filter('woocommerce_available_payment_gateways','filter_gateways');

Ocultar métodos de pago por categoría con plugins (GRATIS)

Como hemos visto, otro modo de ocultar métodos de pago es hacerlo por categoría de productos, y para esto hay algunos plugins gratuitos que ofrecen esta posibilidad de manera gratuita.

WooCommerce Product Payments

La versión gratuita de este plugin sirve para eso exactamente, para elegir para qué categorías ocultarás métodos de pago. Pero su enfoque es diferente, en realidad lo que haces es elegir el método de pago, solo uno, disponible para cada categoría de producto.

En su página de ajustes encontrarás la lista de tus categorías de producto, seleccionas una o varias y elige su método de pago por defecto, el resto se ocultarán en la página de finalizar compra.

Como ves es algo limitado, pues no puedes seleccionar varios métodos de pago por categoría.

Booster for WooCommerce

En su versión gratuita puedes ocultar cada método de pago por categoría de producto, solo tienes que empezar a teclear nombres de categoría en cada método de pago para ocultarlo.

Para este uso es bastante más completo que el anterior al ser su enfoque justo el contrario, y el correcto. Pero, como ves, las opciones para ocultar pasarelas por producto están inhabilitadas, solo disponibles en la versión plus.

Ocultar métodos de pago por producto con plugins (DE PAGO)

Curiosamente todos los plugins que ofrecen ocultar métodos de pago no ofrecen gratis la opción de hacerlo por producto, solo por categoría, así que si quieres esta opción con plugins te toca pasar por caja.

Algunos plugins que ofrecen esa opción en su versión de pago son estos:

Booster Plus for WooCommerce (19,99$)

Ahora sí, en su versión de pago ya están activos los campos para ocultar pasarelas de pago por producto.

WooCommerce Payment GateWay per product premium (19,95€/año)

Este plugin es la versión de pago del gratuito WooCommerce Products Payments, y por esta módica cantidad anual ya puedes especificar qué pasarelas de pago estarán disponibles en cada producto, y de la manera correcta, mediante un nuevo widget en el editor de productos.

Si no seleccionas ninguna se mostrarán todas las pasarelas, y si seleccionas alguna solo se mostrarán las elegidas.

WooCommerce Conditional Shipping and Payments (79$)

Este plugin de los creadores de WooCommerce ofrece, entre sus múltiples configuraciones, la posibilidad de elegir qué pasarelas de pago se mostrarán por producto, categoría, país o método de envío. Muy completo, eso sí, totalmente configurable como puedes ver en la siguiente captura.


Como ves, algo que considero tan básico no está incluido en WooCommerce por defecto, pero afortunadamente tenemos opciones de sobra, de pago y gratis.

VALORA Y COMPARTE ESTE ARTÍCULO PARA MEJORAR LA CALIDAD DEL BLOG…
(11 votos, promedio: 5)

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

9 comentarios en “Cómo ocultar métodos de pago por producto o categoría en WooCommerce”

  1. Hola Fernando, muchas gracias por el artículo y por tu blog tan genial. Yo tengo el siguiente problema, quizás me puedas orientar un poco: actualmente uso la pasarela de MercadoPago porque te permite hacer los envíos mediante DHL a precio preferencial, pero esto solo funciona en México. ¿Cómo le puedo hacer para que mis clientes en el extranjero tengan la opción de pagar con PayPal en vez de MercadoPago? Lo obvio sería activar activar ambas formas de pago y dejarlos elegir al momento, pero a mi me gustaría que si el usuario está en México solo tenga como opción MercadoPago y si está fuera de México, solo pueda hacerlo con PayPal…. ¿Alguna idea? Gracias

  2. Buenas Fernando, gracias por el articulo. Tengo un pequeño problema con el código que pusiste. Cuando pongo el código en el functions.php funciona correctamente pero en la administración de woocommerce en Ajustes -> Finalizar compra sale vació las opciones debido al código ya que si lo quito se arregla ¿sabes a que puede ser debido?

    1. Me autorespondo: Justo despues de abrir la funcion payment_gateway_disable_product comprobar mediante la funcion is_admin() si estamos en el frontend o el backend para ocultar o mostrar el codigo 🙂

  3. Hola Fernando, como siempre unos artículos interesantísimos,
    pero tengo una duda, ¿este método se puede usar para ocultar formas de pago dependiendo de la provincia o zona de envío? por ej. yo tengo una zona de envío a Baleares, Canarias, Ceuta y Melilla y no quiero que salga ningún método de pago excepto uno que yo llamo «le calcularemos los gastos de envío» ¿se puede hacer?.

    Gracias y saludos.

      1. Gracias Fernando por la respuesta, pero no entiendo bien lo que tendría que hacer para ocultar las diferentes formas de pago.
        Gracias.

  4. Hola, el código funciona para productos simples o variables pero para todas sus variaciones por lo que estoy probando ya que tengo un producto variable y al meter el id de la variación no fucniona. ¿Cómo sería en el caso de un producto variable donde quiero mostrar un método de pago solo para una variación (permite la compra financiada) y no en el resto de variaciones?

  5. Andrés Núñez Flórez

    Hola, ¿sabes cómo se puede resolver en caso que un producto con medio de pago excluido (por ejemplo que no se puede pagar con PayU) se compre en conjunto con otros productos, no se inhabiliten las demás formas de pago? ya que al comprar varios productos si quiero que esté habilitado PayU.

Deja un comentario

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

 

Ir arriba Ir al contenido