Una personalización que suele ser necesaria en una tienda online es poder ajustar los métodos de pago según qué productos esté comprando el cliente.
Un ejemplo sería el caso en que tuvieramos categorías con productos de precio elevado, y que queramos permitir el pago por transferencia bancaria, pero que para los pedidos más pequeños no nos interesara ofrecerlo como opción.
Aunque podemos realizar estos ajustes mediante plugins (luego os dejo un par de opciones), si es un caso concreto y no queremos depender de otro plugin, o necesitamos hacerlo por código por cualquier otra razón, tenemos el siguiente snippet para ocultar una forma de pago según los productos del carrito.
En este ejemplo en concreto, el condicional mira si en el carrito hay algún producto de una categoría en concreto (‘accesories’), y en ese caso desactiva el método de pago ‘cheque’:
Podríamos adaptarlo para que en lugar de la categoría, simplemente determinara si hay un producto específico y podríamos cambiar la forma de pago afectada modificando la línea:
unset( $available_gateways['cheque'] ) ;
Las formas de pago estandar son:
- Transferencia: bacs
- Pagos por cheque: cheque
- Paypal: paypal
- Contrareembolso: cod
- Stripe: stripe
Nota: para saber el código correspondiente a una forma de pago, podeís mirarlo en el la pantalla de pagos del administrador de WooCommerce (Woocommerc -> Ajustes -> Pagos), y editando la que te interese, si miramos la url, veremos el parametro ‘section’ que es el que nos interesa, por ejemplo:
https://woo-zona-dpw.esl/wp-admin/admin.php?page=wc-settings&tab=checkout§ion=cheque
Si las condiciones que debes valorar son complejas o incluyen muchas opciones y variantes, puedes utilizar un plugin para gestionarlo, los más utilizados son:
Conditional Shipping and Payments: es el oficial de WooCommerce y tiene en cuenta también los métodos de envío. Funciona muy bien, pero es de pago (79$/año)
Conditional Payments for WooCommerce: Plugin con versión gratuita y PRO. Según el tipo de condicional que necesites puedes tener suficiente con la versión gratuita.
¿Eres implementador o desarrollador WordPress?
En la Zona DPW encontrarás más recursos, tutoriales, plantillas, y una biblioteca de snippets para poder utilizar en tu día a día y ganar tiempo en tu trabajo:
ACCEDER AHORA
Comentarios
11 respuestas a «Ocultar forma de pago en WooCommerce según productos»
|
Hola Esther, te robo 5 minutos, de que forma puedo poner el texto ( envio Gratis ) junto al precio de los productos que tienen envio gratis ? en mi caso es a partir de 3000$ ?? gracias
|
Hola Alejandro!
Te paso una aproximación… lo ideal sería coger dinámicamente el importe que tengas configurado para envío gratis, pero como eso dependerá de cómo tengas configurado los gastos de envío y complica la cosa, te lo pongo con el importe de 3000 directamente en la función:
function esl_add_free_label_price_html( $price, $product ) {
if($product->get_price() > 3000) $price .= ' (Envío gratis)';
return $price;
}
add_filter( 'woocommerce_get_price_html', 'esl_add_free_label_price_html', 10, 2 );
¡Espero que te sirva!
|
muchas gracias y feliz dia
|
Hola Esther, que habria que modificar para solo usarlo en un determinado producto / publicacion ?
|
Hola Alejandro,
Deberías modificar la línea «if ( has_term( ‘accessories’, ‘product_cat’, $item->id ) ) $bool = true;» por if($item->id = $idquequieras) $bool = true»
De esta forma en lugar de mirar si tiene una categoría, comparas el ID directamente.
Saludos!
|
Hola Esther, muchas gracias.
¿En qué archivo hay que añadir el código que indicas?
Muchas gracias.
|
Hola Pepe!
Puedes añadirlo al archivo functions.php o en un plugin personalizado. Aquí tienes más información sobre este tema: https://www.esthersola.com/modificar-functions-code-snippets/
Saludos!
|
Hola buenas tardes, muchas gracias por tu estupenda publicación, y siento molestar con una consulta más a la lista de preguntas de los demás 🙁
Quería saber por favor si no es difícil el código, como ocultar la forma de pago de redsys por ejemplo a dos secciones diferentes.
Ya que he probado diferentes alternativas y no me funciona.
Se ponerlo solo a una sección pero a dos en concreto no veo manera posible de hacerlo.
Muchas gracias y disculpa las molestias.
Pd. (pegaba el código aquí pero es muy largo)
|
Hola buenas tardes, he probado una nueva opción añadiendo medio texto y me funcionó:
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
$item = $cart_item[‘data’];
if ( has_term( ‘XXXXX’, ‘product_cat’, $item->id ) ) $bool = true;
}
Este es el código que hay que añadir si tenemos dos secciones diferentes que queramos quitar la misma opción de pago, se añade justo debajo del principal editando donde hay XXXXX por el nombre de la sección o número de sección, yo en mi caso utilizo el número.
Gracias por todo Esther. 🙂
|
Genial, muchas gracias por la aportación!
|
Hola buenos días, muchas gracias a ti por tu publicación y por tu espléndido trabajo.
Saludos.