Produits Woocommerce affichant un message "rupture de stock" lorsqu'ils ne sont pas réellement en rupture de stock
avoir un problème avec un site Web client où les produits sont affichés au hasard
"Ce produit est actuellement en rupture de stock et disponible."
le truc c'est que nous n'avons pas de suivi des stocks activé, tous les produits devraient être en stock tout le temps.
quand je vais dans L'administrateur WordPress et que je clique sur le bouton de mise à jour pour le produit (sans rien changer) et puis le message disparaît et le "Ajouter au Panier" bouton affiche comme il se doit. Malheureusement, le problème se répète sur ces articles dans le futur et pour le corriger, je dois à nouveau mettre à jour le produit (aussi en cliquant sur mise à jour dans les paramètres de WooCommerce résout temporairement le problème).
je dois trouver un moyen de corriger ce problème de façon permanente pour qu'il ne se retourne pas lui-même.
Détails Du Site:
- Utiliser WordPress 3.9.1
- Thème 2.1.12
- PHP 5.3.10 (également essayé localement w/ 5.5.10)
Ce que j'ai essayé
- suppression de tous les plugins mais WooCommerce
- changer de thèmes (essayé tous les thèmes WordPress standard et quelques thèmes WooThemes en vain)
- mise à Jour de Thème (il a été v 2.1.5)
- inséré manuellement dans wp_postmeta en ajoutant la touche meta
_manage_stock
et réglez <!-(Comme on l'a observé dans certains des produits que nous avons) - inséré manuellement dans wp_postmeta en ajoutant la touche meta '_stock' et en la positionnant à
0
(comme observé dans certains des produits de travail que nous avons) - a comparé la 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...de rien
- Pas de mise en cache est activée
- utilisé XDebug pour suivre le
$available_variations
variablevariable.php
etclass-wc-ajax.php
etclass-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 le produit, mais sur les produits qui n'en contenaient pas, il s'agissait d'un tableau vide (ce qui fait que le message hors-stock est affiché comme servi par variable.php
). En cliquant sur le bouton de mise à jour, puis en traçant la variable affiche l'information correctement.
honnêtement à ce point je suis perdu. Je pense que le problème est quelque part dans aucun des cours, mais je ne peux pas le dire.
quelqu'un d'autre A eu des problèmes avec ça? N'importe quelle façon autour de cette question afin que je n'ai pas à mettre à jour les produits pour ce client.
lien vers un produit En rupture de stock (au moment de l'affichage) http://highlandsministriesonline.org/product/basement-tapes/resentment-in-the-church-135/
Lien vers le 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 de produit. Voici le résultat:
pour les produits avec le message "out of 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 Possibles ma prochaine pensée si je n'arrive pas à résoudre ce problème est d'écrire un script qui va passer et mettre à jour chaque produit sur le site web sur une base de nuit (depuis la fixation temporaire semble fonctionner pour au moins 24 la nôtre). Mais si je peux gagner un peu de temps, Je ne préférerais pas que quelqu'un d'autre ait pu résoudre ce problème de façon permanente.
mise à jour en date du 23 octobre 2014
ce problème persiste malgré les tentatives faites pour répondre aux questions ci-dessous. J'ai créé un plugin de journalisation pour, Je l'espère, aider à suivre fréquence des messages périmés et, espérons-le, Aide à établir une corrélation entre le message et les mesures prises sur le site web. Il est actuellement personnalisé à ce site Web spécifique, mais je travaille sur une version à partager avec vous tous de sorte que même si Je ne peux pas trouver la réponse, quelqu'un peut.
6 réponses
j'ai eu ce même problème et je pense que j'ai tout compris. J'ai utilisé la suite CSV Import/Export pour exporter toutes mes variantes. Vous remarquerez que le stock est réglé à 0
quand il doit avoir une valeur de null
.
Vous avez deux options ici:
- allez dans chaque produit individuel, cliquez sur l'onglet variations et développez chaque variation - décochez la case "Gérer les stocks":
- Vous pouvez faire un rechercher / remplacer sur la base de données remplacer la valeur 0 par null.
on est en 2017 et je vois encore le problème exact de L'OP sur un magasin en marche:
- WordPress 4.8.1
- Thème 3.1.2
- PHP 5.6
- des tonnes de plugins et un thème janky
Je n'ai pas le temps de vraiment corriger le bug--peu importe ce que c'est--mais j'ai fait un contournement.
Le problème est que $product
est absent tout ce qui est lié à la variation. Il n'y a aucune variation D'IDs, d'attributs ou de prix. Ma solution résout $product
avant qu'il ne soit utilisé dans les modèles.
Etape 1: copier le prix.modèle php dans votre thème. Naviguez vers le 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 avez déjà ce fichier, alors vous avez déjà un prix personnalisé.template php et vous pouvez sauter cette étape.
Documentation sur le fonctionnement des modèles personnalisés de WooCommerce: https://docs.woocommerce.com/document/template-structure/
Etape 2: Modifier price.php
vous venez de mettre dans votre thème. Ci-dessous global $product;
coller 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 m'ont fait croire que ça ne marchait pas au début. Pour tester si tout fonctionne, vous pouvez déposer
echo '<pre style="display: none;">';
print_r( $product );
echo '</pre>';
en haut et en bas de l' if
. Maintenant, vous pouvez inspecter la page, et juste au-dessus du prix seront les deux cachés <pre>
contenant $product
avant et après correction.
Cela fonctionne en utilisant le sync()
fonction pour forcer le produit à saisir toutes les informations de variation manquantes, puis met à jour les variables à utiliser dans les modèles. Je crois que le prix est le plus tôt toutes les données de variation est utilisé dans les modèles, mais cet extrait pourrait facilement aller plus haut dans la chaîne de modèle si nécessaire.
Edit: la correction ci-dessus ne fonctionne que pour WooCommerce 3.x. Je n'ai créer un fixation pour WC 2.x mais c'est tellement énorme et dégoûtant que je ne vais pas le poster. Si vous avez encore un 2.x store, vous devez regarder dans une sorte de refonte qui va vous permettre d'obtenir sur 3.x.
j'ai eu ce même problème avec un produit que j'avais nouvellement créé. Mais pour moi, la réponse était plus simple.
j'ai besoin d'entrer dans un "Prix normal" 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 "Add variation" était sélectionné. Puis j'ai cliqué sur le Le bouton "Go".
j'avais besoin de créer une variation pour chacun des choix différents que l'attribut pouvait avoir.
donc pour mes Options de couleur j'ai dû faire trois variations différentes (une pour chaque choix).
Puis j'ai dû cliquer sur le texte bleu "Expand", et assurez-vous que chaque variation a un prix Régulier.
(Ce qui était utile aussi: https://docs.woocommerce.com/document/variable-product/ )
essayez de supprimer le produit et de créer un même produit et essayer j'ai eu un même problème et ça a fonctionné pour moi. essayez même de réinstaller le WooCommerce 2.1.12
il pourrait s'agir d'un problème de produit. Essayez de supprimer et de Ré-ajouter le produit ou une réinstallation.
j'éprouve le même problème et je pense que j'ai trouvé la raison. C'est lié à l' sync_stock_status fonction statique de WC_Product_Variable Classe.
Vous pouvez corriger l'état du stock d'un 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 produit à un moment donné.
donc le problème semble être d'exécuter cette fonction à droite moment.
La chose intéressante est que j'ai vu dans le code et j'ai trouvé que l' modification rapide enregistrer appelle cette fonction et corrige le produit aussi!
autre chose intéressante, c'est qu'il semble que l'équipe de woocommerce l'ait réparée pour de bon, parce que je l'ai découvert à travers ce commit qu'ils appellent cette fonction Maintenant quand le produit est mis à jour.