2014-08-08 3 views
5

Was ich versuche zu konvertieren ist mein One-Page-Design in WordPress und ich dachte, es wäre schön zu können, bearbeiten, hinzufügen und ändern verschiedenen Teil der Seite in getrennten Seiten . Die einseitige Website wird nach einem Menü (mit id main) sortiert.Eine Seite WordPress-Problem mit get_template_part und get_footer

Im Anschluss an die wp-Kodex i get_template_part verwendet, sollte es richtig, da es sollte:

Legen Sie eine Vorlage Teil in eine Vorlage (außer Header, Sidebar, Footer)

get_header wird übersprungen, aber get_footer wird ausgeführt und die Site wird falsch gerendert.


Front page.php

$pages = wp_get_nav_menu_items('main'); 
global $post; 
foreach ($pages as $post) { 
    $post = get_post($post->object_id); 
    if($post->post_type != "page") continue; 
    setup_postdata($post); 
    $postName = (locate_template('page-' . $post->post_name . '.php') == '') ? null : $post->post_name; 
    get_template_part('page', $postName); 
} 
wp_reset_postdata(); 

Ist das ein Fehler? Oder habe ich etwas falsch gemacht? Was ist der beste Weg, dies zu erreichen?

+2

Was den Inhalt Ihres 'page.php' Vorlage "Teil" sind? Die Standard WordPress Seitenvorlagen haben, solange ich mich erinnern kann, Kopfzeile, Fußzeile und sogar Seitenleiste, also ist es nicht wirklich ein "Teil" oder eine Teilvorlage, sondern eher die ganze Sache. Ich würde sagen, rollen Sie Ihren eigenen Teil, ohne Aufruf von 'get_header',' get_footer' usw. –

+2

Ich stimme mit @ tbuteler, machen Sie Ihre eigenen Standard-Vorlage Teil, anstatt 'page.php', die in der Regel enthält' get_ { Kopf, Fußzeile}() '. Außerdem würde ich 'page- {slug} .php' nicht verwenden, da es von WordPress verwendet wird, um die Vorlage für diese bestimmte Seite zu überschreiben. Ich würde zum Beispiel 'onepage- {slug} .php' verwenden. Versuchen Sie zum Beispiel: 'if (! Is_null ($ postName)) get_template_part ('Seite', $ postName);' um zu überprüfen, ob das Layout korrekt gerendert wird. – birgire

+1

Ah so habe ich es falsch interpretiert. In meinem (alten) Verständnis würde wordpress die Funktionen 'get_header',' get_footer' und 'get_sidebar' überspringen, aber was es eigentlich benötigt, ist eine Vorlage ohne diese Funktionen. – Ties

Antwort

0

Ich habe die Standardseite kopiert.PHP-Vorlage als page-page.php und lud es wie folgt aus:

$postName = (locate_template('page-' . $post->post_name . '.php') == '') ? 'page' : $post->post_name; 

dann in page.php nur page-page.php geladen

0

Wenn Ihr get_template_part() nicht funktioniert, dann kann das Problem sein, dass keine Datei namens page.php im Theme vorhanden ist, suchen Sie nach dieser Datei.

+0

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- wird nicht in front-page.php ausgeführt. Ich will das anders herum. – Ties

+0

Überprüfen Sie Ihre Einstellungen> Lesen, wenn Sie eine Option geändert haben – sprytechies

+0

können Sie prüfen, ob die Datei nicht geladen werden kann –

0

Für was es wert ist, überspringe ich oft einige der WP Helfer und arbeite direkter, aber nicht schelmisch. Hier ist 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 bricht den Inhalt auf eine sehr einfache Art und Weise zu verwalten und erzeugt das Bearbeitungslink (Build Bool für das in Aufruf-Skript). Formatiert auch Inhalte.

Also schnappen und sortieren Sie die gewünschten IDs und führen Sie dies in der Schleife über IDs für Ihre eine Seite. Dann wird der gesamte Inhalt nach page/post/washly isoliert (benutzerdefinierte Taxonomie FTW).

Wenn Sie die IDs bereit und sortiert und die HTML/CSS bereit zu gehen hätte, könnte ich diese Funktion in und lassen Sie Ihre eine Seite in weniger als einer Stunde abgeschlossen. Für die Arbeit in der Produktionslinie ist diese Art von Hilfsprogramm großartig - auch perfekt für Sites, auf denen ein bestimmter Post/eine bestimmte Seite an einer seltsamen Stelle außerhalb der Schleife platziert werden soll.

Wenn Sie ein Problem w/script lassen Sie mich wissen, ich habe es nicht in ein paar Monaten verwendet, es vor ein paar Jahren schrieb ...

0

Ich glaube, Sie haben ein Problem, das globale $post mit und Speicherung der $post Variable in der foreach Schleife von den Menüobjekten. Ich denke, das ist wahrscheinlich die Ursache für den Fehler beim Aufruf des Template-Teils.

Ich würde Ihnen empfehlen, die globale $post Erklärung, die reset_postdata und auch die setup_postdata zu entfernen, da Sie die globale in der Schleife nicht verwenden, sind zu benennen Sie es einfach.

Sie zum $post Objekt aus dem Menü so, dass Sie die globalen oder die anderen Funktionen nicht benötigen wird, die meistens verwendet werden, wenn Sie Template-Tags ohne post_id, wie the_permalink() verwenden „Loop Style“ wollen oder the_title().

Verwandte Themen