ページ付け作業を行うにはいくつか問題があります。
私はすべてのブログ記事を表示する必要がある、そこにカスタムページテンプレートを持っています。私は以下の "query"を作り、私のhtml構造を作り上げます。
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array(
'post_type' => 'post',
'orderby' => 'date',
'order' => 'DESC',
'post_status' => 'publish',
'posts_per_page' => 5,
'paged' => $paged,
);
$posts = get_posts( $args );
if ( ! empty( $posts ) && ! is_wp_error( $posts )) {
$displaylist = '<div class="list-group">';
foreach ( $posts as $post ) {
/* loop stuff */
}
$displaylist .= '</div>';
echo( $displaylist );
wp_pagenavi( array( 'type' => 'multipart' ) );
}
これで私は私が期待したように記事を得るがページネーションコントロールを得ない。
注意してください:それは "メイン"ページではなく、サブページです。
研究の後、私は多くの人がこれを使っていることに気づきます。
$posts = new WP_Query( $args );
これの代わりに:
$posts = get_posts( $args );
私はWP_Query($args)
を使用する場合、私は私が3つのポストしか持っていない間、私は多くの空のポストを得る。
私は私が何を間違っているのかわからないが、私はwordpressとphpには絶対に初心者だ。
ここにいくつかの問題があります。
ページ区切り付きのクエリにget_posts
を使用しないでください。 no_found_rows=true
をWP_Query
に渡すので、改ページを合法的に破るか無視します。さらに、get_posts
はクエリオブジェクトから$posts
プロパティのみを返し、ページ付けはページ付けを計算するためにクエリオブジェクトから他のプロパティを必要とします。あなたはget_posts
を改ページすることができますが、それは本当に面倒な事件であり、そしてget_postsis just a wrapper function for
WP_Query`です。
カスタム変数としてグローバル$posts
変数( またはWordpressのその他のグローバル変数またはPHP )を使用しないでください。変数に異なる内容を代入していると、グローバル変数が壊れます。これは、WP_Query
を使用したクエリからの矛盾した結果を引き起こしている最も可能性の高い問題です。常にカスタム変数を使用してください。これに対する唯一の例外は、setup_postdata( $post )
をget_posts
または同様の関数と一緒に使用している場合です。setup_postdata()
では、$post
グローバルを使用する必要があります。ここでは、$post
グローバルを復元する作業が終わったら、wp_reset_postdata()
を使用することを忘れないでください。
get_posts
を使用する場合、WP_Error
は投稿の配列または空の配列のみを返すため、get_posts
オブジェクトをチェックする必要はありません。それはWP_Error
オブジェクトを決して返しません
次のことを試してください。
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array(
'post_type' => 'post',
'orderby' => 'date',
'order' => 'DESC',
'post_status' => 'publish',
'posts_per_page' => 5,
'paged' => $paged,
);
$q = new WP_Query( $args ),
if ( $q->have_posts() ) {
$displaylist = '<div class="list-group">';
while ( $q->have_posts() ) {
$q->the_post();
// LOOP STUFF HERE
} // endwhile
$displaylist .= '</div>';
wp_pagenavi( array( 'query' => $q ) );
wp_reset_postdata(); // VERY VERY IMPORTANT
} // endif