it-swarm.com.de

WooCommerce-Produkte, bei denen die Meldung "Nicht vorrätig" angezeigt wird, wenn sie nicht vorrätig sind

Problem mit einer Kundenwebsite, auf der Produkte nach dem Zufallsprinzip angezeigt werden

"Dieses Produkt ist derzeit nicht vorrätig und nicht verfügbar."

Die Sache ist, dass wir keine eingeschaltete Bestandsverfolgung haben, alle Produkte sollten die ganze Zeit auf Lager sein.

Wenn ich in den Admin-Bereich von WordPress gehe und auf die Aktualisierungsschaltfläche für das Produkt klicke (ohne etwas zu ändern), verschwindet die Meldung und die Schaltfläche "In den Warenkorb" wird wie gewünscht angezeigt. Leider wiederholt sich das Problem in Zukunft bei diesen Elementen und um es zu beheben, muss das Produkt erneut aktualisiert werden (auch das Klicken auf "Aktualisieren" in den WooCommerce-Einstellungen behebt das Problem vorübergehend).

Ich muss einen Weg finden, um dieses Problem dauerhaft zu beheben, damit es sich nicht von selbst zurückstellt.

Site-Details:

  • Verwenden von WordPress 3.9.1
  • WooCommerce 2.1.12
  • PHP 5.3.10 (auch lokal mit 5.5.10 ausprobiert)

Was ich ausprobiert habe

  • Entfernen aller Plugins außer WooCommerce
  • Ändern von Themen (versuchte alle Standard-Themen WordPress und einige WooThemes-Themen ohne Erfolg)
  • Aktualisiertes WooCommerce (es war v 2.1.5)
  • Manuell in wp_postmeta eingefügt, indem der Metaschlüssel _manage_stock Hinzugefügt und auf no gesetzt wird (wie in einigen unserer Arbeitsprodukte beobachtet)
  • Manuell in wp_postmeta eingefügt, indem der Metaschlüssel '_stock' hinzugefügt und auf 0 Gesetzt wird (wie in einigen unserer Arbeitsprodukte beobachtet)
  • Vergleicht die Postmeta des Produkts vor und nach dem Klicken auf die Schaltfläche "Aktualisieren", um festzustellen, ob sich etwas geändert hat, das das Problem verursachen würde ... nichts
  • Es ist kein Caching aktiviert
  • Verwendete XDebug, um die Variable $available_variations In variable.php Und class-wc-ajax.php Und class-wc-product-variable.php Zu verfolgen.

Beim Debuggen bemerkte ich, dass die Variable $available_variations In Produkten, die funktionierten, 2 Arrays mit Produktinformationen enthielt. Bei den Produkten, die dies nicht taten, handelte es sich jedoch um ein leeres Array (was dazu führte, dass die Meldung "Nicht auf Lager" angezeigt wurde angezeigt wie von variable.php) geliefert. Durch Klicken auf die Schaltfläche Aktualisieren und anschließendes Verfolgen der Variablen werden die Informationen korrekt angezeigt.

Ehrlich gesagt bin ich zu diesem Zeitpunkt ratlos. Ich denke, das Problem liegt irgendwo in einer der Klassen, aber ich kann es nicht sagen.

Hat jemand Probleme damit gehabt? Um dieses Problem zu umgehen, muss ich die Produkte für diesen Client nicht ständig aktualisieren.

Link zu einem Produkt, das nicht vorrätig ist (zum Zeitpunkt der Veröffentlichung) http://highlandsministriesonline.org/product/basement-tapes/resentment-in-the-church-135/

Link zu Produkt, das richtig angezeigt wird http://highlandsministriesonline.org/product/basement-tapes/bt0111-church-at-corinth-i/

Fehlerprotokoll Ich habe der Produktvariationsklasse ein Fehlerprotokoll hinzugefügt. Hier ist das Ergebnis:

Bei Produkten mit der Meldung "Nicht vorrätig" wird im Protokoll nichts angezeigt.

Ein Beispiel für ein Produkt, das richtig funktioniert:

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] => 
)

Mögliche nächste Schritte Mein nächster Gedanke, wenn ich das nicht lösen kann, ist, ein Skript zu schreiben, das jedes Produkt auf der Website jede Nacht aktualisiert (da der vorübergehende Fix für mindestens 24 Stunden zu funktionieren scheint). Wenn ich jedoch etwas Zeit sparen kann, würde ich es nicht bevorzugen, wenn jemand anderes dieses Problem dauerhaft lösen konnte.

Update vom 23.10.2014

Dieses Problem tritt weiterhin auf, obwohl Sie die folgenden Antworten versuchen. Ich habe ein Protokollierungs-Plug-in erstellt, um die Häufigkeit der vergriffenen Nachrichten zu verfolgen und die Nachricht hoffentlich mit den auf der Website durchgeführten Aktionen in Beziehung zu setzen. Es ist derzeit auf diese spezielle Website zugeschnitten, aber ich arbeite an einer Version, die ich mit Ihnen allen teilen kann, damit auch dann, wenn ich die Antwort nicht finde, jemand sie finden kann.

39
Ian

Ich hatte das gleiche Problem und ich denke, ich habe es herausgefunden. Ich habe die CSV-Import/Export-Suite verwendet, um alle meine Variationen zu exportieren. Sie werden feststellen, dass die Aktie auf 0 Eingestellt ist, wenn sie den Wert null haben sollte.

Hier haben Sie zwei Möglichkeiten:

  1. Gehen Sie in jedes einzelne Produkt, klicken Sie auf die Registerkarte "Variationen" und erweitern Sie jede Variation. Deaktivieren Sie das Kontrollkästchen "Lager verwalten":enter image description here
  2. Sie können Suchen und Ersetzen in der Datenbank ausführen, indem Sie den Wert 0 für null einsetzen.
6
Zach Russell

Ich bekam das gleiche Problem mit einem Produkt, das ich neu erstellt hatte. Aber für mich war die Antwort einfacher.

Ich musste für jede Variante einen „regulären Preis“ eingeben.
https://wordpress.org/support/topic/this-product-is-currently-out-of-stock-and-unavailable-4/

Ich hatte meine Attribute zuvor erstellt.

Bei Variationen musste ich für mein Produkt sicherstellen, dass „Variation hinzufügen“ ausgewählt war. Dann habe ich auf die Schaltfläche "Go" geklickt.

Ich musste eine Variation für jede der verschiedenen Auswahlmöglichkeiten erstellen, die das Attribut haben konnte.

Daher musste ich für meine Farboptionen drei verschiedene Variationen (eine für jede Auswahl) vornehmen.
Dann musste ich auf den blauen „Erweitern“ -Text klicken und sicherstellen, dass jede Variation einen regulären Preis hatte .

Dann hat es geklappt. enter image description here

(Dies war auch hilfreich: https://docs.woocommerce.com/document/variable-product/ )

4
Joe

Es ist 2017 und ich sehe immer noch das genaue Problem des OP in einem Geschäft:

  • WordPress 4.8.1
  • WooCommerce 3.1.2
  • PHP 5.6
  • unzählige Plugins und ein witziges Thema

Ich habe nicht die Zeit, den Fehler wirklich zu beheben - was auch immer es ist -, aber ich habe einen Workaround gemacht.

Das Problem ist, dass $product Alle Variationen fehlen. Es gibt keine Variations-IDs, Attribute oder Preise. Meine Problemumgehung behebt $product, Bevor es in den Vorlagen verwendet wird.

Schritt 1 : Kopieren Sie die Vorlage price.php in Ihr Theme. Navigieren Sie unter /wp-content/plugins/woocommerce/templates/single-product/price.php Zur Preisvorlage Ihres WooCommerce. Kopieren Sie das unter /wp-content/themes/my-theme/woocommerce/single-product/price.php In Ihr Thema. Wenn Sie diese Datei bereits dort haben, haben Sie bereits eine benutzerdefinierte price.php-Vorlage und können diesen Schritt überspringen.

Dokumentation zur Funktionsweise von benutzerdefinierten WooCommerce-Vorlagen: https://docs.woocommerce.com/document/template-structure/

Schritt 2 : Bearbeiten Sie das price.php, Das Sie gerade in Ihr Thema eingefügt haben. Fügen Sie unter global $product; Folgendes ein:

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();
}

Ich hatte einige Caching-Probleme, die es so erscheinen ließen, als ob es zuerst nicht funktionieren würde. Um zu testen, ob es funktioniert, können Sie fallen lassen

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

am oberen und unteren Rand des if. Jetzt können Sie die Seite inspizieren und direkt über dem Preis werden die beiden versteckten <pre> Angezeigt, die vor und nach dem Fixieren $product Enthalten.

Dies funktioniert, indem die Funktion sync() verwendet wird, um das Produkt zu zwingen, alle fehlenden Variationsinformationen abzurufen, und anschließend die Variablen für die Verwendung in Vorlagen zu aktualisieren. Ich glaube, der Preis ist der früheste der Variationsdaten, die in den Vorlagen verwendet werden, aber dieses Snippet könnte bei Bedarf leicht in der Vorlagenkette nach oben verschoben werden.

Bearbeiten: Das obige Update funktioniert nur für WooCommerce 3.x . Ich habe ein Update für WC 2.x erstellt, aber es ist so groß und eklig, dass ich es nicht posten werde. Wenn Sie noch ein 2.x-Geschäft haben, müssen Sie eine Art Überholung in Betracht ziehen, die es Ihnen ermöglicht, auf 3.x zu kommen.

4
pants

Ich habe das gleiche Problem und denke, ich habe den Grund gefunden. Dies hängt mit der statischen Funktion sync_stock_status der Klasse WC_Product_Variable zusammen.

Sie können einen variablen Produktbestandsstatus in Ihrer functions.php festlegen: add_action('wp',function(){ $productId = 639; WC_Product_Variable::sync_stock_status(639); });

Dies ist natürlich keine gute Lösung, da nur ein Produkt zu einem bestimmten Zeitpunkt repariert wird.

Das Problem scheint also, dass diese Funktion zum richtigen Zeitpunkt ausgeführt wird.

Das Interessante ist, dass ich den Code durchgesehen habe und herausgefunden habe, dass das schnelle Bearbeiten Speichern diese Funktion aufruft und das Produkt auch repariert!

Eine andere interessante Sache ist, dass es den Anschein hat, als hätte das Woocommerce-Team das Problem endgültig behoben, da ich durch this commit herausgefunden habe, dass sie diese Funktion jetzt aufrufen, wenn das Produkt aktualisiert wird.

0

Es könnte ein Problem des Produkts sein. Versuchen Sie, das Produkt zu löschen und erneut hinzuzufügen, oder installieren Sie es erneut.

0
DPC

Versuchen Sie, das Produkt zu löschen und dasselbe Produkt zu erstellen, und versuchen Sie, dass ich dasselbe Problem hatte und es für mich funktionierte. Versuchen Sie sogar, WooCommerce 2.1.12 erneut zu installieren

0
O-mkar