web-dev-qa-db-ja.com

カスタム投稿wp_queryのページ付け

<?php
        $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
        $loop = new WP_Query(
            array(
                'post_type' => 'html5-blank',
                'posts_per_page' => 5,
                'paged'=>$paged
            )
        );
?>
<?php if ($loop->have_posts()): while ($loop->have_posts()) : $loop->the_post(); ?>      
 //Loop Code Here..
 <?php wp_reset_query(); ?> 
   <nav>
        <?php previous_posts_link( 'Newer posts &raquo;' ); ?>
        <?php next_posts_link('Older &raquo;') ?>
    </nav>
<?php endwhile; ?>
<?php else: ?>

結果を入力したときの次のページのURLは次のとおりです。www.mywebsite.com/ blog/page/2は機能しています。しかし、ページネーションのリンクを表示することはできません。

どこがうまくいかなかったのですか?

編集:ページ付けリンクはpage/2/に表示されていますが、メインのブログページには表示されていません。どうして?

7
woninana

<?php wp_reset_query(); ?>を間違った場所に置いたと思います。

このようなもの

<?php endwhile; ?>
<?php else: ?>
<?php wp_reset_query(); ?>
0
Reigel

カスタム投稿wp_queryを使用したページ付けについて提案する方法は3つあります。残念ながら、今日まで、これに関する良い情報はあまりありません。少なくとも、何が出ているのかがはっきりしない場合もあります。うまくいけば、これが役立ちます!

また、wp_reset_postdata()が間違った場所にあることに注意してください。ただし、正しく機能させるには、さらに多くのことが必要です。

オプション1-max_num_pages変数を使用

_<?php
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    $args = array( 
        'posts_per_page' => 1, 
        'paged' => $paged, 
        'post_type' => 'cpt_type'
    );
    $cpt_query = new WP_Query($args);
?>

<?php if ($cpt_query->have_posts()) : while ($cpt_query->have_posts()) : $cpt_query->the_post(); ?>

    //Loop Code Here...

<?php endwhile; endif; ?>

<nav>
    <ul>
        <li><?php previous_posts_link( '&laquo; PREV', $cpt_query->max_num_pages) ?></li> 
        <li><?php next_posts_link( 'NEXT &raquo;', $cpt_query->max_num_pages) ?></li>
    </ul>
</nav>
_

上記のように、_previous_posts_link_と_next_posts_link_の形式が少し異なり、_max_num_pages_変数にアクセスします。 _max_num_pages_にアクセスするときは、必ず独自のクエリ変数名を使用してください。 $ cpt_queryを使用していることに注意してください。これは、クエリ例の変数だからです。

オプション2-ループクエリに$ wp_query変数を一時的に使用する

これは多くの人が推奨することですが、$ wp_query変数を一時変数に割り当てて再割り当てするように注意してください。そうしないと、あらゆる種類の問題が発生します。そのため、オプション#1をお勧めします。 CSSトリック に記載されているように、次のようなことができます。

_<?php 
  $temp = $wp_query; 
  $wp_query = null; 
  $wp_query = new WP_Query(); 
  $wp_query->query('showposts=6&post_type=news'.'&paged='.$paged); 

  while ($wp_query->have_posts()) : $wp_query->the_post(); 
?>

  <!-- LOOP: Usual Post Template Stuff Here-->

<?php endwhile; ?>

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

<?php 
  $wp_query = null; 
  $wp_query = $temp;  // Reset
?>
_

オプション3-WP-pagenaviプラグインを使用する

代わりにできる別のオプションと同じように、 WP-pagenavi プラグインを使用し、オプション#1のようにクエリを設定します。ただし、プラグインをインストールしたら、コードに1つの変更を加え、要素内のすべてを削除して、この関数に置き換えます。したがって、次のようになります。

_<nav>
    <?php wp_pagenavi( array( 'query' => $cpt_query ) ); ?>
</nav>
_
16
Trevor