get_template_part () – Post-Meta funktioniert nicht?

Vielleicht verstehe ich einfach nicht, was get_template_part() macht …

Ich habe eine Datei namens event-list.php , die als Vorlage für andere Seiten und Dateien dienen soll, damit alle meine Ereignisse (ein benutzerdefinierter Beitragstyp) aufgelistet werden!

In dieser event-list.php ich diese …

 have_posts() ) : $loop->the_post(); $wr_event_fields = get_post_custom(); $event_date_timestamp = $wr_event_fields['_wr_event_date'][0]; $event_date = strftime('%d.%m.%Y', $event_date_timestamp); $event_time = $wr_event_fields['_wr_event_time'][0]; $event_speaker = $wr_event_fields['_wr_event_speaker'][0]; //get_template_part( 'event-item' ); ?>  <div id="event-" > 
<a href="https://wordpress.stackexchange.com/questions/49285/get-template-part-post-meta-not-working/">

Also, was ich tun möchte, ist eine andere Vorlage innerhalb der event-list.php namens event-item.php die nur das Layout eines Ereignisses enthält. Ich möchte dieses event-item.php später vielleicht auch in verschiedenen Loops verwenden. Es sollte nur das Markup für jedes einzelne Event-Objekt auf meiner Website sein. Wenn ich innerhalb dieser even-item.php Vorlage eine Änderung even-item.php alle “Ereignisse” in meinen Loops auf meiner gesamten Website ändern.

Das Problem, das ich damit habe, ist das im obigen Beispielcode. Ich benutze get_template_part( 'event-item' ); um die Layout-Struktur event-item.php in meine Schleife event-item.php . Und ich bekomme seine benutzerdefinierte Post-Meta außerhalb dieser Vorlage. Das geht aber nicht!

Wie Sie in meinem obigen Beispiel sehen können, muss ich die gesamte Layout-Struktur aus meiner event-item.php innerhalb meiner event-list.php damit der Post-Meta event-list.php ausgefüllt wird.

Irgendwelche Ideen, was ich hier nicht bekomme oder was ich hier falsch mache?

Vielen Dank im Voraus.

Matt

Solutions Collecting From Web of "get_template_part () – Post-Meta funktioniert nicht?"

Versuchen Sie, $post innerhalb von event-item.php .

Außerdem: wp_reset_postdata() Sie darauf, dass Sie wp_reset_postdata() aufrufen, nachdem Sie Ihre $loop while-Schleife geschlossen haben.

z.B:

  < ?php // globalize $post global $post; ?> 
>
< ?php echo $event_date; ?>
< ?php echo $event_time; ?>
< ?php echo $event_speaker; ?>
< ?php the_excerpt(); ?>

und dann:

 < ?php endwhile; // Restore $post global to the primary query wp_reset_postdata(); ?> 

Bearbeiten

Angenommen, das Problem sind nur die Post-Metadaten, würde ich vorschlagen, die Post-Metadaten-Variablen in loop-item.php . Nur eine Vermutung, aber vielleicht werden Ihre lokalen Variablen nicht durch die function include() , die Teil von get_template_part() .

Also, so:

  < ?php // Define these here, inside loop-item.php $wr_event_fields = get_post_custom(); $event_date_timestamp = $wr_event_fields['_wr_event_date'][0]; $event_date = strftime('%d.%m.%Y', $event_date_timestamp); $event_time = $wr_event_fields['_wr_event_time'][0]; $event_speaker = $wr_event_fields['_wr_event_speaker'][0]; ?> 
>
< ?php echo $event_date; ?>
< ?php echo $event_time; ?>
< ?php echo $event_speaker; ?>
< ?php the_excerpt(); ?>

Um nicht undefined variable zu vermeiden, sollten Sie Ihre Variablen mithilfe von isset() Bedingungen definieren. zB ändere dies:

 $event_date_timestamp = $wr_event_fields['_wr_event_date'][0]; 

… zu diesem:

 $event_date_timestamp = ( isset( $wr_event_fields['_wr_event_date'][0] ) ? $wr_event_fields['_wr_event_date'][0] : false ); 

Anstatt zu tun:

 get_template_part( 'event-item' ); 

Tu dies stattdessen:

 get_template_part( 'event','item' ); 

get_template_part erwartet den Dateinamen: parameter1-parameter2.php

Stellen Sie außerdem sicher, dass Sie die Variablen, die Sie verwenden möchten, als globale Variablen deklarieren, da sie sonst nicht in den Geltungsbereich fallen und nicht angezeigt werden:

 global $event_date, $event_time, $event_speaker;