web-dev-qa-db-fra.com

Produits WooCommerce affichant le message «Rupture de stock» lorsqu'ils ne sont pas réellement en rupture de stock

Problème avec un site Web client où les produits s'affichent de manière aléatoire

"Ce produit est actuellement en rupture de stock et indisponible."

Le fait est que nous n'avons pas activé le suivi des stocks, tous les produits doivent être en stock tout le temps.

Lorsque j'entre dans l'administration WordPress et que je clique sur le bouton de mise à jour du produit (sans rien changer)), le message disparaît et le bouton "Ajouter au panier" s'affiche comme il se doit. Malheureusement, le problème se répète à l'avenir sur ces éléments et pour le résoudre, je dois mettre à jour le produit à nouveau (en cliquant également sur la mise à jour dans les paramètres WooCommerce résout temporairement le problème).

J'ai besoin de trouver un moyen de résoudre ce problème de façon permanente afin qu'il ne revienne pas de lui-même.

Détails du site:

  • Utilisation de WordPress 3.9.1
  • WooCommerce 2.1.12
  • PHP 5.3.10 (également essayé localement avec 5.5.10)

Ce que j'ai essayé

  • Suppression de tous les plugins sauf WooCommerce
  • Changer de thème (essayé tous les standards WordPress thèmes et quelques thèmes WooThemes en vain)
  • Mise à jour de WooCommerce (c'était la version 2.1.5)
  • Inséré manuellement dans wp_postmeta en ajoutant la touche méta _manage_stock et définissez-le sur no (comme observé dans certains des produits que nous avons)
  • Inséré manuellement dans wp_postmeta en ajoutant la méta-clé '_stock' et définissez-la sur 0 (comme observé dans certains des produits de travail que nous avons)
  • Comparé le postmeta du produit avant et après avoir cliqué sur le bouton de mise à jour pour observer si quelque chose avait changé qui causerait le problème ... rien
  • Aucune mise en cache n'est activée
  • XDebug utilisé pour suivre le $available_variations variable dans variable.php et class-wc-ajax.php et class-wc-product-variable.php.

Lors du débogage, j'ai remarqué que dans les produits qui fonctionnaient, le $available_variations la variable contenait 2 tableaux remplis d'informations sur les produits, mais sur les produits qui ne l'étaient pas, il s'agissait d'un tableau vide (ce qui entraîne l'affichage du message de rupture de stock tel que servi par variable.php). Cliquer sur le bouton de mise à jour puis suivre la variable affiche correctement les informations.

Honnêtement, à ce stade, je suis perdu. Je pense que le problème est quelque part dans l'une ou l'autre des classes, mais je ne peux pas le dire.

Quelqu'un d'autre a-t-il eu des problèmes avec cela? Quoi qu'il en soit, je n'ai pas besoin de continuer à mettre à jour les produits pour ce client.

Lien vers un produit en rupture de stock (au moment de la publication) http://highlandsministriesonline.org/product/basement-tapes/resentment-in-the-church-135/

Lien vers un produit qui s'affiche correctement http://highlandsministriesonline.org/product/basement-tapes/bt0111-church-at-corinth-i/

Journal des erreurs J'ai ajouté un journal des erreurs à la classe de variation du produit. Voici le résultat:

Pour les produits avec le message "rupture de stock", rien ne s'affiche dans le journal.

Un exemple de produit qui fonctionne correctement:

WC_Product_Variation Object
(
    [variation_id] => 1310
    [parent] => WC_Product_Variable Object
        (
            [children] => Array
                (
                    [0] => 1311
                    [1] => 1310
                )

            [total_stock] => 
            [id] => 1308
            [post] => WP_Post Object
                (
                    [ID] => 1308
                    [post_author] => 1
                    [post_date] => 2012-04-03 14:29:42
                    [post_date_gmt] => 2012-04-03 18:29:42
                    [post_content] => This audio presentation on homeschooling is a Basement Tape conversation on homeschooling.
<h2>What are The Basement Tapes?</h2>
<em>The Basement Tapes</em> are conversations between Dr. R.C. Sproul Jr., Rev. Laurence Windham, their friends and special guests, on subjects related to the “good life,” a simple, separate, and deliberate life, lived out for the glory of God and for the building of His Kingdom.

You might even say that the Basement Tapes serve to help us develop a Christian worldview. Started in 2002, we now have over #140 conversations on all areas of life that we are seeking to think biblically about so that we might take dominion over them for the King and His kingdom.

<strong>Format: Available in both CD and MP3</strong>

<strong>Length: Sixty minutes</strong>
                    [post_title] => Basement Tape #109: Homeschooling Redux
                    [post_excerpt] => It's been 108 weeks since we last talked about the subject of homeschooling our children. Our tykes have grown into teenagers. What have we learned in the past nine years? What has changed? What remains the same is that homeschooling means discipleship; passing down your most important convictions to your children and teaching them our holy religion.
                    [post_status] => publish
                    [comment_status] => open
                    [ping_status] => closed
                    [post_password] => 
                    [post_name] => bt0109-homeschooling-reducks
                    [to_ping] => 
                    [pinged] => 
                    [post_modified] => 2014-07-07 11:08:46
                    [post_modified_gmt] => 2014-07-07 15:08:46
                    [post_content_filtered] => 
                    [post_parent] => 0
                    [guid] => http://50.57.190.158/?post_type=product&#038;p=1308
                    [menu_order] => 0
                    [post_type] => product
                    [post_mime_type] => 
                    [comment_count] => 0
                    [filter] => raw
                )

            [product_type] => variable
        )

    [variation_data] => Array
        (
            [attribute_pa_audio-options] => mp3-download
        )

    [variation_has_length] => 
    [variation_has_width] => 
    [variation_has_height] => 
    [variation_has_weight] => 
    [variation_has_stock] => 
    [variation_has_sku] => 1
    [variation_shipping_class] => 
    [variation_shipping_class_id] => 
    [variation_has_tax_class] => 
    [variation_has_downloadable_files] => 1
    [id] => 1308
    [post] => WP_Post Object
        (
            [ID] => 1308
            [post_author] => 1
            [post_date] => 2012-04-03 14:29:42
            [post_date_gmt] => 2012-04-03 18:29:42
            [post_content] => This audio presentation on homeschooling is a Basement Tape conversation on homeschooling.
<h2>What are The Basement Tapes?</h2>
<em>The Basement Tapes</em> are conversations between Dr. R.C. Sproul Jr., Rev. Laurence Windham, their friends and special guests, on subjects related to the “good life,” a simple, separate, and deliberate life, lived out for the glory of God and for the building of His Kingdom.

You might even say that the Basement Tapes serve to help us develop a Christian worldview. Started in 2002, we now have over #140 conversations on all areas of life that we are seeking to think biblically about so that we might take dominion over them for the King and His kingdom.

<strong>Format: Available in both CD and MP3</strong>

<strong>Length: Sixty minutes</strong>
            [post_title] => Basement Tape #109: Homeschooling Redux
            [post_excerpt] => It's been 108 weeks since we last talked about the subject of homeschooling our children. Our tykes have grown into teenagers. What have we learned in the past nine years? What has changed? What remains the same is that homeschooling means discipleship; passing down your most important convictions to your children and teaching them our holy religion.
            [post_status] => publish
            [comment_status] => open
            [ping_status] => closed
            [post_password] => 
            [post_name] => bt0109-homeschooling-reducks
            [to_ping] => 
            [pinged] => 
            [post_modified] => 2014-07-07 11:08:46
            [post_modified_gmt] => 2014-07-07 15:08:46
            [post_content_filtered] => 
            [post_parent] => 0
            [guid] => http://50.57.190.158/?post_type=product&#038;p=1308
            [menu_order] => 0
            [post_type] => product
            [post_mime_type] => 
            [comment_count] => 0
            [filter] => raw
        )

    [product_type] => variation
    [product_custom_fields] => Array
        (
            [_sku] => Array
                (
                    [0] => BT0109MP3
                )

            [_price] => Array
                (
                    [0] => 3
                )

            [_sale_price] => Array
                (
                    [0] => 
                )

            [_weight] => Array
                (
                    [0] => 
                )

            [_length] => Array
                (
                    [0] => 
                )

            [_width] => Array
                (
                    [0] => 
                )

            [_height] => Array
                (
                    [0] => 
                )

            [_stock] => Array
                (
                    [0] => 
                )

            [_thumbnail_id] => Array
                (
                    [0] => 0
                )

            [_virtual] => Array
                (
                    [0] => yes
                )

            [_downloadable] => Array
                (
                    [0] => yes
                )

            [_download_limit] => Array
                (
                    [0] => 
                )

            [_downloadable_files] => Array
                (
                    [0] => a:1:{s:32:"a0a87d43e69ed9de646ba479c252c9fb";a:2:{s:4:"name";s:29:"109-Homeschooling-Reducks.mp3";s:4:"file";s:113:"http://highlandsministriesonline.org/wp-content/uploads/woocommerce_uploads/2012/04/109-Homeschooling-Reducks.mp3";}}
                )

            [_regular_price] => Array
                (
                    [0] => 3
                )

            [_sale_price_dates_from] => Array
                (
                    [0] => 
                )

            [_sale_price_dates_to] => Array
                (
                    [0] => 
                )

            [_download_expiry] => Array
                (
                    [0] => 
                )

            [attribute_pa_audio-options] => Array
                (
                    [0] => mp3-download
                )

        )

    [sku] => BT0109MP3
    [downloadable_files] => a:1:{s:32:"a0a87d43e69ed9de646ba479c252c9fb";a:2:{s:4:"name";s:29:"109-Homeschooling-Reducks.mp3";s:4:"file";s:113:"http://highlandsministriesonline.org/wp-content/uploads/woocommerce_uploads/2012/04/109-Homeschooling-Reducks.mp3";}}
    [downloadable] => yes
    [virtual] => yes
    [sale_price_dates_from] => 
    [sale_price_dates_to] => 
    [price] => 3
    [regular_price] => 3
    [sale_price] => 
    [total_stock] => 0
    [dimensions] => 
)

Prochaines étapes potentielles Ma prochaine pensée si je ne parviens pas à résoudre ce problème est d'écrire un script qui passera en revue et mettra à jour chaque produit sur le site Web tous les soirs (puisque le correctif temporaire semble fonctionner pour au moins 24 nôtres). Cependant, si je peux gagner un peu de mon temps, je ne préférerais pas que quelqu'un d'autre soit en mesure de résoudre ce problème de manière permanente.

Mise à jour au 23 octobre 2014

Ce problème persiste malgré les tentatives de réponse ci-dessous. J'ai créé un plugin de journalisation pour, espérons-le, aider à suivre la fréquence des messages en rupture de stock et, espérons-le, à corréler le message avec toutes les actions effectuées sur le site Web. Il est actuellement personnalisé pour ce site Web spécifique, mais je travaille sur une version à partager avec vous afin que même si je ne trouve pas la réponse, quelqu'un le puisse.

39
Ian

J'ai eu ce même problème et je pense que je l'ai compris. J'ai utilisé la suite CSV Import/Export pour exporter toutes mes variantes. Vous remarquerez que le stock est défini sur 0 quand il doit avoir la valeur null.

Vous avez deux options ici:

  1. Accédez à chaque produit individuel, cliquez sur l'onglet Variations et développez chaque variation en décochant la case "Gérer le stock":enter image description here
  2. Vous pouvez effectuer une recherche et un remplacement sur la base de données en remplaçant la valeur 0 par null.
6
Zach Russell

J'obtenais ce même problème avec un produit que j'avais nouvellement créé. Mais pour moi, la réponse était plus simple.

Je devais entrer un "prix régulier" pour chaque variation.
https://wordpress.org/support/topic/this-product-is-currently-out-of-stock-and-unavailable-4/

J'avais créé mes attributs auparavant.

Sous Variations, pour mon produit, je devais m'assurer que "Ajouter une variation" était sélectionné. Ensuite, j'ai cliqué sur le bouton "Go".

J'avais besoin de créer une variation pour chacun des différents choix que l'attribut pourrait avoir.

Donc, pour mes options de couleur, j'ai dû faire trois variations différentes (une pour chaque choix).
Ensuite, je devais cliquer sur le texte bleu "Développer" et m'assurer que chaque variation avait un prix régulier .

Ensuite, cela a fonctionné. enter image description here

(Cela a également été utile: https://docs.woocommerce.com/document/variable-product/ )

4
Joe

Nous sommes en 2017 et je vois toujours le problème exact de l'OP sur un magasin en cours d'exécution:

  • WordPress 4.8.1
  • WooCommerce 3.1.2
  • PHP 5.6
  • des tonnes de plugins et un thème janky

Je n'ai pas le temps de corriger vraiment le bogue - quel qu'il soit - mais j'ai fait une solution de contournement.

Le problème est que $product Manque tout ce qui concerne la variation. Il n'y a aucun ID, attribut ou prix de variation. Ma solution de contournement corrige $product Avant qu'il ne soit utilisé dans les modèles.

Étape 1 : copiez le modèle price.php dans votre thème. Accédez au modèle de prix de votre WooCommerce à /wp-content/plugins/woocommerce/templates/single-product/price.php. Copiez cela dans votre thème à /wp-content/themes/my-theme/woocommerce/single-product/price.php. Si vous disposez déjà de ce fichier, vous disposez déjà d'un modèle price.php personnalisé et vous pouvez ignorer cette étape.

Documentation sur le fonctionnement des modèles personnalisés WooCommerce: https://docs.woocommerce.com/document/template-structure/

Étape 2 : Modifiez le price.php Que vous venez de mettre dans votre thème. Sous global $product; Collez ceci:

if ( $product->is_type( 'variable' ) ) {
  // this is a variable product, so let's ensure $product is set up correctly

  // force the product to sync with its variations
  $product->sync( $product->id );
  // update $product with the synced product
  $pf = new WC_Product_Factory();
  $product = $pf->get_product( $product->id );
  // update utility variables used in the variable.php template
  $available_variations = $product->get_available_variations();
  $attributes = $product->get_variation_attributes();
}

J'ai eu quelques problèmes de mise en cache qui l'ont fait apparaître comme si cela ne fonctionnait pas au début. Pour tester si cela fonctionne, vous pouvez laisser tomber

echo '<pre style="display: none;">';
print_r( $product );
echo '</pre>';

en haut et en bas du if. Vous pouvez maintenant inspecter la page, et juste au-dessus du prix seront les deux <pre> Contenant $product Cachés avant et après la correction.

Cela fonctionne en utilisant la fonction sync() pour forcer le produit à récupérer toutes les informations de variation manquantes, puis met à jour les variables à utiliser dans les modèles. Je pense que le prix est le plus ancien des données de variation utilisées dans les modèles, mais cet extrait pourrait facilement remonter dans la chaîne des modèles si nécessaire.

Edit: Le correctif ci-dessus ne fonctionne que pour WooCommerce 3.x . J'ai créé un correctif pour WC 2.x mais il est tellement énorme et dégoûtant que je ne le publierai pas. Si vous avez encore un magasin 2.x, vous devez examiner une sorte de refonte qui vous permettra de passer à 3.x.

4
pants

Je rencontre le même problème et je pense avoir trouvé la raison. Il est lié à la fonction statique sync_stock_status de la classe WC_Product_Variable .

Vous pouvez corriger un état de stock de produit variable en l'exécutant dans vos fonctions.php: add_action('wp',function(){ $productId = 639; WC_Product_Variable::sync_stock_status(639); });

Bien sûr, ce n'est pas une bonne solution car elle ne corrige qu'un seul produit à un moment particulier.

Le problème semble donc exécuter cette fonction au bon moment.

La chose intéressante est que j'ai vu à travers le code et j'ai découvert que le enregistrement rapide appelle cette fonction et corrige également le produit!

Une autre chose intéressante est qu'il semble que l'équipe de woocommerce l'ait corrigé pour de bon, car j'ai découvert via this commit qu'elle appelle cette fonction maintenant lorsque le produit est mis à jour.

0
Pablo S G Pacheco

Cela pourrait être un problème du produit. Essayez de supprimer et de rajouter le produit ou de réinstaller.

0
DPC

Essayez de supprimer le produit et créez un même produit et essayez que j'ai eu le même problème et cela a fonctionné pour moi. essayez même de réinstaller WooCommerce 2.1.12

0
O-mkar