Wie verwende ich get_template_part ()?
-
-
Versuchen Siees unter http://codex.wordpress.org/Function_Reference/get_template_partTry look at http://codex.wordpress.org/Function_Reference/get_template_part
- 1
- 2011-02-21
- wow
-
3 Antworten
- Stimmen
-
- 2012-02-08
Einige sehrguteeinleitende Antworten hier.
Grundsätzlichermöglicht
get_template_part()
den Themenentwicklern,eine Reihenfolge der Spezifität von Vorlagendateienfestzulegen. Stellen Siees sich ähnlich wie die Spezifität vor,diefür CSS-Selektorengilt. Wenn Sieetwasentwerfen,möchten Siemit einem Minimum an Spezifitätbeginnen,damitesin Teileneines Designs,dieindividuelle Aufmerksamkeiterfordern,leicht überschrieben werden kann.Sogestalten Siebeispielsweiseein Blog understelleneine loop.php -Datei,die sichgut zum Markieren von Postseignet. Sieplanenjedochim Voraus und rufenes späterin Ihren Vorlagendateienmit zusätzlichen Kontextspezifizierern auf. Auf der Indexseite rufen Siebeispielsweise
get_template_part( 'loop', 'index' );
auf der Single auf Vorlage,rufen Sieget_template_part( 'loop', 'single' );
rufen Sie auf Archivseitenget_template_part( 'loop', 'archive' );
und so weiter auf. Diesmachtes später sehreinfach,wenn Sie die Schleife auf Ihren Archivseiten anders als auf der Startseitemarkieren: Erstellen Sieeinfacheine loop-archive.php -Vorlage,dienicht verwendet wird diegenerische loop.php .Aber die Magie hinter
get_template_part()
liegtin der Funktionlocate_template()
,die zuerst das Themenverzeichnis und dann das übergeordnete Verzeichnis (falls vorhanden) auf das überprüft Dateimit dem Namen. Diesist sehrnützlichfür die Plugin-Entwicklung. Ineinem meiner Plugins definiereicheinen benutzerdefinierten Beitragstyp understelleeine Schleifenvorlagendateifür diesenbenutzerdefinierten Beitragstypin meinem Plugin-Verzeichnis. Aber ... Ichmöchte zulassen,dass Themen,diemein Plugin verwenden,mein Markup überschreiben,wenn sie dies wünschen. Hier wirktlocate_template()
wirklich Wunder.locate_template($template_names, $load = false, $require_once = true )
suchtnachjedem der Namenim Array $template_namesim Stylesheet-Verzeichnis und dannim Template-Verzeichnis. Die Übergabe von 'true' als $ load-Argumentbedeutet,dass die erstegefundene Dateierforderlichist undeine leere Zeichenfolge zurückgegeben wird,wenn keine Vorlagendateigefunden wurde. Also kannich soetwasin meinem Pluginmachen:
if ( '' === locate_template( 'loop-mycustomposttype.php', true, false ) ) include( 'loop-mycustomposttype.php' );
... wases Theme-Entwicklern hoffentlich sehreinfachmachen sollte,mein Plugin anzupassen,indem sieeinfacheine Dateinamens loop-mycustomposttype.php in ihr Theme aufnehmen.
Some very good introductory answers here.
Basically,
get_template_part()
allows theme developers to set up an order of specificity of template files. Think of it similarly to specificity as it applies to CSS selectors. When designing something, you want to start with the bare minimum of specificity, so that it can be easily overridden in parts of a design that need individual attention.So for example, you're styling a blog and you create a loop.php file which works well for marking up posts. But you plan ahead, and you call it in your template files later with additional context specifiers - say, on the index page, you call
get_template_part( 'loop', 'index' );
, on the single template, you callget_template_part( 'loop', 'single' );
, on archive pages, you callget_template_part( 'loop', 'archive' );
, and so on. This makes it very easy down the road when you decide to mark up the loop on your archive pages differently from the home page: just create a loop-archive.php template and it'll be used rather than the generic loop.php.But the magic behind
get_template_part()
is in the functionlocate_template()
, which checks first the theme directory, then the parent directory (if one exists) for the file named. This is very useful for plugin development. In one of my plugins, I define a custom post type and created a loop template file for that custom post type in my plugin directory. But... I want to allow themes using my plugin to override my markup if they choose. This is wherelocate_template()
really works wonders.locate_template($template_names, $load = false, $require_once = true )
will look for each of the names in the $template_names array in the stylesheet directory, then in the template directory. Passing 'true' as the $load argument means that it will require the first file found, and will return an empty string if no template file was located. So I can do something like this in my plugin:
if ( '' === locate_template( 'loop-mycustomposttype.php', true, false ) ) include( 'loop-mycustomposttype.php' );
...which should hopefully make it very easy for theme developers to customize my plugin just by including a file called loop-mycustomposttype.php in their theme.
-
Ersetzen Sie locate_templatebitte dadurch. `include (locate_template ('loop-mycustomposttype.php'))` Auf diese Weise können Variablen übergeben werden. Ich habe dies hiergefunden [Link] (http://keithdevon.com/passing-variables-to-get_template_part-in-wordpress/).Esist sehrnützlich!Replace locate_template by this, please. `include(locate_template( 'loop-mycustomposttype.php'))` This way is possible to pass variables. I've found this here [link](http://keithdevon.com/passing-variables-to-get_template_part-in-wordpress/). It's extremely useful!
- 2
- 2014-01-09
- Pablo S G Pacheco
-
Wenn Sie diestun,müssen Sie diesgegebenenfalls ändern.So `if (false===include (locate_template ('loop-mycustomposttype.php')))`Doing so it's going to be necessary to change this if also. Like this `if ( false === include(locate_template( 'loop-mycustomposttype.php')) ) `
- 1
- 2014-01-09
- Pablo S G Pacheco
-
Oh,guter Punkt.Mit der Formel,dieich angegeben habe,befindet sich der Aufruf "require" oder "require_once" (von "locate_template")innerhalbeiner Funktion und hat daher keinen Zugriff auf den aktuellen Bereich.Oh, good point. With the formula I gave, the `require` or `require_once` call (from `locate_template`) is inside a function and so doesn't have access to the current scope.
- 1
- 2014-01-10
- goldenapples
-
- 2011-02-21
Nicht alle Schleifen,die Hauptschleife. ;-) Egal,ob Sie sich Ihre Startseite odereine Kategorie ansehen oder was Sie wissen,Sie habenimmereine Hauptschleife. Der Inhalt dieser Hauptschleife wird durch die Abfragebestimmt,die ausgeführt wurde,bevor Ihre Vorlage überhaupt aufgerufen wurde.
Die Vorlage loop.php überläuft lediglich die Elementein der Schleife undformatiert sie. Siehe die Dokumentationim Codex .
Wenn Sie sich die loop.php von Twenty-Ten ansehen,können Sie sehen,dass Twenty-Ten dann innerhalb diesereinzelnen Vorlagendatei diversifiziert.
get_template_part()
lädt lediglichein Template-Teil undführtes durch. Sie könnengenausogut Teile Ihrer loop.phpin separate Dateienextrahieren und durcheinenget_template_part('loop', 'category')
usw.ersetzen.Oder Sie habeneine Teilvorlagefürjedeneinzelnen Beitragin der Schleife und Ihre loop.php ruftnur
get_template_part('loop','post');
innerhalb derwhile...
-Klausel. Alles liegtbei Ihnen.Not all loops, the main loop. ;-) No matter if you look at your frontpage or a category or whoknowswhat, you'll always have a main loop. The content of that main loop is determined by the query that's been run before your template got called at all.
The loop.php template merely runs over the items in the loop and formats them. See the documentation at the Codex.
If you look at Twenty-Ten's loop.php, you can see that Twenty-Ten then diversifies within that single template file.
get_template_part()
merely loads a template part and runs through it. You can just as well extract parts of your loop.php into separate files and replace them by aget_template_part('loop', 'category')
and so on calls.Or you could have a part-template for each individual post in the loop and have your loop.php only call
get_template_part('loop','post');
within thewhile...
clause. All up to you. -
- 2012-02-08
Aus dem get_template_part-Codex :
<?php get_template_part( 'loop', 'index' ); ?>
führtein PHP require ()für dieerste vorhandene Datei aus ...
Soeffektivfunktioniertes,als ob Sieeine andere PHP-Dateibenötigen würden.
Update : Esgibt einen kleinen Unterschied zum "Erfordernis" - Esistin eine Funktioneingeschlossen,sodass Sie
global
eingeben müssen,wenn Sie Variablen aus Ihrer Vorlage an übergebenmöchtenIhr Vorlagenteil.From the get_template_part codex:
<?php get_template_part( 'loop', 'index' ); ?>
will do a PHP require() for the first file that exists...
So effectively it will work as if you were requiring another php file.
Update: There is a slight difference to 'require' - It is wrapped inside a function so you must
global
if you want to pass any variables from your template to your template part.
Könntemirbitte jemanderklären,wie diese Funktionfunktioniert?Ich weiß,wasestut,aber wennichmir den Quellcodein der Vorlage Twenty_ten ansehe,versteheichnicht,wie alle Schleifenin einereinzigen loop.phpgesammelt werden (ich habe diese Datei auchgesehen).
Wie kannbeispielsweiseein bestimmtergemeinsamer Teil der Vorlage abstrahiert und dannfür andere Vorlagen wiederverwendet werden?