web-dev-qa-db-fra.com

Les boucles multiples ne sont pas réinitialisées

Mes chers collègues ont de nouveau conçu quelque chose qui me donne du mal à l'obtenir dans Wordpress. Étonnamment, c'est quelque chose que j'ai déjà fait plusieurs fois auparavant; avoir des articles récents et le contenu de la page sur une page.

La page d'accueil est une page. Juste au-dessus du contenu de la page, il y a trois publications récentes. Pour les articles, je dois afficher la première partie du contenu avant la balise <!--more-->.

Cette boucle semble bien fonctionner. Plus tard dans le modèle, je passe en revue le contenu de la page. Peu importe ce que je fais, cela me donne toujours des résultats loufoques.

Voici une version recadrée de mon modèle index.php/page.php (ils se trouvent être identiques):

<div id="content">
    <?php get_template_part('news'); ?>

    <?php
    $args = array(
        'hierarchical'  => false,
        'sort_column'   => 'menu_order'
    );

    $pages = get_pages($args);
    ?>

    <?php while(have_posts()): the_post(); ?>
        <?php $id = get_the_ID(); ?>

        <div id="page-content">
            <!-- lets have a dodgy menu here! -->
            <ul id="navigation">
                <?php foreach($pages as $page): ?>
                    <li<?php echo (($page->ID !== $id) ? '': ' class="active"'); ?>>
                        <a href="<?php echo get_page_link($page->ID); ?>"><?php echo $page->post_title; ?></a>
                    </li>
                <?php endforeach; ?>
            </ul>

            <div class="content-wrapper">
                <div class="subnav-wrapper">
                    <ul id="subnavigation">
                        <li><a href="#">jaarrekeningen</a></li>
                        <li><a href="#">administraties</a></li>
                        <li><a href="#">salarisverwerking</a></li>
                        <li><a href="#">fiscaal advies</a></li>
                        <li><a href="#">overig advies</a></li>
                    </ul>
                </div>

                <div class="content"><?php the_content(); ?></div>

                <div class="clear"></div>
            </div>
        </div>
    <?php endwhile; ?>

    <?php get_template_part('social'); ?>
</div>

Comme vous pouvez le constater, j'inclus le modèle news. C'est ici:

<?php
$args = array('numberposts' => 3);

$posts = get_posts($args);

global $more;
?>

<div id="news">
    <?php foreach($posts as $key => $post): setup_postdata($post); ?>
        <?php if($key > 0): ?><div class="news-item-splitter"></div><?php endif; ?>
        <?php $more = 0; ?>

        <div class="news-item">
            <h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>

            <?php the_content('Lees meer'); ?>
        </div>
    <?php endforeach; wp_reset_postdata(); ?>

    <div class="clear"></div>
</div>

Qu'est-ce que je fais mal?

Merci d'avance.

1
Tim S.

n'utilisez jamais la variable posts dans Wordpress pour les boucles personnalisées. Après avoir changé le nom de la variable en items dans news.php, tout s'est très bien passé.

Lorsque j'ai changé la variable post en item, elle a cessé de fonctionner à nouveau ...

<?php foreach($items as $post): setup_postdata($post); ?>
    <!-- post -->
<?php endforeach; wp_reset_postdata(); ?>
0
Tim S.

À la fin de votre news.php, utilisez wp_reset_query(). Cela reviendra à la requête par défaut pour cette page.

J'espère que cela t'aides!

Référence de fonction Codex pour wp_reset_query ()

1
Alex Lane