web-dev-qa-db-fra.com

Accéder à la variable $ post à partir d'une partie modèle

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?

1
pealo86

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 :)

1
Govind Kumar

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)); 
?>
2
JHoffmann

Les variables existantes seront accessibles depuis le modèle inclus si vous placez locate_template() dans une instruction include:

include( locate_template( 'nav.php' ) );
0
Dave Romsey