0

私の問題は、カテゴリ「イベント」からいくつかの投稿を表示していることです。次に、同じページの少し後に、カテゴリ「スピラー」からランダムな投稿を表示したいのですが、それはうまくいきます。ランダムな投稿を取得し、タイトルとサムネイルを表示しますが、show the_content (または the_excerpt) と言うと、カテゴリ「イベント」の投稿のすべてのコンテンツ (または抜粋) を表示します。これを解決するのを手伝ってください!

<div class="well span6 Padding10">
    <h4 class="titleFont MarginBottom20">KOMMENDE BEGIVENHEDER</h4>
    <?php
    $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
    $args  = array(
        'category_name' => 'events', // Change these category SLUGS to suit your use.
        'paged'         => $paged

    );
    query_posts( $args ); ?>
    <ul>
        <?php
        while ( have_posts() ) : the_post(); ?>
            <li>
                <a href="<?php the_permalink(); ?>"><strong><?php the_title(); ?></strong></a>
            </li>
        <?php endwhile; ?>
    </ul>
</div>

<div class="span6 well" style="height: 250px;"><h4 class="titleFont">SPILLER HIGHLIGHT</h4>
    <div class="row-fluid">
        <?php
        $args       = array(
            'numberposts'   => 1,
            'orderby'       => 'rand',
            'category_name' => 'spiller'
        );
        $rand_posts = get_posts( $args );
        foreach ( $rand_posts as $post ) : ?>

            <div class="span5"><?php the_post_thumbnail( array( 150, 150 ) ); ?></div>
            <div class="span6 MarginTop10">
                <h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4>
                <!-- THIS IS WHERE IT MESSES UP: --><?php the_content(); ?>
            </div>
        <?php endforeach; ?>
    </div>
</div>
4

1 に答える 1

7

まず、query_posts の使用を避ける必要があります。これは多くの Wordpress グローバルに影響を与え、デフォルト ループを変更します。これは、特定の意図がない限り、パフォーマンスの問題にもつながる可能性があるため、絶対に避ける必要があります。

代わりに、query_posts をWP_Queryに置き換えることを検討してください。

それとは別に、postdata をリセットし、次のループで新しい postdata を設定する必要があります。

クエリのリセット: :

<?php 
while ( have_posts() ) : the_post(); 
?>
<li>
    <a href="<?php the_permalink(); ?>"><strong><?php the_title(); ?></strong></a>
</li>

<?php endwhile;wp_reset_query(); ?>

設定:

foreach( $rand_posts as $post ) : setup_postdata($post); ?>

Postdata をリセットします。

<?php endforeach;wp_reset_postdata(); ?>

なぜこれを行う必要があるのですか?

「the_」で始まる便利な Wordpress 関数のいずれかを使用しているときはいつでも、その関数は $post グローバルを参照しています。query_posts はそのグローバルを変更します (前述のとおり)。別のループでそのグローバルを参照する予定がある場合は、そのグローバルをオンザフライで再度変更できる必要があります。

クエリをリセットすることは、すべてのグローバルが Wordpress のデフォルトに戻ることを確認するための一般的な方法です。しかし、setup_postdata($post_object) は、カスタム ループでそのグローバルを現在のオブジェクトに実際に変更できるようにするものです。

WP_Query が非常に効果的である理由は、WP_Query ループがその特定のオブジェクトにローカライズされ、グローバル $wp_query を変更しないため、クエリをリセットする必要がなくなったためです (これは他の多くのグローバルに影響します)。

これは、 query_posts と WP_Queryの比較に関する便利な情報です。

これは役に立ちます。

于 2013-01-15T14:49:20.893 に答える