Diese Webseite befindet sich derzeit im Aufbau !

WooCommerce – Call to undefined function – Best practice

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.

Warum kommt es zu einem Fatal error?

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:

  • is_shop() – Wir befinden uns auf der Shop Hauptseite.
  • is_cart() – Wir befinden uns auf der Warenkorb-Seite.
  • is_checkout() – Wir befinden uns auf der Checkout-Seite.
  • is_account_page() – Wir befinden uns auf einer Shop-Account Seite.
  • is_woocommerce() – Es handelt sich um eine WooCommerce Seite,
  • is_product() – Wir sind auf einer Produktseite.
  • is_product_category() – Wir befinden uns auf einer Produktkategorie-Seite.
  • is_product_tag() – Wir befinden uns auf einer Produktschlagwort-Seite.
  • usw.

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.

class_exists( ‚WooCommerce‘ ) als Lösung für Call to undefined function Fehler

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.

Wie können wir das noch besser machen?

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:

Wie wenden wir diese Funktion an?

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.