Woocommerce - Mostrar cantidad de stock por variación

26 jun 2018, 13:56:47
Vistas: 18.4K
Votos: 0

He estado buscando en Google y probando diferentes fragmentos de código para mostrar la cantidad de stock de variaciones en una página de producto.

Por ejemplo, cuando selecciono XXL para una camiseta, debería mostrar xx unidades disponibles.

No he podido encontrar nada que funcione o que tenga una explicación lo suficientemente clara para implementarlo.

He probado: https://stackoverflow.com/questions/30514596/how-get-variations-stock-quantity-woocommerce y muchas más.

Aquí está mi código actual para añadir al carrito:

<?php
/**
 * Botón de añadir al carrito para variación única
 *
 * @see https://docs.woocommerce.com/document/template-structure/
 * @package WooCommerce/Templates
 * @version 3.4.0
 */

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>

He probado el siguiente código pero solo me da 1 variable para XXXL y muestra la cantidad de stock incorrecta.

<?php
        $product_variations = $product->get_available_variations();

        foreach ($product_variations as $variation)  {
            $var_data = $variation['attributes'];
            $var_data['in_stock'] = $variation['is_in_stock'];
        }

        // Listar todos los atributos con stock disponible o no en array..
        echo '<pre>';
        print_r($var_data);
        echo '</pre>';
    ?>

¡Espero que puedan orientarme en la dirección correcta!

Saludos cordiales, Robbert

0
Todas las respuestas a la pregunta 1
5

Mostrar la cantidad de stock por variante de producto es el comportamiento predeterminado de WooCommerce. Para obtener los mejores resultados, cuando desarrolles tu propio tema, utiliza la estructura HTML y los archivos JS predeterminados de storefront/woocommerce y luego dale estilo usando CSS.

Para probar que la cantidad de stock por variante de producto se muestra correctamente, instalé un WordPress 4.9.6 limpio y WooCommerce 3.4.3 y seguí la página Producto variable para añadir uno.

Recuerda establecer la cantidad de stock por variante y añadir un precio a cada variante para tener un producto en stock.

Si deseas obtener la cantidad de stock de cada variante por algún otro motivo, puedes usar este código:

/**
 * Obtiene la cantidad de stock de todas las variantes
 * 
 * @param int $product_id ID del producto que tiene variantes
 */
function wpse_306996_get_variations_stock_quantity( $product_id ) {

    $product    = wc_get_product( $product_id );
    $variations = $product->get_available_variations();

    $variations_stock = array();

    foreach ( $variations as $variation ) {

        $variation_o = new WC_Product_Variation( $variation['variation_id'] );
        $variations_stock[] = $variation_o->get_stock_quantity();
    }

    return $variations_stock;
}

/**
 * USO
 */
$variations_stock = wpse_306996_get_variations_stock_quantity( $product_id );
4 jul 2018 16:02:37
Comentarios

¿WP 4.6 o 4.9.6? ;)

User User
6 jul 2018 15:50:55

¿Supongo que el código anterior va en functions.php? ¿O cómo lo implemento? Por cierto, no estoy construyendo un tema personalizado. Estoy intentando añadirlo a un sitio web/tema existente. ¡Saludos cordiales!

Granny Granny
9 jul 2018 14:31:56

Probablemente deberías colocar este código en el lugar donde quieras mostrar la cantidad de stock de las variantes.

kierzniak kierzniak
9 jul 2018 18:58:08

De acuerdo, marqué tu pregunta con la recompensa y la respuesta porque no tuve tiempo de revisarla los últimos días y la recompensa estaba por terminar y no sabía qué pasaría con ella. Coloqué el código en el lugar donde quiero mostrar el número y no muestra nada. Ni una sola fila.

Granny Granny
11 jul 2018 09:49:20

Actualicé mi respuesta para que no funcione en acciones. Puedes colocar la función wpse_306996_get_variations_stock_quantity en el archivo functions.php y mover la sección de uso a tu archivo de plantilla. Recuerda proporcionar el $product_id del producto que tiene variaciones.

kierzniak kierzniak
11 jul 2018 10:46:59