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:
Ce que j'ai essayé
_manage_stock
et définissez-le sur no
(comme observé dans certains des produits que nous avons)0
(comme observé dans certains des produits de travail que nous avons)$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&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&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.
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:
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 .
(Cela a également été utile: https://docs.woocommerce.com/document/variable-product/ )
Nous sommes en 2017 et je vois toujours le problème exact de l'OP sur un magasin en cours d'exécution:
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.
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.
Cela pourrait être un problème du produit. Essayez de supprimer et de rajouter le produit ou de réinstaller.
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