Soporte » Plugins y Hacks » WooCommerce » Dejar añadir al carrito cuando no hay stock

  • Resuelto adrianito699985

    (@adrianito699985)


    Buenas tardes,

    Os cuento. Tengo una página creada con wordpress donde estoy utilizando woocommerce. Tengo muchos productos introducidos y mi problema es el siguiente.

    Cuando tengo el stock a 0, en lugar de mantener el boton «añadir al carrito» me dice «read more». Estoy utilizando el plugin tablepress para poder poner los productos en una tabla con [«add_to_cart id=»99999»].

    He conseguido quitar el boton «read more» añadiendo al css lo siguiente:

    .woocommerce a.button{
    display: none;
    }

    Hay alguna manera de que el boton «añadir al carrito» siga saliendo pero que no funcione en los productos sin stock?

    Gracias.

    La página con la que necesito ayuda: [accede para ver el enlace]

Viendo 15 respuestas - de la 1 a la 15 (de un total de 23)
  • Moderador Fernando Tellado

    (@fernandot)

    Se me ocurre que en los datos de producto actives que se pueda reservar. Así se puede pedir aunque está agotado el inventario temporalmente. Luego ya sirves tus pedidos a medida que te llegue el stock, pero de momento no pierdes ventas

    Gracias por la respuesta Fernando.

    Esa idea ya la tenia en mente, pero la verdad que no me acaba de convencer. Me gustaría que no puedan pedir pero que se mantenga el boton de «añadir al carrito» con su stock correspondiente.

    Quizás hay que cambiar algo en algún archivo php pero la verdad que no tengo ni idea de como hacerlo.

    En esta pagina se puede ver mejor a lo que me refiero: https://www.einatall.com/conos-fresa-bt-cob/

    Los que tienen el stock a 0, me gustaria que siga saliendo el «añadir al carrito» como ya te he comentado pero por lo que veo es dificil :/

    Moderador Fernando Tellado

    (@fernandot)

    Ah, si te refieres a esa página es justo lo contrario, que desaparezca el botón de añadir al carrito cuando no hay stock ¿no? Igual es que te entendí mal.

    Podrías desactivarlo mediante javascript, buscas todos los botones con la clase add_to_cart_button y si la propiedad data-quantity es menor de 1 lo desactivas:

    
    $(function(){
        var cart_button = $('.add_to_cart_button');
        if(cart_button.data("quantity") < 1) {
            cart_button.prop("disabled", true);
        }
    });
    

    Puedes verlo en funcionamiento en el siguiente ejemplo rápido que te he preparado para demostrar como funciona: https://codepen.io/carlos_longarela/pen/OvWqxK

    Hola Carlos.

    Era eso lo que buscaba. Me podrias decir en que archivo meterlo? Estoy utilizando wordpress 4.8.5 y el tema generatepress. He probado a meterlo en theme/generatepress/functions.php pero parece que no es este el archivo indicado ya que me «peta».

    Gracias.

    PD: No me funciona porque es JS, no php (imagino, no tengo ni idea)

    Si, como bien comentas es javascript por lo que al ponerlo en el functions.php dará un error 500. No conozco ese tema en concreto, algunos tienen un recuadro para añadir javascript, buscando un poco veo en su foro el siguiente hilo acerca de añadir javascript para una determinada página que puedes ver en https://generatepress.com/forums/topic/using-custom-javascript-in-a-page/ sino también te podrán ayudar en su foro en esa cuestión en particular (el my-page-slug que muestran en el ejemplo, en tu página que nos indicas sería conos-fresa-bt-cob, puedes usarlo para todas las páginas con la condición is_page() o para una serie de páginas con <?php if ( is_page( array( 'conos-fresa-bt-cob', 'conos-fresa-din-2080-cogp' ) ) ) : ?>

    Si, ya vi ese hilo y no me funcionó. Tampoco entiendo mucho del tema así que me limito a hacer lo que los usuarios expertos responden.

    Seguiré buscando a ver si encuentro la solución aunque ya voy a la desesperada :’)

    Prueba a poner en tu functions.php el código:

    
    <?php if ( is_page() ) : ?>
    	<script>
    		$(function() {
    		var cart_button = $(".add_to_cart_button");
    		$(".add_to_cart_button").each(function() {
    			if ($(this).attr("data-quantity") < 1) {
    				$(this).prop("disabled", true);
    			}
    		});
    	});
    	</script>
    <?php endif; ?>
    

    Aunque lo ideal es que se limitase a las páginas donde se va a utilizar. Para que funcione no debes tener oculto en botón de añadir al carrito, sino que se muestre siempre, ya que el script se encarga de desactivar los que tienen menos de 1.

    No me funciona Carlos. Me vuelve a dar un error :/

    El problema es que a los productos que tienen 0 stock, en lugar de mantener el «añadir al carrito», me dice read more. Este read more si que lo tengo oculto, pero el añadir al carrito no.

    Para que funcione tiene que aparecer siempre el botón de añadir al carrito, quizás debas activar en WooCommerce que se pueda comprar aunque no exista stock. Lo que hace el script como puedes ver en el ejemplo de arriba, es en una serie de botones de añadir al carrito, los que tengan en stock menos de 1, los desactiva, si no está presente el botón no hay nada que pueda desactivar. Por lo que lo primero que tienes que hacer (desdeWooCommerce o desde tu tema o la parte que muestra el read more) es que siempre muestre el botón añadir al carrito, después es cuando se aplicaría el script para que desactive los que no tienen stock.

    El código de arriba no puede dar error a no ser que ya esté abierta la sentencia de php, de ser así sobraría la primera parte de <?php y quedaría:

    
    if ( is_page() ) : ?>
    	<script>
    		$(function() {
    		var cart_button = $(".add_to_cart_button");
    		$(".add_to_cart_button").each(function() {
    			if ($(this).attr("data-quantity") < 1) {
    				$(this).prop("disabled", true);
    			}
    		});
    	});
    	</script>
    <?php endif; ?>
    

    Ya he puesto los productos en reserva para que se pueda comprar. Ahora voy a probar a poner el codigo en functions.php. La sentencia ya está abierta y cerrada así que probaré con esto (no se si lo hago bien):

    if ( is_page() ) : ?>
    	<script>
    		$(function() {
    		var cart_button = $(".add_to_cart_button");
    		$(".add_to_cart_button").each(function() {
    			if ($(this).attr("data-quantity") < 1) {
    				$(this).prop("disabled", true);
    			}
    		});
    	});
    	</script>

    He probado con ese codigo y no me funciona. He probado con este y tampoco:

    if ( is_page() ) : ?>
    	<script>
    		$(function() {
    		var cart_button = $(".add_to_cart_button");
    		$(".add_to_cart_button").each(function() {
    			if ($(this).attr("data-quantity") < 1) {
    				$(this).prop("disabled", true);
    			}
    		});
    	});
    	</script>
    <?php endif; ?>

    Me sale el siguiente error: Parse error: syntax error, unexpected end of file, expecting elseif (T_ELSEIF) or else (T_ELSE) or endif (T_ENDIF) in /usr/home/pruebasparaadrian.com/web/wp-content/themes/generatepress/functions.php on line 797

    Sigo sin ver los botones de añadir al carrito en los productos sin stock… mientras no aparezcan en el navegador difícilmente se podrán desactivar.

    ¿Puedes copiar aquí las últimas lineas del archivo php donde estás escribiendo el código? el fallo que da es por un problema de sintaxis.

Viendo 15 respuestas - de la 1 a la 15 (de un total de 23)
  • El debate ‘Dejar añadir al carrito cuando no hay stock’ está cerrado a nuevas respuestas.