Peut-être que je ne comprends tout simplement pas ce que get_template_part()
fait…
J'ai un fichier appelé event-list.php
qui devrait servir de modèle pour d'autres pages et fichiers afin que tous mes événements (un type de publication personnalisé) soient répertoriés!
Dans ce event-list.php
j'ai ce…
<?php
$loop = new WP_Query( $args );
while ( $loop->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' );
?>
<!-- event-item.php -->
<div id="event-<?php the_ID(); ?>" <?php post_class(); ?>>
<div class="event-date"><?php echo $event_date; ?></div>
<div class="event_time"><?php echo $event_time; ?></div>
<div class="event-speaker"><?php echo $event_speaker; ?></div>
<div class="event-title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></div>
<div class="event-description-excerpt"><?php the_excerpt(); ?></div>
</div>
<!-- event-item.php -->
<?php endwhile; ?>
Ce que je veux faire, c'est donc inclure un autre modèle à l'intérieur de event-list.php
nommé event-item.php
qui ne contient que la présentation d'un événement. Je veux utiliser ce event-item.php
peut-être plus tard aussi dans différentes boucles. Il devrait s'agir uniquement du balisage de chaque élément d'événement sur mon site Web. Si je modifie ce modèle even-item.php
, tous les "événements" de l'une de mes boucles sur l'ensemble de mon site Web doivent changer.
Le problème que j'ai avec ceci est celui de l'exemple de code ci-dessus. J'utilise get_template_part( 'event-item' );
pour inclure la structure de structure event-item.php
dans ma boucle. Et je reçois sa post-méta personnalisée en dehors de ce modèle. Cependant cela ne fonctionne pas!
Comme vous pouvez le voir dans mon exemple ci-dessus, je dois copier toute la structure de mise en page de mon event-item.php
à l'intérieur de mon event-list.php
pour que les éléments post-méta soient complétés.
Des idées sur ce que je ne comprends pas ou ce que je fais mal ici?
Merci d'avance.
Mat
Essayez de globaliser $post
à l'intérieur de event-item.php
.
Aussi: assurez-vous d'appeler wp_reset_postdata()
après avoir fermé votre boucle $loop
while.
par exemple.:
<!-- event-item.php -->
<?php
// globalize $post
global $post;
?>
<div id="event-<?php the_ID(); ?>" <?php post_class(); ?>>
<div class="event-date"><?php echo $event_date; ?></div>
<div class="event_time"><?php echo $event_time; ?></div>
<div class="event-speaker"><?php echo $event_speaker; ?></div>
<div class="event-title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></div>
<div class="event-description-excerpt"><?php the_excerpt(); ?></div>
</div>
<!-- event-item.php -->
et alors:
<?php
endwhile;
// Restore $post global to the primary query
wp_reset_postdata();
?>
En supposant que le problème soit seulement les métadonnées de publication, je suggérerais de déplacer les variables de métadonnées de publication à l'intérieur de loop-item.php
. Juste une supposition, mais peut-être que vos variables locales ne sont pas transmises par la fonction include()
qui fait partie de get_template_part()
.
Alors, comme ça:
<!-- event-item.php -->
<?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];
?>
<div id="event-<?php the_ID(); ?>" <?php post_class(); ?>>
<div class="event-date"><?php echo $event_date; ?></div>
<div class="event_time"><?php echo $event_time; ?></div>
<div class="event-speaker"><?php echo $event_speaker; ?></div>
<div class="event-title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></div>
<div class="event-description-excerpt"><?php the_excerpt(); ?></div>
</div>
<!-- event-item.php -->
Aussi , pour éviter les notifications undefined variable
, vous devez définir vos variables à l'aide de isset()
conditionals; par exemple. change ça:
$event_date_timestamp = $wr_event_fields['_wr_event_date'][0];
...pour ça:
$event_date_timestamp = ( isset( $wr_event_fields['_wr_event_date'][0] ) ? $wr_event_fields['_wr_event_date'][0] : false );
Au lieu de faire:
get_template_part( 'event-item' );
faites ceci à la place:
get_template_part( 'event','item' );
get_template_part
s'attend à ce que le nom du fichier soit: parameter1-parameter2.php
Assurez-vous également que vous déclarez les variables que vous souhaitez utiliser comme globales, sinon elles seront hors de portée et ne seront pas affichées:
global $event_date, $event_time, $event_speaker;