Soporte » Plugins y Hacks » WooCommerce » categoría sin compra

  • Buenos días,

    Ante todo gracias por vuestra paciencia, soy muy novata en wordpress y avanzoa pasos agigantados por vuestra ayuda.

    Tengo instalado woocommerce y me gustaría saber si puedo tener deshabilitado el botón de añadir al carrito solo en la categoría de productos descatalogados. de momento lo que hago es poner stock agotado o borrar el precio, pero me gustaría hacerlo mas curioso.

    Muchas gracias

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

Viendo 3 respuestas - 1 de 3 (de 3 total)
  • Hola Evasonder,

    Encantado de saludarte.

    La forma más fácil de gestionarlo es con el plugin «WooCommerce Stock Manager», disponible de forma gratuita en el repositorio de WordPress. Deberás seguir marcando los productos con stock agotado pero podrás editar el mensaje de «Producto no disponible» y poner otro mensaje que estimes más oportuno.

    La opción más complicada, sería crear un Tema Hijo de tu tema actual e ir al archivo variation-add-to-cart-button.php de la ruta wp-content/plugins/woocommerce/templates/single-product/add-to-cart/. Ahí tendrá que crear un condicional para que si el producto pertenece a una categoría concreta (en tu caso, categoría descatalogados), no se muestre el botón de añadir al carrito. Y si pertenece a esa categoría, podrías mostrar un enlace tipo «Ir al formulario de contacto» para que no pierdas ese posible cliente y no te afecte demasiado al posicionamiento de tu página, pues Google valora negativamente las páginas de producto sin stock.

    Este sería el código original:

    
    defined( 'ABSPATH' ) || exit;
    
    global $product;
    ?>
    <div class="woocommerce-variation-add-to-cart variations_button">
        <?php do_action( 'woocommerce_before_add_to_cart_button' ); ?>
    
        <?php
        do_action( 'woocommerce_before_add_to_cart_quantity' );
    
        woocommerce_quantity_input( array(
            'min_value'   => apply_filters( 'woocommerce_quantity_input_min', $product->get_min_purchase_quantity(), $product ),
            'max_value'   => apply_filters( 'woocommerce_quantity_input_max', $product->get_max_purchase_quantity(), $product ),
            'input_value' => isset( $_POST['quantity'] ) ? wc_stock_amount( wp_unslash( $_POST['quantity'] ) ) : $product->get_min_purchase_quantity(), // WPCS: CSRF ok, input var ok.
        ) );
    
        do_action( 'woocommerce_after_add_to_cart_quantity' );
        ?>
    
        <button type="submit" class="single_add_to_cart_button button alt"><?php echo esc_html( $product->single_add_to_cart_text() ); ?></button>
    
        <?php do_action( 'woocommerce_after_add_to_cart_button' ); ?>
    
        <input type="hidden" name="add-to-cart" value="<?php echo absint( $product->get_id() ); ?>" />
        <input type="hidden" name="product_id" value="<?php echo absint( $product->get_id() ); ?>" />
        <input type="hidden" name="variation_id" class="variation_id" value="0" />
    </div>
    
    

    Y el código modificado quedaría así:

    
    global $product;
    ?>
    
    <?php 
    
        if (is_category( 'descatalogados' )) : ?>
    
            <a href="/contacto">Ir al formulario de contacto</a>
    
    <?php else: ?>
        
        
        <div class="woocommerce-variation-add-to-cart variations_button">
            <?php do_action( 'woocommerce_before_add_to_cart_button' ); ?>
        
            <?php
                do_action( 'woocommerce_before_add_to_cart_quantity' );
            
                woocommerce_quantity_input( array(
                    'min_value'   => apply_filters( 'woocommerce_quantity_input_min', $product->get_min_purchase_quantity(), $product ),
                    'max_value'   => apply_filters( 'woocommerce_quantity_input_max', $product->get_max_purchase_quantity(), $product ),
                    'input_value' => isset( $_POST['quantity'] ) ? wc_stock_amount( wp_unslash( $_POST['quantity'] ) ) : $product->get_min_purchase_quantity(), // WPCS: CSRF ok, input var ok.
                ) );
            
                do_action( 'woocommerce_after_add_to_cart_quantity' );
            ?>
        
            <button type="submit" class="single_add_to_cart_button button alt"><?php echo esc_html( $product->single_add_to_cart_text() ); ?></button>
        
            <?php do_action( 'woocommerce_after_add_to_cart_button' ); ?>
        
            <input type="hidden" name="add-to-cart" value="<?php echo absint( $product->get_id() ); ?>" />
            <input type="hidden" name="product_id" value="<?php echo absint( $product->get_id() ); ?>" />
            <input type="hidden" name="variation_id" class="variation_id" value="0" />
        </div>
        
    <?php endif;?>  
    

    Esperamos haberte servido de ayuda. ¡Un saludo!

    Buenos días Cyberpepe,

    muchas gracias por tu respuesta, me ha sido de gran ayuda, creo que optaré por crear tema hijo, aunque no se muy bien como funciona, porque me da miedo hacer un tema hijo y que se quede desactualizado y deje de funcionar con las actualizaciones de woocommerce.

    igual podría dejar los artículos descatalogados sin precio y entonces ya no me sale el carrito y poner un enlace que sea de contacto, por si están interesados

    Muchas gracias por tu ayuda

    Hola de nuevo Evasonder,

    No tengas miedo a investigar y probar sobre los Temas Hijo (o Child Themes), hay mucha información al respecto y una vez le coges el truquillo, verás que es muy útil. Te dejo un enlace oficial pero buscando por Google también encontrarás mucha información: https://codex.wordpress.org/es:Temas_hijos

    Si vas a poner los productos descatalogados sin precio, asegúrate bien de que no se puedan comprar a 0€, que el botón añadir al carrito desaparezca por completo. El enlace al formulario siempre te irá bien en estos casos.

    ¡Un saludo!

Viendo 3 respuestas - 1 de 3 (de 3 total)
  • Debes estar registrado para responder a este debate.