web-dev-qa-db-ja.com

WP_Queryは指定された数の投稿をロードしません

私はnew WP_Query経由でランダムに選択された投稿を自分のページセクションに持っています。問題は'posts_per_page'属性が機能しないことです。これが私のコードです:

<div id="featured">
    <?php 

        $args = array(
            'post_type' => 'post',
            'orderby'   => 'Rand',
            'posts_per_page' => 4,
            'nopaging' => true,
            );

        $the_query = new WP_Query( $args );
        if ( $the_query->have_posts() ) {

            echo '<div style="table full">';

            while ( $the_query->have_posts() ) {

                $the_query->the_post(); 

            ?>

                <div class="featcell" style="background: url(<?php the_post_thumbnail_url(); ?>) center center">
                    <a class="featartlink" href="<?php echo get_permalink(); ?>"><?php echo get_the_title(); ?></a>
                </div>

            <?php 

            }

            echo '</div>';

            wp_reset_postdata();

        } 

    ?>
</div>

上記のスクリプトの結果は、データベースからすべての投稿を読み込むスクリプトです。スクリプトは単一の投稿ページの投稿の下に配置されます。何が悪いの?すべて問題ないようですが、そうではありません。助けてくれてありがとう。

1
X9DESIGN

nopagingはページ付けを無効にし、posts_per_pageはページ付けパラメーターです。ページネーションを無視してすべての投稿を返すように指示しています。

3
Milo

私はその理由はわかりませんが、いくつかのテストの後、私はget_posts()関数を使用しようとしましたが、すべてうまくいきました。 new WP_Queryが動かないのはなぜだろう。

これがuse get_posts()関数の正しいコードです。

<div id="featured">

    <?php 

        global $post;

        $args = array( 

            'post_type' => 'post', 
            'posts_per_page' => 4, 
            'orderby' => 'Rand',

        );

        $Rand_posts = get_posts( $args );
        if ( $Rand_posts ) : 

            echo '<div style="table full">';

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

                <div class="featcell" style="background: url(<?php the_post_thumbnail_url(); ?>) center center">
                        <a class="featartlink" href="<?php echo get_permalink(); ?>"><?php echo get_the_title(); ?></a>
                </div>

            <?php endforeach; wp_reset_postdata(); 

            echo '</div>';

        endif;

    ?>

</div>
1
X9DESIGN