web-dev-qa-db-ja.com

ページネーション(WP-PageNavi)が機能しないようにする

ページ付け作業を行うにはいくつか問題があります。

私はすべてのブログ記事を表示する必要がある、そこにカスタムページテンプレートを持っています。私は以下の "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には絶対に初心者だ。

1
Manu Zi

ここにいくつかの問題があります。

  • ページ区切り付きのクエリにget_postsを使用しないでください。 no_found_rows=trueWP_Queryに渡すので、改ページを合法的に破るか無視します。さらに、get_postsはクエリオブジェクトから$postsプロパティのみを返し、ページ付けはページ付けを計算するためにクエリオブジェクトから他のプロパティを必要とします。あなたはget_postsを改ページすることができますが、それは本当に面倒な事件であり、そしてget_postsis just a wrapper function forWP_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
3
Pieter Goosen