Woocommerce - Mostrare la quantità di stock per variazione

26 giu 2018, 13:56:47
Visualizzazioni: 18.4K
Voti: 0

Ho cercato su Google e provato diversi frammenti di codice per visualizzare la quantità di stock delle variazioni nella pagina del prodotto.

Ad esempio, quando seleziono XXL per una maglietta, dovrebbe mostrare "xx disponibili".

Non sono riuscito a trovare nulla che funzioni o che abbia una spiegazione sufficientemente chiara da poterlo replicare.

Ho provato: https://stackoverflow.com/questions/30514596/how-get-variations-stock-quantity-woocommerce e molti altri.

Ecco il mio codice corrente per il pulsante "Aggiungi al carrello":

<?php
/**
 * Pulsante "Aggiungi al carrello" per variazione singola
 *
 * @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>

Ho provato il codice qui sotto ma mi restituisce solo 1 variazione per XXXL e mostra la quantità di stock sbagliata.

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

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

        // Elenco di tutti gli attributi con stock disponibile o meno in array..
        echo '<pre>';
        print_r($var_data);
        echo '</pre>';
    ?>

Spero che possiate indicarmi la direzione giusta!

Cordiali saluti, Robbert

0
Tutte le risposte alla domanda 1
5

Mostrare la quantità di stock per ogni variante di prodotto è il comportamento predefinito di WooCommerce. Per i migliori risultati, quando sviluppi il tuo tema, utilizza la struttura HTML predefinita di storefront/woocommerce e i file JS, quindi personalizzali utilizzando gli stili CSS.

Per testare che la quantità di stock per variante di prodotto venga visualizzata correttamente, ho installato una versione pulita di WordPress 4.9.6 e WooCommerce 3.4.3 e ho seguito la pagina Prodotto variabile per aggiungerne uno.

Ricorda di impostare la quantità di stock per ogni variante e di aggiungere un prezzo a ciascuna variante per avere un prodotto disponibile in magazzino.

Se vuoi ottenere la quantità di stock di ogni variante per qualche altro motivo, puoi usare questo codice:

/**
 * Ottieni la quantità di stock di tutte le varianti
 * 
 * @param int $product_id ID del prodotto che ha le varianti
 */
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;
}

/**
 * UTILIZZO
 */
$variations_stock = wpse_306996_get_variations_stock_quantity( $product_id );
4 lug 2018 16:02:37
Commenti

WP 4.6 o 4.9.6? ;)

User User
6 lug 2018 15:50:55

immagino che il codice sopra vada inserito in functions.php? O come lo implemento? Non sto creando un tema personalizzato, sto cercando di aggiungerlo a un sito/tema esistente. Cordiali saluti!

Granny Granny
9 lug 2018 14:31:56

Probabilmente dovresti inserire questo codice nel punto in cui vuoi visualizzare la quantità di stock delle varianti.

kierzniak kierzniak
9 lug 2018 18:58:08

Va bene, ho contrassegnato la tua domanda con il bounty e la risposta perché non ho avuto tempo di controllarla negli ultimi giorni e il bounty stava per scadere e non sapevo cosa sarebbe successo. Ho inserito il codice nel punto in cui voglio visualizzare il numero e non restituisce nulla. Neanche una singola riga.

Granny Granny
11 lug 2018 09:49:20

Ho aggiornato la mia risposta per non lavorare sulle azioni. Puoi inserire la funzione wpse_306996_get_variations_stock_quantity nel file functions.php e spostare la sezione di utilizzo nel tuo file template. Ricordati di fornire l'$product_id del prodotto che ha le varianti.

kierzniak kierzniak
11 lug 2018 10:46:59