Ein „Call to undefined function“ Fehler kommt in Verbindung mit fehlenden WooCommerce Funktionen immer dann zu Stande, wenn ein WordPress Theme oder Plugin Funktionen wie z.B. is_shop(), is_cart() oder is_product() verwendet, aber das WooCommerce Plugin nicht installiert ist. In diesem Artikel zeige ich ein kleines „Best practice“, wie wir solche Fehler zukünftig vermeiden können.
Ganz einfach erklärt, sind alle Funktionen die nicht standardmäßig in WordPress verfügbar sind, eine potentielle Fehlerquelle, wenn man nicht richtig damit umgeht. Im Bespiel von WooCommerce sind die folgenden häufig verwendeten Funktionen nur verfügbar, solang wir das WooCommerce Plugin in WordPress aktiviert haben:
Verwenden wir in WordPress ein Theme oder Plugin, welches u.a. eine der oberen WooCommerce-Funktionen in seinen eigenen Template-Dateien verwendet und deaktivieren dann das WooCommerce Plugin bzw. haben es ohnehin noch nicht aktiviert, könnte es unter Umständen zu einem „Call to undefined function“ Fehler kommen.
Tipp: Eine schnelle Lösung um wieder Zugriff auf das Frontend und Backend zu erhalten, ist das entsprechende Plugin oder Theme (je nachdem wovon die Fehlerquelle ausgeht) per FTP-Zugang zu deaktivieren.
Wenn wir nicht beachtet haben, externe Funktionen von WooCommerce nur innerhalb einer if( class_exists( 'WooCommerce' ) ) { ... }
Bedingung aufzurufen, erhalten wir eine Fehlermeldung wie diese:
Richtig ist also immer folgende Vorgehensweise, wenn wir externe Funktionen wie z.B. von WooCommerce nutzen:
Wenn wir die externen WooCommerce-Funktionen in unserem Plugin oder Theme benutzen und diese ausschließlich innerhalb der if( class_exists( 'WooCommerce' ) ) { ... }
Bedingung aufrufen, tritt zukünftig kein weiterer „Call to undefined function“ Fehler mehr auf, wenn das WooCommerce Plugin deaktiviert oder gar nicht installiert ist.
Ich persönlich mag es nicht, wenn der Code dermaßen aufgebläht ist und zu viele Bedingungen die Lesbarkeit des Codes negative beeinflussen. Arbeiten wir häufiger mit externen WooCommerce-Funktionen, wird es zum Teil sehr unübersichtlich, da der Code mit vielen Bedingungen wie if( class_exists( 'WooCommerce' ) ) { ... }
unleserlich wird.
Die folgende Möglichkeit macht das dann etwas einfacher und übersichtlicher:
Wenn wir die obere Funktion woocommerce_check()
in unserem WordPress Plugin oder Theme verfügbar machen und zukünftig anstelle der direkten WooCommerce-Funktionen wie is_shop() oder is_product(), die untere Lösung verwenden, wird es nie mehr zu ungewollten „Call to undefined function“ Fehlern kommen. Denn von nun an verwenden wir stattdessen $woo['is_shop']
oder $woo['is_product']
für diverse Template-Bedingungen.
Mit dieser Lösung müssen wir nicht jedes Mal if( class_exists( 'WooCommerce' ) ) { ... }
verwenden, wenn wir eine externe WooCommerce-Funktion nutzen. Als Resultat haben wir einen sauberen und übersichtlichen Quellcode.