Woocommerce - Mostrar cantidad de stock por variación
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

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 );

¿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!

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

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.

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.
