Wie kann man eine Datei mit get_template_part () in ein Plugin einbinden?

Eine sehr einfache Frage mag sein, aber ich kämpfe. In der Themenentwicklung habe ich viele Male mit get_template_part() , und ich verstehe seine Grundlagen. Aber als ich ein Plugin entwickle, habe ich mich gefragt, ob es ein paar Fehler zeigt:

Hinweis: Verwendung der undefinierten Konstante STYLESHEETPATH – Annahme von ‘STYLESHEETPATH’ in ...\wp-includes\template.php in Zeile 407

und

Hinweis: Verwendung von undefinierten Konstanten TEMPLATEPATH – Annahme von ‘TEMPLATEPATH’ in ...\wp-includes\template.php in Zeile 410

Googeln des Problems zeigte eine Support-Fix:

  • Verwenden Sie get_template_part() in einem Plugin – WordPress Support

Aber das scheint eine große Problemumgehung zu sein – ich bezweifle es. Ich denke, das sollte nicht sehr kompliziert sein. Ich habe diese WPSE-Antwort überprüft und diese Codezeile gefunden:

 if ( '' === locate_template( 'loop-mycustomposttype.php', true, false ) ) include( 'loop-mycustomposttype.php' ); 

Wo gibt es eine PHP- include() -function. get_template_part() meinem WordPress-Wissen habe ich gelernt, get_template_part() gegenüber PHP include() zu bevorzugen. Dann, wie genau kann ich eine einfache get_template_part() in meinem Plugin verwenden.

Ich verwende keine Schleife oder etwas, ich bin nur trennen (oder Sie sagen, organisieren) meine Plugin-Code in verschiedene Dateien, so dass ich in einigen Fällen einfach kommentieren Sie sie aus, um dort abzulegen, wo sie nicht notwendig sind. Ich habe es versucht:

 get_template_part( 'my', 'special-admin' ); 

und dann nach dem Fehler, änderte es zu:

 get_template_part( 'my', 'specialadmin' ); 

Aber du weißt, das ist nicht das Problem. Ich bin auf dem lokalen Server mit WAMP.

Solutions Collecting From Web of "Wie kann man eine Datei mit get_template_part () in ein Plugin einbinden?"

get_template_part ist eine get_template_part . Sie können Plug-in-Dateien mit dieser function nicht laden. Sehen Sie sich die Quelle an und Sie werden feststellen, dass die Arbeit von locate_template erledigt wird. Sieh dir diese Quelle an und du wirst sehen, dass sie immer aus Themenverzeichnissen geladen wird.

Wie sehr auch immer Sie get_template_part verwenden get_template_part es ist die falsche function.

Sie müssen Ihre Dateien include .

Der Grund für get_template_part ist, so scheint es mir, die get_template_part von Themen – auch um die Erstellung von get_template_part Themen zu erleichtern. Plugins sind nicht dazu gedacht, auf diese Weise erweitert zu werden, so dass get_template_part oder Plugins nicht benötigt werden.

@s_ha_dum ist korrekt, dass get_template_part eine get_template_part ist, aber er ist falsch, dass Plugins nicht auf diese Weise erweitert werden sollen. Es ist einfach komplizierter.

In diesem Post von Pippin wird beschrieben, wie Sie eine function verwenden, mit der Sie Ihre Plugin-Vorlagen laden können, während Benutzer Ihre Plugin-Vorlagen in ihrem Design überschreiben können.

Im Wesentlichen sieht es in einem speziellen Ordner im Theme aus, und wenn es dort nicht gefunden wird, sieht es im Templates-Ordner für das Plugin aus.

Wie bereits erwähnt, können Sie get_template_part in Plugins verwenden, aber es gibt eine praktische class auf Github (erstellt von Gary Jones), die die get_template_part functionalität in Plugins nachahmt und das Plugin dem Fallback hinzufügt ( get_template_part Thema> übergeordnetes Thema> Plugin) .

Auf diese Weise können Sie den “Vorlagenbereich” Ihres Plugins in einem untergeordneten Thema oder einem übergeordneten Thema überschreiben.

Verwendung (aus den Github-Repo-statementen entnommen):

  1. class-gamajo-template-loader.php in dein Plugin. Es kann in eine Datei im Plugin-Root sein, oder besser, in ein Include-Verzeichnis.
  2. Erstellen Sie eine neue Datei, z. B. class-your-plugin-template-loader.php , im selben Verzeichnis.
  3. Erstellen Sie in dieser Datei eine class , die Gamajo_Template_Loader .
  4. Überschreiben Sie die classneigenschaften für Ihr Plugin. Sie können die Methode get_templates_dir() auch überschreiben, wenn sie nicht für Sie get_templates_dir() ist.
  5. Sie können jetzt Ihre benutzerdefinierte Vorlagenladeprogrammklasse instanziieren und damit die get_template_part() -Methode get_template_part() . Dies kann innerhalb eines Kurzwahl-callbacks geschehen oder etwas, das von den Themenentwicklern in ihre Dateien aufgenommen werden soll.

Beispielcode:

 // Template loader instantiated elsewhere, such as the main plugin file. $meal_planner_template_loader = new Meal_Planner_Template_Loader; // Use it to call the get_template_part() method. This could be within // a shortcode callback, or something you want theme developers // to include in their files. $meal_planner_template_loader->get_template_part( 'recipe' ); // If you want to pass data to the template, call the set_template_data() // method with an array before calling get_template_part(). // set_template_data() returns the loader object to allow for method chaining. $data = array( 'foo' => 'bar', 'baz' => 'boom' ); $meal_planner_template_loader ->set_template_data( $data ); ->get_template_part( 'recipe' ); // The value of bar is now available inside the recipe template as $data->foo. // If you wish to use a different variable name, add a second parameter // to set_template_data(): $data = array( 'foo' => 'bar', 'baz' => 'boom' ); $meal_planner_template_loader ->set_template_data( $data, 'context' ) ->get_template_part( 'recipe', 'ingredients' ); // The value of bar is now available inside the recipe template as $context->foo.