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
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
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
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
Hola @karen
Tengo estos atributos en las variaciones
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
}
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
@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.
Hola Matias.
Ok ya veo, Y como estas añadiendo esto?
Por que lo que te podemos ofrecer es estándar pero si es algo personalizado va a ser complicado.
Un saludo
@pepesoler Lo esta agregando el usuario mediante variaciones en la ficha del producto
Hola Matia,
Si tienes esta variación debes modificar el código de acuerdo al slug de tu variación, por ejemplo efectiva transferencia
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
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ó.
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
Un Saludo
@karen Creo que el código esta correcto pero no logro hacer que funcione:
los atributos son:
ef y tc
Los slugs de los métodos de pago son
"bacs" para transferencia y "woo-mercado-pago-basic" para los cobros con tarjeta de credito
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;
}
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!