私は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>
上記のスクリプトの結果は、データベースからすべての投稿を読み込むスクリプトです。スクリプトは単一の投稿ページの投稿の下に配置されます。何が悪いの?すべて問題ないようですが、そうではありません。助けてくれてありがとう。
nopaging
はページ付けを無効にし、posts_per_page
はページ付けパラメーターです。ページネーションを無視してすべての投稿を返すように指示しています。
私はその理由はわかりませんが、いくつかのテストの後、私は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>