web-dev-qa-db-fra.com

Comment obtenir la quantité de stock de variation woocommerce

Je développe un thème pour wordpress et woocommerce.

J'ai besoin de montrer le stock de variations.

<p class="stock-m13"><?php echo $product->get_stock_quantity(); ?></p>

(ici: Comment obtenir la quantité de stock d'un article de woocommerce? ) mais ce code ne me montre que la quantité de stock globale, pas chaque quantité de variation.

J'ai besoin d'une autre fonction pour obtenir la quantité de variation? Ou est-il possible que mon code ne soit pas terminé (je pense que c'est parce que j'ai utilisé le thème Twenty Fifteen et que la quantité de variation est affichée)?

J'essaie d'obtenir la quantité maximale avec ceci:

<?php
    foreach ($product->get_available_variations() as $key) {
        echo $key['max_qty'] .'<br/>';
    }
?>

Et je comprends, mais je ne sais pas si cela est utile lorsque le stock baisse.

12
SeiyaJapon

Ok, avec ça je peux prendre la quantité. Mais ce n'est pas utile.

Avec cela, je peux préparer un code qui fait différentes phrases, une pour chaque produit, et montrer quand une variation sera sélectionnée en utilisant jquery.

Mais ce n'est pas une bonne idée. N'est pas élégant. Je pensais que j'avais quelque chose comme

$product->get_variation_price()

Ce code renvoie le prix de variation lorsque est sélectionné. Mais

$product->get_stock_quantity();

ne change pas lorsque la variation est sélectionnée, car montrez-moi le stock mondial.

Quelqu'un peut-il me donner une solution élégante? Ou n'existe pas?

MISE À JOUR

Enfin j'ai utilisé

$product->get_available_variations()

Pour obtenir les données.

Avec cela, j'ai généré du code html, caché avec css, et je le montre quand je clique sur la couleur de la variation.

1
SeiyaJapon

Étant donné un produit variable avec plusieurs variations afin d'obtenir chaque quantité de stock de variation:

function get_stock_variations_from_product(){
    global $product;
    $variations = $product->get_available_variations();
    foreach($variations as $variation){
         $variation_id = $variation['variation_id'];
         $variation_obj = new WC_Product_variation($variation_id);
         $stock = $variation_obj->get_stock_quantity();
    }
}

C'est la façon la plus propre que j'ai trouvée pour WC 2.5, je pense qu'il pourrait y avoir de meilleures façons en termes de performances mais pas aussi propres.

6
db306

Le code ci-dessous imprimera tous les attributs avec la variable 'is_in_stock'.

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

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

    //List all attributes with stock available or not array..
    echo '<pre>';
    print_r($var_data);
    echo '</pre>';
    die;
?>
2
Faisal Alvi

Oui, votre façon est la bonne façon de saisir le stock d'une variation.

Tant que vous obtenez les variations fraîches de la base de données chaque fois que vous devez utiliser sa quantité en stock, vous devriez être d'accord avec cette méthode.

******* MIS À JOUR

Je ne suis pas sûr de comprendre ce que vous essayez de faire. Vous devriez juste être en mesure de saisir les deux stocks de variations et de les envoyer à jquery pour jouer avec.

$product_variable = new WC_Product_Variable($product->id);
$product_variations = $product_variable->get_available_variations();

foreach ($product_variations as $variation)  {
  $stock[$variation['attribute_pa_variation-name']] = $variation['max_qty'];
}

Ici, j'attribue le niveau de stock à un tableau associatif avec attribut_pa_ "votre-nom-d'attribut" comme clé

Maintenant, je peux envoyer mon tableau vers jQuery.

Veuillez clarifier si je comprends mal la question.

2
Tuesdave