WP überschreibt mein setup_postdata () Setup

Ich versuche, unter einer (sehr) benutzerdefinierten URL einen Beitrag in einer Vorlage meiner Wahl anzuzeigen. Die ID meines Beitrags in diesem Beispiel lautet 1008 und mein Vorlagenname ‘/singles/lecture.php’.

Ich werde in Zukunft die URL überprüfen und eine Bedingung hinzufügen, um die Aktion auszuführen – jetzt für Tests ist die Bedingung nur, if (1) – was für die Tests für alle URLs funktioniert.

Wenn ich meine benutzerdefinierte URL eingib, wird die Vorlage ohne Probleme abgerufen und angezeigt, aber es gibt ein Problem mit den Daten.

In der function, wenn ich die $ post Variable überprüfe, gibt es ein Standard $post Objekt zugewiesen – sagen wir seine ID == 488, also versuche ich WordPress so zu machen, dass ich den Post benutze, den ich brauche, also mache ich get_post() und die setup_postdata() Zuweisung, wie Codex sagt, sollte funktionieren, aber nicht.

Die $ Post-Daten, die in meiner /singles/lecture.php verfügbar /singles/lecture.php sind die Daten des ursprünglichen “Standard” /singles/lecture.php (dh 488).

 add_filter('template_include', 'my_custom_urls'); function my_custom_urls($original_template) { global $post; if (1) { // second correct but not working alternative // $post = get_post(1008); // setup_postdata($post); $post_object = get_post(1008); setup_postdata($GLOBALS['post'] =& $post_object); return get_template_directory() . '/singles/lecture.php'; } else { return $original_template; } } 

Was mache ich falsch? Wie setze ich die $ post-Variable auf diese Weise, so dass sie für meine Vorlage verfügbar wäre?

Solutions Collecting From Web of "WP überschreibt mein setup_postdata () Setup"

Sollten alle CPT “Vortrag” Beiträge diese Vorlage verwenden? Wenn dies der Fall ist, benennen Sie einfach Ihre Datei single-lecture.php um und legen Sie sie im Stammverzeichnis Ihres Themas ab, und WP wird es aufgrund seiner Vorlagenhierarchie automatisch verwenden.

Wenn Sie stattdessen versuchen, diese benutzerdefinierte Vorlage manuell ausgewählten Seiten zuzuordnen, fügen Sie, wo immer Sie Ihren Beitragstyp registrieren, Unterstützung für “Seitenattribute” hinzu und legen Sie Ihre Vorlage als benutzerdefinierte Vorlage fest, indem Sie oben Kommentare hinzufügen.

CPT:

 register_post_type('lecture'), array(... ... 'supports' => array('title', 'editor', 'page-attributes'), ); 

Vorlage:

 < ?php /* * Template Name: Customized Lecture */ ... 

Möglicherweise müssen Sie die CPT-Registrierung aufheben und sie dann erneut mit diesem neuen Code registrieren, damit WP die neuen Attribute erkennt. Sobald Ihr CPT "page-attributes" hat, sehen Sie auf dem Post-Editing-Bildschirm ein neues Dropdown-Menü, wie Sie es auf Pages sehen, mit dem Sie eine Vorlage auswählen können. Sie können dann Ihre Vorlage nach dem Namen auswählen, den Sie in den Kommentaren am Anfang der Datei verwendet haben.