Avisos
Vaciar todo

Configurar métodos de pago según variación del producto

15 Respuestas
4 Usuarios
0 Reactions
47 Visitas
Respuestas: 13
Active Member
Topic starter
 

Hola, en uno de los sitios web de un cliente estamos usando las variaciones de producto para cambiar el precio según la forma de pago y nos ha venido perfecto porque mientras mas financiación damos, el precio aumenta, hasta ahí todo bien el problema viene cuando después de elegir la forma de pago (variación) se va a finalizar la compra, allí las formas de pago habilitadas deben variar según lo seleccionado.
Ademas debemos comprobar si hay mas de una forma de pago seleccionada en los productos añadidos en el carrito.... ¿Alguien ha enfrentado estos problemas o similar? 

Contenido solo visible a usuarios registrados


 
Respondido : 19/04/2023 3:00 pm
Pepe
 Pepe
Respuestas: 41129
Illustrious Member Admin
 

Hola Matias.

Para que dominio es la consulta ?

El dominio novodespertarcba veo que esta en mantenimiento, si ese es el dominio al que haces referencia necesitaremos que tengas la web abierta para poder revisarlo.

 

Un saludo

 


 
Respondido : 19/04/2023 3:29 pm
Respuestas: 13
Active Member
Topic starter
 

@pepesoler Ya lo saque de mantenimiento... 


 
Respondido : 19/04/2023 3:43 pm
Respuestas: 13
Active Member
Topic starter
 

Basicamente seria asi:

- si seleccionan transferencia bancaria, solo dar la opción de transferencia al momento de pagar.

- si se selecciona en cuotas (financiacion) ahí si dar la opción de, en este caso, la entidad de financiación llamada MercadoPago. 

- se me ocurre otro problema y es que pasa si el cliente selecciona en varios articulos, varias formas de pago. 

Gracias, Saludos


 
Respondido : 19/04/2023 3:46 pm
Karen Rios
Respuestas: 18677
Illustrious Member Moderator
 

Hola Matias, 

En este caso es posible necesites añadir un código a la medida para ocultar el método de pago según la selección del atributo, puedes probar ocultar un método de pago con el siguiente código que puedes añadir en el archivo function.php de tu tema o a trabes de un plugin como code snippets

add_filter('woocommerce_available_payment_gateways', 'conditional_payment_gateways', 10, 1);
function conditional_payment_gateways( $available_gateways ) {
$in_cart = false;
foreach ( WC()->cart->get_cart_contents() as $key => $values ) {
// Para el atributo llamado 'pa_forma-de-pago' en mi carrito
// Remplaza por tu atributo
if (array_key_exists('pa_forma-de-pago', (array) $values['data']->get_attributes() ) ) {
foreach ($values['data']->get_attributes() as $attribute => $variation);
// Varaición seleccionada 'efectivo-transferencia' modificala por tu variacion.
if ($variation == 'efectivo-transferencia') $in_cart = true; //edited
}
}
if ( $in_cart ) {
unset($available_gateways['paypal']); // desactiva el método de pago paypal, sustituye 'paypal' por el ID del método de pago a desactivar

}
else {
isset($available_gateways['bacs']); // activa solo la opción de transferencia, sustituye 'bacs' por el ID de tu método de pago

}
return $available_gateways;
}

También puedes revisar algunas opciones como el siguiente plugin → Contenido solo visible a usuarios registrados

Solo ten en cuenta que este último es de pago y no podemos comprobar su funcionalidad, por lo que antes de adquirirlo te recomiend consultes con los desarrolladores y verifiques te permite añadir lo que necesitas. 

Por otro lado, si requieres algo más personalizado te recomiendo consultes con nuestro directorio de colaboradores quienes pueden ayudarte a añadir lo que necesitas

Un Saludo 


 
Respondido : 19/04/2023 4:23 pm
Respuestas: 13
Active Member
Topic starter
 

Hola @karen 

Tengo estos atributos en las variaciones

image

 

Y con el plugin code snippets agregue el código que me enviaste pero modificado, por favor dime si esta mal porque no funciona.. 

add_filter('woocommerce_available_payment_gateways', 'conditional_payment_gateways', 10, 1);

function conditional_payment_gateways( $available_gateways ) {

$in_cart = false;

foreach ( WC()->cart->get_cart_contents() as $key => $values ) {

// Para el atributo llamado 'pa_forma-de-pago' en mi carrito

// Remplaza por tu atributo

if (array_key_exists('Tarjeta de crédito', (array) $values['data']->get_attributes() ) ) {

foreach ($values['data']->get_attributes() as $attribute => $variation);

// Varaición seleccionada 'Tarjeta de crédito' modificala por tu variacion.

if ($variation == 'Tarjeta de crédito') $in_cart = true; //edited

}

}

if ( $in_cart ) {

unset($available_gateways['Efectivo-transferencia bancaria']); // desactiva el método de pago paypal, sustituye 'paypal' por el ID del método de pago a desactivar




}

else {

isset($available_gateways['Tarjeta de crédito']); // activa solo la opción de transferencia, sustituye 'bacs' por el ID de tu método de pago




}

Esta publicación ha sido modificada el hace 2 años por Matias
 
Respondido : 09/05/2023 11:20 am
Pepe
 Pepe
Respuestas: 41129
Illustrious Member Admin
 

Hola Matias.

Según entiendo lo que quieres es ocultar métodos de pago según el producto que tenga en la cesta.

//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 se desactivan las pasarelas Paypal (paypal) y contrareembolso (cod) pero * también puedes desactivar otras como transferencia bancaria (bacs) o Stripe (stripe)

 

Si no quieres utilizar código puedes utilizar un plugin:

-> https://es.wordpress.org/plugins/woocommerce-product-payments/

 

Un Saludo


 
Respondido : 09/05/2023 2:20 pm
Respuestas: 13
Active Member
Topic starter
 

@pepesoler Hola pepe, no, lo que queremos es que según la variación/forma de pago seleccionada deje pagar con un método o con otro. 
Ejemplo

Producto XX precios:

- 100 pagando mediante transferencia bancaria

- 120 pagando con tarjeta de crédito (MercadoPago). 

Si el usuario elige pagar con transferencia bancaria entonces al momento del checkout la opción MercadoPago debe deshabilitarse y solo dejar disponible la de transferencia bancaria. 


 
Respondido : 09/05/2023 2:25 pm
Pepe
 Pepe
Respuestas: 41129
Illustrious Member Admin
 

Hola Matias.

Ok ya veo, Y como estas añadiendo esto?

screenshot novodespertarcba.com 2023.05.09 16 58 03

Por que lo que te podemos ofrecer es estándar pero si es algo personalizado va a ser complicado.

 

Un saludo

 


 
Respondido : 09/05/2023 2:59 pm
Respuestas: 13
Active Member
Topic starter
 

@pepesoler Lo esta agregando el usuario mediante variaciones en la ficha del producto

Screenshot at May 09 15 30 52

 
Respondido : 09/05/2023 6:32 pm
Karen Rios
Respuestas: 18677
Illustrious Member Moderator
 

Hola Matia, 

Si tienes esta variación debes modificar el código de acuerdo al slug de tu variación, por ejemplo efectiva transferencia

image

Ten en cuenta que estas opciones son personalizaciones adicionales en tu sitio web, si deseas añadir algo adicional te recomiendo consultes con nuestro directorio de colaboradores quienes pueden ayudarte a añadir lo que necesitas. 

Un Saludo 


 
Respondido : 09/05/2023 7:47 pm
Respuestas: 13
Active Member
Topic starter
 

@karen Hola Karen, en la forma de pago Transferencia bancaria, donde puedo ver el slug ?

Trasnf

 

 

 

 


 
Respondido : 12/05/2023 4:56 pm
Karen Rios
Respuestas: 18677
Illustrious Member Moderator
 

Hola Matia, 

El slug que necesitas añadir en esta parte del código es el de tu atributo no el del método de envió.

image
image

Dentro de las opciones que indican el ID del método de pago es donde necesitas añadir este, este ID lo localizas editando el método de pago y copiándolo de la URL

Untitled

Un Saludo


 
Respondido : 12/05/2023 5:01 pm
Respuestas: 13
Active Member
Topic starter
 

@karen Creo que el código esta correcto pero no logro hacer que funcione: 

los atributos son: 
ef y tc 

1

 

Los slugs de los métodos de pago son

"bacs" para transferencia y "woo-mercado-pago-basic" para los cobros con tarjeta de credito 

2

 

entonces para agregar el codigo con el plugin Code snippets, el código queda así:

add_filter('woocommerce_available_payment_gateways', 'conditional_payment_gateways', 10, 1);
function conditional_payment_gateways( $available_gateways ) {
$in_cart = false;
foreach ( WC()->cart->get_cart_contents() as $key => $values ) {
// Para el atributo llamado 'pa_forma-de-pago' en mi carrito
// Remplaza por tu atributo
if (array_key_exists('ef', (array) $values['data']->get_attributes() ) ) {
foreach ($values['data']->get_attributes() as $attribute => $variation);
// Varaición seleccionada 'efectivo-transferencia' modificala por tu variacion.
if ($variation == 'ef') $in_cart = true; //edited
}
}
if ( $in_cart ) {
unset($available_gateways['woo-mercado-pago-basic']); // desactiva el método de pago paypal, sustituye 'paypal' por el ID del método de pago a desactivar

}
else {
isset($available_gateways['bacs']); // activa solo la opción de transferencia, sustituye 'bacs' por el ID de tu método de pago

}
return $available_gateways;
}

 
Respondido : 13/05/2023 7:00 pm
Bruno
Respuestas: 6485
Illustrious Member Moderator
 

Hola Matias,

Si aun modificando el código no logra ajustarse ni funcionar, es posible que no sea del todo compatible con alguno de tus elementos, ya sea la versión de Wordpress o la de Woocommerce

Tal como ya mencionaron mis compañeros, existen alternativas que vale la pena echarles un vistazo

- https://woocommerce.com/es-es/products/conditional-shipping-and-payments/

- https://es.wordpress.org/plugins/woocommerce-product-payments/

Pero si en definitiva ninguno cumple con lo requerido pues siempre puedes consultar con nuestros colaboradores para que adapten el código a tu medida

https://www.webempresa.com/directorio-colaboradores.html

Saludos!

 


 
Respondido : 13/05/2023 8:03 pm