web-dev-qa-db-ja.com

複数のループはリセットされません

私の素敵な同僚は、Wordpressでそれを入手するのに苦労する何かをもう一度設計しました。驚いたことに、それは私が以前に何度もやったことがあるものです。最近の投稿とページコンテンツを1ページにまとめました。

ホームページはページです。ページのコンテンツのすぐ上に3つの最近の投稿があります。投稿のために私は<!--more-->タグの前にコンテンツの最初の部分を表示する必要があります。

そのループはうまくいくようです。テンプレートの後半で、実際のページコンテンツをループします。私が何をしても、それはいつも私に危険な結果をもたらします。

これが私のindex.php/page.phpテンプレートのトリミング版です(それらは偶然同じものです):

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

ご覧のとおり、newsテンプレートが含まれています。ここにあります:

<?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>

何がおかしいのですか?

前もって感謝します。

1
Tim S.

カスタムループにWordpressの変数postsを使用しないでください。 news.phpで変数名をitemsに変更した後、すべてうまくいきました。

変数postitemに変更すると、再び機能しなくなりました...

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

News.phpの最後にwp_reset_query()を使います。これはそのページのデフォルトのクエリに戻ります。

お役に立てれば!

wp_reset_query()のコーデックス関数リファレンス

1
Alex Lane