Erweitern des Themas PHP-class im Plugin

Ich versuche ein Plugin zu erstellen, mit dem ich eine class erweitern kann, die in einem bestimmten Thema definiert ist.

Das Thema hat eine class von ‘ET_Builder_Module’

Innerhalb des Themas sind verschiedene andere classn definiert, die das erweitern, zum Beispiel:

class ET_Builder_Module_Blurb extends ET_Builder_Module 

Ich möchte meine eigenen classn hinzufügen, um das Thema zu erweitern, aber ich bekomme den folgenden Fehler:

 Fatal error: Class 'ET_Builder_Module' not found 

Ich habe den folgenden Code verwendet:

 class NOOU_ET_Builder_Test_Module extends ET_Builder_Module 

Ich habe einfach eine der classn aus dem Thema kopiert und eingefügt und die class umbenannt

Könnte mir jemand zeigen, wie man eine class von einem Thema innerhalb eines Plugins ausdehnt?

Solutions Collecting From Web of "Erweitern des Themas PHP-class im Plugin"

Machen Sie Ihre class für PHP sichtbar, nachdem das Thema die Elternklasse deklariert hat.

Plugins werden zuerst geladen, das Thema vielleicht später. Dies kann überschrieben werden.

Der Themenkode ist verfügbar, wenn die Aktion after_setup_theme ausgetriggers wird. Sie können ihn also wie after_setup_theme verwenden:

 add_action( 'after_setup_theme', function() { require 'ChildClass.php'; }); 

Wenn das Design die Elternklasse später lädt, können Sie jedoch auf dasselbe Problem stoßen: Sie wissen nicht, wann es wirklich verfügbar ist.

Die Alternative ist ein Autoloader : Laden Sie keine classn im Voraus. Lassen Sie PHP stattdessen warten, bis Sie eine neue Instanz einer class erstellen, und lassen Sie dann einen registrierten Autoloader die richtige Datei enthalten.

Hier ist ein sehr einfaches Beispiel, das Sie in die Hauptdatei Ihres Plugins einfügen können. Stellen Sie sicher, dass der Dateiname mit dem classnnamen übereinstimmt, z. ET_Builder_Module_Blurb.php .

 spl_autoload_register( function( $name ) { $path = __DIR__ . "/$name.php"; if ( file_exists( $path ) ) require $path; });