Voici une section de code que j'ai dans un fichier modèle - pour afficher la sous-navigation si la page a des pages enfant:
<?php // display sub-nav if page has children ?>
<?php $children = get_pages(array('child_of' => $post->ID)); ?>
<?php if (count($children)) : ?>
<ul class="nav nav-tabs">
<?php foreach ($children as $val) : ?>
<li role="presentation">
<a href="<?php echo get_permalink($val->ID); ?>"><?php echo $val->post_title; ?></a>
</li>
<?php endforeach; ?>
</ul>
Le code fonctionne bien dans le fichier modèle page.php
, mais si je mets tout dans un nouveau fichier - nav.php
, puis l’inclus avec <?php get_template_part( 'include', 'nav' ); ?>
, il ne fonctionne plus.
Comment puis-je le configurer pour que la variable $post
fonctionne toujours? Dois-je faire quelque chose avec des variables globales?
votre fichier s'appelle-t-il 'nav-nav.php' ou est-il placé dans le dossier 'include'?
sinon, appelez-le simplement en passant le nom de nav.php
<?php get_template_part( 'nav' ); ?>
vous n'avez pas à passer le mot-clé include pour appeler le modèle.
J'espère que cette aide :)
get_template_part()
appelle votre fichier de modèle via require()
mais le fait dans un appel de fonction. Cela signifie que cela se produit dans une nouvelle portée de variable. Pour rendre $post
accessible à nouveau, utilisez simplement le mot clé global
.
<?php
global $post;
$children = get_pages(array('child_of' => $post->ID));
?>
Les variables existantes seront accessibles depuis le modèle inclus si vous placez locate_template()
dans une instruction include
:
include( locate_template( 'nav.php' ) );