Woocommerce - Afișează cantitatea în stoc pentru fiecare variație
Am căutat pe Google și am încercat diferite fragmente de cod pentru a afișa cantitatea în stoc pentru variațiile de produs pe pagina de produs.
De exemplu, când selectez mărimea XXL pentru un tricou, să afișeze xx bucăți în stoc.
Nu am reușit să găsesc ceva funcțional sau cu explicații suficient de clare pentru a-l recrea.
Am încercat: https://stackoverflow.com/questions/30514596/how-get-variations-stock-quantity-woocommerce și multe altele.
Iată codul meu actual pentru butonul "Adaugă în coș":
<?php
/**
* Butonul de adăugare în coș pentru o singură variație
*
* @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>
Am încercat codul de mai jos, dar acesta îmi oferă doar 1 variație pentru XXXL și afișează cantitatea greșită din stoc.
<?php
$product_variations = $product->get_available_variations();
foreach ($product_variations as $variation) {
$var_data = $variation['attributes'];
$var_data['in_stock'] = $variation['is_in_stock'];
}
// Afișează toate atributele cu stoc disponibil sau nu sub formă de array
echo '<pre>';
print_r($var_data);
echo '</pre>';
?>
Sper că mă puteți îndruma în direcția corectă!
Cu stimă, Robbert

Afisarea cantității din stoc pentru fiecare variantă de produs este comportamentul implicit al WooCommerce. Pentru cele mai bune rezultate, atunci când dezvoltați propria temă, utilizați structura HTML implicită storefront/woocommerce și fișierele JS, apoi stilizați-le folosind CSS.
Pentru a testa dacă cantitatea din stoc pentru fiecare variantă de produs este afișată corect, am instalat un WordPress 4.9.6 curat și WooCommerce 3.4.3 și am urmat pagina Produs variabil pentru a adăuga unul.
Nu uitați să setați cantitatea din stoc pentru fiecare variantă și să adăugați preț la fiecare variantă pentru a avea un produs în stoc.
Dacă doriți să obțineți cantitatea din stoc pentru fiecare variantă din alt motiv, puteți folosi acest cod:
/**
* Obține cantitatea din stoc pentru toate variațiile
*
* @param int $product_id ID-ul produsului care are variații
*/
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;
}
/**
* UTILIZARE
*/
$variations_stock = wpse_306996_get_variations_stock_quantity( $product_id );

Presupun că codul de mai sus trebuie introdus în functions.php? Sau cum îl implementez? Nu construiesc o temă personalizată, încerc să o adaug pe un site/temă existent. Cu stimă!

Probabil ar trebui să pui acest cod în locul unde vrei să afișezi cantitatea din stoc pentru variante.

Bine, am marcat întrebarea ta cu recompensa și răspunsul pentru că nu am avut timp să le verific în ultimele zile și recompensa se termina, iar eu nu știam ce se va întâmpla cu ea. Am plasat codul în locul unde vreau să afișez numărul și nu afișează nimic. Nici măcar un singur rând.

Am actualizat răspunsul meu pentru a nu funcționa pe acțiuni. Poți pune funcția wpse_306996_get_variations_stock_quantity
în fișierul functions.php
și muta secțiunea de utilizare în fișierul șablon. Nu uita să furnizezi $product_id
al produsului care are variații de produs.
