web-dev-qa-db-ja.com

ナビゲーションリンクを表示していないWP_queryのページ区切り

ページにページ付けを追加できません。私はWP_queryを使っていて、ページごとに4つの投稿を引き戻したいと思います。基本的なクエリはうまくいっているように見えますが、ページネーションに関して何か足りないはずです。

// The query for 4 posts
            $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
            $query = new WP_Query();
            $query->query('showposts=4'.'&paged='.$paged);

if ( $query->have_posts() ) : 
    while ( $query->have_posts() ) : $query->the_post(); ?>
    <div class="post">
      <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
      <p class="author">by <?php the_author(); ?></p>
    </div>
    <?php endwhile; ?>
    <!-- end of the loop -->
    <nav>
        <?php previous_posts_link('&laquo; Newer posts') ?>
        <?php next_posts_link('Older posts &raquo;') ?>
    </nav>

        <?php wp_reset_postdata();

        // If no results appear
        else : ?>
            <p><?php _e( 'Sorry, no posts matched your criteria.' ); ?></p>
        <?php endif; ?>

そのようにして、一番上のページ区切りのvarを設定しました。

$query->query('showposts=4'.'&paged='.$paged);

そのようなものとしてページネーションナビゲーションを含めています:

<nav>
    <?php previous_posts_link('&laquo; Newer posts') ?>
    <?php next_posts_link('Older posts &raquo;') ?>
</nav>

しかし、私は空のHTML <nav></nav>を受け取るだけです - しかしエラーはありません、そして私が欠けているものをうまく処理することはできません。

編集: /私が更新した提案のとおり:

        $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
        $args = array(
            'post_per_page' => 4,
            'paged'         => $paged,
        );
        $query = new WP_Query( $args );

ボタンリンクを次のように更新しました。

<?php next_posts_link( 'Older posts &raquo;', $query->max_num_pages ); ?>

私はまだページネーションリンクを見ていません。

4
Francesca

それ以前にposts_per_pageに置き換えられたshowpostsを使用しないでください。

個人的には、以下のように引数をWP_Queryに追加します。さらに、ページ付けは以下のように機能するはずです。

$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$args = array(
    'post_per_page' => 4,
    'paged'         => $paged,
);
$the_query = new WP_Query( $args );

global $wp_query;
// Put default query object in a temp variable
$tmp_query = $wp_query;
// Now wipe it out completely
$wp_query = null;
// Re-populate the global with our custom query
$wp_query = $the_query;

if ($the_query->have_posts()) : 
    while ($the_query->have_posts()) : $the_query->the_post();
        // loop code
    endwhile;

    previous_posts_link('&laquo; Newer posts');
    next_posts_link( 'Older posts &raquo;', $the_query->max_num_pages );
    wp_reset_postdata();

else :
    // no post found code 
endif;

// Restore original query object
$wp_query = null;
$wp_query = $tmp_query;

Q&Aと同じ/ カスタムループのページ区切りを修正するにはどうすればいいですか? @ChipBennettでリンクしました。

もう1つの注意は、これが静的フロントページとして機能するページテンプレートの場合、pageではなくクエリ変数pagedを使用する必要があることです。

$paged = ( get_query_var( 'page' ) ) ? get_query_var( 'page' ) : 1;
10
Nicolai

やるべきことは、wordpressから posts_per_page の値を取得することです。この値はwordpressの管理メニューで変更できます。

$page = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
if(!$page)
    $page = ( get_query_var( 'page' ) ) ? get_query_var( 'page' ) : 1;

$posts_per_page = get_option( 'posts_per_page' );

$query = new WP_Query( array(
    'posts_per_page' => $posts_per_page,
    'paged'          => $page,
    'post_status'    => 'publish',
    'orderby'        => 'title',
    'order'          => 'ASC',
) );

while ( $query->have_posts() ) {
    $query->the_post();

    // Code for Output
}
1
Andreas Rex