Woocommerce - Afișează cantitatea în stoc pentru fiecare variație

26 iun. 2018, 13:56:47
Vizualizări: 18.4K
Voturi: 0

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

0
Toate răspunsurile la întrebare 1
5

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 );
4 iul. 2018 16:02:37
Comentarii

WP 4.6 sau 4.9.6? ;)

User User
6 iul. 2018 15:50:55

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

Granny Granny
9 iul. 2018 14:31:56

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

kierzniak kierzniak
9 iul. 2018 18:58:08

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.

Granny Granny
11 iul. 2018 09:49:20

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.

kierzniak kierzniak
11 iul. 2018 10:46:59