Eine Instanz der class im übergeordneten Thema aus dem untergeordneten Thema functions.php deklarieren

Bitte beachte, dass dies alles “funktioniert” – die Frage bezieht sich auf die Best Practice und um herauszufinden, warum ich die PHP-Datei, die die class enthält, an zwei Stellen einfügen muss, damit sie korrekt funktioniert.

Ich arbeite an einem einfachen Elternthema, um meinen eigenen Entwicklungszyklus zu beschleunigen – und bin dabei, ein einfaches Kindthema zu testen.

Ich verstehe, dass die functions.php Datei für das Kind vor dem Eltern- functions.php aufgerufen wird – das alle PHP-functionen und eine class zum Hinzufügen von CPTs enthält.

Ich möchte den CPT aus dem untergeordneten Thema erstellen – ich möchte, dass das übergeordnete Element alle wiederverwendbaren und updatefähigen functionen enthält -, aber keine zusätzlichen functionen in jeder WP-Installation, in der es verwendet wird, vorab erstellen.

Zu der Code Frage:

Ich habe versucht, die class (die sich in einer separaten PHP-Datei befindet) in die child functions.php einzufügen und dann eine Instanz instanziieren – zum Beispiel:

 require_once TEMPLATEPATH."/library/cpt/cpt.php"; // CPT class ## $cpt_tree = new Custom_Post_Type( "tree" ); // New CPT - "tree" ## 

Beim Neuladen der Seite tritt ein Fehler auf:

 Fatal error: Class 'Custom_Post_Type' not found in C:\xampp\htdocs\site\wordpress\wp-content\themes\child\functions.php on line 14 

Also, dann habe ich die gleiche PHP-Datei in die elterliche functions.php Datei eingefügt – und alles funktioniert – als Experiment habe ich die class aus dem Kind-Thema entfernt – und es gibt den gleichen Fehler.

Ich weiß, dass diese Frage fehlt viele Codebeispiele – ich hoffe, es wird mit jemandem klingeln – oder jemand, der mehr über die Verwendung von classn versteht, wird mir einige Hinweise geben können – scheint albern, diese Datei an zwei Stellen zu verlangen und Ich möchte die Datei functions.php so sauber wie möglich halten.

Solutions Collecting From Web of "Eine Instanz der class im übergeordneten Thema aus dem untergeordneten Thema functions.php deklarieren"

Behandle alle classnladungen in deinem übergeordneten Thema auf einer vorhersehbaren Aktion (Zeitpunkt) und hole später in deinem untergeordneten Thema ein.

Beispiel:

 add_action( 'wp_loaded', 'parent_prefix_load_classes', 10 ); function parent_prefix_load_classes() { $classes = array ( 'Extra_Comment_Walker', 'Extra_Nav_Menu_Walker ); foreach ( $classes as $class ) { locate_template( "php/class.$class.php", TRUE, TRUE ); } } 

Erstellen Sie Instanzen in Ihrem untergeordneten Thema, stellen Sie sicher, dass der Code nach dem Laden der classn ausgeführt wird:

 // Priority 11 to run after the parent theme's loader. add_action( 'wp_loaded', 'child_prefix_create_objects', 11 ); function child_prefix_create_objects() { $nav_walker = new Extra_Nav_Menu_Walker; } 

Faustregeln:

  • Laden Sie nie etwas, nur wenn die Datei ( function.php ) aufgerufen wird. Warte auf wp_loaded .
  • Verwenden Sie das Prioritätsargument, um die Ausführungsreihenfolge zu steuern.

Einige Notizen:

  • Benutzerdefinierte Post-Typen, Taxonomien und Shortcodes gehören zu den Plugins. Sie sollten niemals Teil eines Themas sein, da dies einen Lock-In-Effekt für den Benutzer erzeugen würde. Wenn ein Themenwechsel den Inhalt unterbricht, hast du etwas falsch gemacht.
  • Verwenden Sie require_once in einem Design. locate_template() ist flexibler. Sie können die gesamte class jetzt in Ihrem untergeordneten Thema überschreiben, wenn Sie dieselbe Verzeichnisstruktur verwenden.