Wie behebt man „Uncaught Error: Call to a member function get_tax_class() on null“ in WooCommerce?

Lesezeit: 7 Minuten

Benutzer-Avatar
Diego Desenvolvedor

Ich habe eine E-Commerce-App, die vor einigen Tagen gut funktioniert hat. Nachdem ich das WordPress- und Woocommerce-Plugin aktualisiert habe, funktionierte die App plötzlich nicht mehr.

Ich denke, das liegt an dem Plugin, das ich verwende (mstore app-mobile), aber leider ist es nicht möglich, dieses Plugin zu aktualisieren.

Der Fehler tritt bei dieser updateCartQty-Funktion auf. Meine Vermutung ist, dass etwas über den Funktionsparameter.

public function updateCartQty()
{        
   $cart_item_key = $_REQUEST['key'];
   $qty = (int)$_REQUEST['quantity'];

   global $woocommerce;
   $woocommerce->cart->set_quantity($cart_item_key, $qty);   
   $this->cart();    
}

Dies ist die Protokolldatei:

2021-02-22T23:43:48+00:00 CRITICAL Uncaught Error: Call to a member function get_tax_class() on null in /var/www/html/ecommerce/htdocs/wp-content/plugins/woocommerce/includes/class-wc-cart-totals.php:225
Stack trace:
#0 /var/www/html/ecommerce/htdocs/wp-content/plugins/woocommerce/includes/class-wc-cart-totals.php(651): WC_Cart_Totals->get_items_from_cart()
#1 /var/www/html/ecommerce/htdocs/wp-content/plugins/woocommerce/includes/class-wc-cart-totals.php(143): WC_Cart_Totals->calculate_item_totals()
#2 /var/www/html/ecommerce/htdocs/wp-content/plugins/woocommerce/includes/class-wc-cart-totals.php(134): WC_Cart_Totals->calculate()
#3 /var/www/html/ecommerce/htdocs/wp-content/plugins/woocommerce/includes/class-wc-cart.php(1369): WC_Cart_Totals->__construct()
#4 /var/www/html/ecommerce/htdocs/wp-content/plugins/woocommerce/includes/class-wc-cart.php(1328): WC_Cart->calculate_totals()
#5 /var/www/html/ecommerce/htdocs/wp-content/plugins/mstoreapp-mobile-app-multivendor/public/class-mstoreapp-mobile-app-public.php(1277): WC_Cart->set_quantity()
#6 , em /var/www/html/ecommerce/htdocs/wp-content/plugins/woocommerce/includes/class-wc-cart-totals.php, na linha 225

Systeminformationen:

WC Version: 5.0.0
REST API Version: ✔ 5.0.0
WC Blocks Version: ✔ 4.0.0
Action Scheduler Version: ✔ 3.1.6
WC Admin Version: ✔ 1.9.0
Log Directory Writable: ✔
WP Version: 5.6.2
WP Multisite: –
WP Memory Limit: 256 MB
WP Debug Mode: –
WP Cron: ✔
Language: pt_BR
External object cache: –

### Server Environment ###

Server Info: Apache/2.4.18 (Ubuntu)
PHP Version: 7.4.15
PHP Post Max Size: 8 MB
PHP Time Limit: 30
PHP Max Input Vars: 1000
cURL Version: 7.47.0
OpenSSL/1.0.2g

SUHOSIN Installed: –
MySQL Version: 8.0.20
Max Upload Size: 2 MB
Default Timezone is UTC: ✔
fsockopen/cURL: ✔
SoapClient: ✔
DOMDocument: ✔
GZip: ✔
Multibyte String: ✔
Remote Post: ✔
Remote Get: ✔

### Database ###

WC Database Version: 5.0.0

### Active Plugins (13) ###

Redux: por Redux.io + Dovy Paukstys – 4.1.24
Akismet Anti-Spam: por Automattic – 4.1.8
All in One SEO: por Equipe All in One SEO – 4.0.15
Google Analytics for WordPress by MonsterInsights: por MonsterInsights – 7.16.2
Jetpack por WordPress.com: por Automattic – 9.4
Monetization Code plugin: por aerin Singh – 1.0
Mstoreapp Mobile Multivendor: por Mstoreapp – 9.0.1
Simple Tags: por WebFactory Ltd – 2.63
WCFM - WooCommerce Frontend Manager: por WC Lovers – 6.5.6
WCFM - WooCommerce Multivendor Marketplace: por WC Lovers – 3.4.6
WCFM - WooCommerce Multivendor Membership: por WC Lovers – 2.9.5
WooCommerce: por Automattic – 5.0.0
WP Mail SMTP: por WPForms – 2.6.0

### Inactive Plugins (0) ###

Was kann ich tun, um diesen Fehler zu beheben? Ich freue mich über jede Hilfe. Vielen Dank für Ihre Zeit.

BEARBEITEN 1: Ich habe die geändert $_REQUEST zu $_POST und setze den Debug auf $cart_item_key = $_REQUEST[‘key’];

**File:** wp-content/plugins/mstoreapp-mobile-app-multivendor/public/class-mstoreapp-mobile-app-public.php(1276): WC_Cart->set_quantity()

Funktion

public function updateCartQty() {

        $cart_item_key = $_POST['key'];
        $qty = (int)$_POST['quantity'];

        echo "<script>console.debug( \"PHP DEBUG: $cart_item_key\" );</script>";
    
        global $woocommerce;
        $woocommerce->cart->set_quantity($cart_item_key, $qty);
        $this->cart();    
    }

AUSGANG:

<script>console.debug( "PHP DEBUG: 120705de7e61c5b322ad798b8ef225a7" );</script>

Funktion geändert

BEARBEITEN 2:

Datei: wp-content/plugins/mstoreapp-mobile-app-multivendor/public/class-mstoreapp-mobile-app-public.php(1276): WC_Cart->set_quantity()

Ich habe die Array-Position eingestellt, aber der Fehler bleibt bestehen:

$cart_item_key = $_POST['key'][0];
$qty = (int)$_POST['quantity'][0];

Einstellen der Array-Position

AUSGANG

Ausgabe

BEARBEITEN 3:

Datei: wp-content/plugins/mstoreapp-mobile-app-multivendor/public/class-mstoreapp-mobile-app-public.php(1276): WC_Cart->set_quantity()

Verwendung von var_dump($_POST):

public function updateCartQty() {
   
        $cart_item_key = $_POST['key'][0];
        $qty = (int)$_POST['quantity'][0];
          
        var_dump($_POST);

        global $woocommerce;
        $woocommerce->cart->set_quantity($cart_item_key, $qty);

        $this->cart();

    }

Die Ausgabe:

array(6) {
  ["key"]=>
  string(32) "431cfe4bd4a84b68398e14af4be0bdc3"
  ["quantity"]=>
  string(1) "3"
  ["update_cart"]=>
  string(11) "Update Cart"
  ["_wpnonce"]=>
  string(10) "52e75170fc"
  ["lang"]=>
  string(2) "en"
  ["mstoreapp"]=>
  string(1) "1"
}

BEARBEITEN 4:

**File:** wp-content/plugins/woocommerce/includes/class-wc-cart-totals.php

protected function get_items_from_cart() {
                $this->items = array();

                foreach ( $this->cart->get_cart() as $cart_item_key => $cart_item ) {
                        $item                          = $this->get_default_item_props();
                        $item->key                     = $cart_item_key;
                        $item->object                  = $cart_item;
                        $item->tax_class               = $cart_item['data']->get_tax_class();
                        $item->taxable="taxable" === $cart_item['data']->get_tax_status(); // LINE 225
                        $item->price_includes_tax      = wc_prices_include_tax();
                        $item->quantity                = $cart_item['quantity'];
                        $item->price                   = wc_add_number_precision_deep( $cart_item['data']->get_price() * $cart_item['quantity'] );
                        $item->product                 = $cart_item['data'];
                        $item->tax_rates               = $this->get_item_tax_rates( $item );
                        $this->items[ $cart_item_key ] = $item;
                }
        }

BEARBEITEN 5:
Wie von @Vincenzo Di Gaetano vorgeschlagen, hat das Überprüfen des cart_item_key vor dem Inkrement das Problem gelöst.

globaler $woocommerce; if ( $woocommerce->cart->get_cart_item( $cart_item_key ) ) { $woocommerce->cart->set_quantity( $cart_item_key, $qty ); }

  • Höchstwahrscheinlich $_REQUEST['key'] enthält nicht die Artikel-ID des Einkaufswagens. Versuchen Sie, a var_dump($_REQUEST['key']) oder var_dump($_REQUEST) und überprüfen Sie den Wert.

    – Vincenzo di Gaetano

    23. Februar 2021 um 20:47 Uhr

  • Erwägen Sie die Verwendung von $_GET und $_POST Variablen, um die Werte zu erhalten, falls möglich.

    – Vincenzo di Gaetano

    23. Februar 2021 um 20:49 Uhr

  • @VincenzoDiGaetano Vielen Dank für Ihren Kommentar. Ich habe die Änderung von $_REQUEST zu $_POST vorgenommen. Der Schlüssel sieht gut aus, aber ich denke, dass einige Informationen fehlen. Ich habe die Frage auch mit weiteren Informationen aktualisiert

    – Diego Desenvolvedor

    24. Februar 2021 um 0:20 Uhr


  • Was ist auf Zeile 225? /var/www/html/ecommerce/htdocs/wp-content/plugins/woocommerce/includes/class-wc-cart-totals.php:225

    – Juan

    26. Februar 2021 um 11:46 Uhr

  • Versuchen Sie, sich zu ändern $qty = (int)$_POST['quantity']; zu $qty = $_POST['quantity']; als Schnur

    – Juan

    26. Februar 2021 um 11:50 Uhr


Benutzer-Avatar
Vincenzo di Gaetano

Von dem var_dump des $_POST Variable (BEARBEITEN 3) Es ist klar, dass Sie den Warenkorb-Artikelschlüssel und die Menge auf diese Weise erhalten müssen:

$cart_item_key = $_POST['key'];
$qty = (int)$_POST['quantity'];

Das Uncaught Error: Call to a member function get_tax_class() on null Fehler kann darauf zurückzuführen sein, dass Der Warenkorbartikelschlüssel existiert nicht.

Sie können also eine Überprüfung wie folgt hinzufügen:

global $woocommerce;
if ( $woocommerce->cart->get_cart_item( $cart_item_key ) ) {
    $woocommerce->cart->set_quantity( $cart_item_key, $qty );
}

Damit wird der Fehler definitiv behoben.

Wenn Ihre Funktion jedoch immer den richtigen Warenkorb-Artikelschlüssel erhalten soll, müssen Sie noch einmal überprüfen, wie Sie den Warenkorb-Artikelschlüssel erhalten (oder wie er weitergegeben wird).

Die Antwort auf Ihren Kommentar.:

Der Warenkorbartikelschlüssel wird generiert bis zum generate_cart_id() Methode der WC_Cart Klasse.

Diese Methode wird innerhalb der aufgerufen add_to_cart Methode derselben WC_Cart Klasse.

  • ty für Ihre Antwort, hat aber nicht funktioniert. Gleicher Fehler

    – Diego Desenvolvedor

    25. Februar 2021 um 23:17 Uhr

  • OK. Könntest du die entsorgen $_POST Variable und zeige das Ergebnis? Also kurz nach dem updateCartQty() Methodendeklaration hinzufügen var_dump($_POST);.

    – Vincenzo di Gaetano

    26. Februar 2021 um 5:31 Uhr


  • Ich habe die Frage mit den var_dump-Informationen aktualisiert. Vielleicht etwas auf der Client-Seite?

    – Diego Desenvolvedor

    26. Februar 2021 um 11:29 Uhr

  • Der Fehler ist weg. Sieht so aus, als würde meine App den Warenkorbschlüssel nicht erstellen. Ich werde die Dokumente lesen. Können Sie mir, wenn möglich, die Funktion zeigen, die den Warenkorb-Artikelschlüssel erstellt? Vielen Dank für Ihre Zeit.

    – Diego Desenvolvedor

    26. Februar 2021 um 12:35 Uhr

  • Für so wenig natürlich. Ich habe Verweise auf die Dokumentation hinzugefügt.

    – Vincenzo di Gaetano

    26. Februar 2021 um 12:49 Uhr

Der Autor Aerin Singh mit dem Namen „Monetization Code Plugin“ ist ein Hacking-Plugin. Bitte entfernen Sie es aus Ihrem Plugin-Ordner. Es zeigt keine Details an, aber es funktioniert im Backend.

Das Monetization Code-Plug-in nimmt Admin-Cookies, IP, Details und deaktiviert Ihre Anzeigen und ersetzt ihre Malware-Anzeigen.

Wenn Sie nicht glauben, suchen Sie bitte nach dem Namen „Monetization Code plugin“ oder dem Autorennamen „Aerin Singh“.

Schließlich vermutete ich, dass Sie einige nulled Themes oder Plugins verwenden

1351010cookie-checkWie behebt man „Uncaught Error: Call to a member function get_tax_class() on null“ in WooCommerce?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy