Einseitiges WordPress-Problem mit get_template_part und get_footer
Lesezeit: 2 Minuten
Krawatten
Was ich versuche, ist, mein einseitiges Design in WordPress zu konvertieren, und ich dachte, es wäre schön, verschiedene Teile der Seite auf getrennten Seiten bearbeiten, hinzufügen und ändern zu können. Die einseitige Website wird nach einem Menü (mit der ID main) geordnet.
Nach dem von mir verwendeten wp-Codex get_template_partsollte es richtig funktionieren, denn es sollte:
Laden eines Vorlagenteils in eine Vorlage (außer Kopfzeile, Seitenleiste, Fußzeile)
get_header wird aber übersprungen get_footer wird ausgeführt und die Seite wird falsch gerendert.
Ist das ein Fehler? Oder habe ich etwas falsch gemacht? Was ist der beste Weg, dies zu erreichen?
Was sind die Inhalte Ihrer page.php Vorlage “Teil”? Die standardmäßigen WordPress-Seitenvorlagen, solange ich mich erinnern kann, enthalten Kopf-, Fuß- und sogar Seitenleisten, es handelt sich also nicht wirklich um eine „Teil“- oder Teilvorlage, sondern um das Ganze. Ich würde sagen, rollen Sie Ihren eigenen Teil, ohne anzurufen get_header, get_footeretc.
– Tomás Buteler
19. August 2014 um 21:07 Uhr
Ich stimme @tbuteler zu, erstellen Sie Ihr eigenes Standardvorlagenteil, anstatt es zu verwenden page.phpdas normalerweise enthält get_{head,footer}(). Würde ich auch nicht verwenden page-{slug}.php, da es von WordPress verwendet wird, um die Vorlage für diese bestimmte Seite zu überschreiben. würde ich zB verwenden onepage-{slug}.php. Versuchen Sie zum Beispiel: if( ! is_null( $postName ) ) get_template_part('page', $postName); um zu überprüfen, ob das Layout korrekt gerendert wird.
– Birgire
20. August 2014 um 8:02 Uhr
Ah, also ich habe es falsch interpretiert. Nach meinem (alten) Verständnis würde WordPress die Funktionen überspringen get_header, get_footer und get_sidebar Was es aber eigentlich braucht, ist ein Template ohne diese Funktionen.
– Krawatten
20. August 2014 um 9:28 Uhr
Wenn Ihr get_template_part() nicht funktioniert, liegt das Problem möglicherweise darin, dass im Design keine Datei mit dem Namen page.php vorhanden ist. Suchen Sie nach dieser Datei.
Ich habe eine Seitenvorlage, ich verwende sie als Fallback, wenn es keine benutzerdefinierte Vorlage für die bestimmte Seite gibt. Das get_footer in page.php -oder page-{slug}.php- ausgeführt wird, nicht in front-page.php. Ich will das andersherum.
– Krawatten
22. August 2014 um 10:04 Uhr
können Sie überprüfen, ob die Datei nicht geladen werden kann
– Mukul Bhardwaj
26. August 2014 um 15:42 Uhr
Marc
Für das, was es wert ist, überspringe ich oft einige der WP-Helfer und arbeite direkter, aber nicht abtrünnig. Hier ein Ausschnitt aus meiner Bibliothek:
/** Get core data for a WP post/page using ID
* @param $id : wp post/page ID
* @return array
*/
function wp_get_single_post_basic($id){
$post = get_post($id, ARRAY_A);
$ret = array();
$content = $post['post_content'];
// FILTER via WP
$content = apply_filters('the_content', $post['post_content']);
$ret['title']= $post['post_title'];;
$ret['content']= $content;
$ret['link'] = $post['post_name'];
$ret['edit_link'] = '<a href="'.get_edit_post_link($id).'" title="edit">edit</a>';
return $ret;
}
Diese Funktion zerlegt den Inhalt auf sehr einfach zu verwaltende Weise und generiert den Bearbeitungslink (bauen Sie dafür bool im aufrufenden Skript). Formatiert auch Inhalte.
Greifen und sortieren Sie also die gewünschten IDs und führen Sie dies in der Schleife über IDs für Ihre eine Seite aus. Dann wird der gesamte Inhalt nach Seite/Post/was auch immer isoliert (benutzerdefinierte Taxonomie FTW).
Wenn Sie die IDs bereit und sortiert hätten, plus HTML/CSS, könnte ich diese Funktion einfügen und Ihre eine Seite in weniger als einer Stunde fertigstellen. Für die Arbeit am Fließband ist diese Art von Helfer großartig – auch perfekt für Websites, auf denen Sie möchten, dass ein bestimmter Beitrag/eine bestimmte Seite auf eine seltsame Weise an einem seltsamen Ort außerhalb der Schleife platziert wird.
Wenn Sie ein Problem mit dem Skript haben, lassen Sie es mich wissen, ich habe es seit ein paar Monaten nicht mehr benutzt, habe es vor ein paar Jahren geschrieben …
Pabloselin
Ich denke, Sie haben ein Problem mit der globalen $post und speichern auch die $post Variable in der foreach Schleife aus den Menüobjekten. Ich denke, das ist wahrscheinlich die Ursache für den Fehler beim Aufruf des Vorlagenteils.
Ich würde Ihnen empfehlen, die globale zu entfernen $post Erklärung, die reset_postdata und auch die setup_postdata Da Sie das Global nicht in Ihrer Schleife verwenden, benennen Sie es nur.
Du bekommst die $post Objekt aus dem Menü, so dass es den Anschein hat, dass Sie die globalen oder die anderen Funktionen, die meistens verwendet werden, nicht benötigen, wenn Sie Vorlagen-Tags “Loop Style” ohne ein verwenden möchten post_idwie the_permalink() oder the_title().
Am Ende habe ich die Standardvorlage page.php als kopiert page-page.php und so geladen:
Was sind die Inhalte Ihrer
page.php
Vorlage “Teil”? Die standardmäßigen WordPress-Seitenvorlagen, solange ich mich erinnern kann, enthalten Kopf-, Fuß- und sogar Seitenleisten, es handelt sich also nicht wirklich um eine „Teil“- oder Teilvorlage, sondern um das Ganze. Ich würde sagen, rollen Sie Ihren eigenen Teil, ohne anzurufenget_header
,get_footer
etc.– Tomás Buteler
19. August 2014 um 21:07 Uhr
Ich stimme @tbuteler zu, erstellen Sie Ihr eigenes Standardvorlagenteil, anstatt es zu verwenden
page.php
das normalerweise enthältget_{head,footer}()
. Würde ich auch nicht verwendenpage-{slug}.php
, da es von WordPress verwendet wird, um die Vorlage für diese bestimmte Seite zu überschreiben. würde ich zB verwendenonepage-{slug}.php
. Versuchen Sie zum Beispiel:if( ! is_null( $postName ) ) get_template_part('page', $postName);
um zu überprüfen, ob das Layout korrekt gerendert wird.– Birgire
20. August 2014 um 8:02 Uhr
Ah, also ich habe es falsch interpretiert. Nach meinem (alten) Verständnis würde WordPress die Funktionen überspringen
get_header
,get_footer
undget_sidebar
Was es aber eigentlich braucht, ist ein Template ohne diese Funktionen.– Krawatten
20. August 2014 um 9:28 Uhr