###前提・実現したいこと
wordpressでカスタム投稿の記事一覧を作っています。
表示したいデザインが3種類あるので、3つのループを作って、
条件を入れて表示させています。
表示自体までは試行錯誤してうまくいったのですが、
ページネーションがちゃんと動作していないようです。
###該当のソースコード(記事一覧/archive-shop.phpに記載)
<!--来月--> <div class="next_month"> <!--記事のタイトルと本文を表示するため「ループ」の設定の中に記述--> <?php $args = array( 'posts_per_page' => -1, 'orderby' => 'meta_value', 'meta_key' => 'publication_date', 'order' => 'ASC', 'post_type' => 'shop', 'post_status' => 'publish' ); ?> <?php $my_query = new WP_Query( $args ); ?><!-- クエリの指定 --> <?php while ( $my_query->have_posts() ) : $my_query->the_post(); ?><!-- 他と違い$my_queryはクラスなので、「->(アロー演算子)」を使って値を取得。ここからループ開始 --> <?php $now0 = post_custom('publication_date'); $now1 = date("Y/m",strtotime("today")); $now2 = date("Y/m",strtotime($now0)); $now3 = date("Y/m",strtotime("today + 2month")); if($now2 > $now1 && $now2 < $now3): ?> //表示する内容1 <?php else: ?> <?php endif; ?> <?php endwhile; ?> </div> <?php wp_reset_postdata(); ?><!-- 忘れずにリセットする必要がある --> <!--今月--> <?php $args = array( 'posts_per_page' => -1, 'orderby' => 'meta_value', 'meta_key' => 'publication_date', 'order' => 'ASC', 'post_type' => 'shop', 'post_status' => 'publish' ); ?> <?php $my_query = new WP_Query( $args ); ?><!-- クエリの指定 --> <?php while ( $my_query->have_posts() ) : $my_query->the_post(); ?><!-- 他と違い$my_queryはクラスなので、「->(アロー演算子)」を使って値を取得。ここからループ開始 --> <?php $now0 = post_custom('publication_date'); $now1 = date("Y/m",strtotime("today")); $now2 = date("Y/m",strtotime($now0)); if($now2 == $now1): ?> //表示する内容2 <?php else: ?> <?php endif; ?> <?php endwhile; ?> <?php wp_reset_postdata(); ?><!-- 忘れずにリセットする必要がある --> <!--先月(メインループ)--> <?php if ( have_posts() ) while ( have_posts() ) : the_post(); ?><!-- ループの開始 --> <?php $now0 = post_custom('publication_date'); $now1 = date("Y/m",strtotime("today")); $now2 = date("Y/m",strtotime($now0)); if($now2 < $now1): ?> //表示する内容メイン <?php else: ?> <?php endif; ?> <?php endwhile; ?> <?php wp_reset_query(); ?><!-- 忘れずにリセットする必要がある --> <!-- pager --> <?php if (function_exists("pagination")) { pagination($additional_loop->max_num_pages); } ?> <!-- /pager -->
###該当のソースコード(ページャー/functions.phpに記載)
//ページネーションを追加 function pagination($pages = '', $range = 3) { $showitems = ($range * 2)+1; global $paged; if(empty($paged)) $paged = 1; if($pages == '') { global $wp_query; $pages = $wp_query->max_num_pages; if(!$pages) { $pages = 1; } } if(1 != $pages) { echo "<div class=\"pagination clearfix\"><span>Page ".$paged." of ".$pages."</span>"; if($paged > 2 && $paged > $range+1 && $showitems < $pages) echo "<a href='".get_pagenum_link(1)."'>« First</a>"; if($paged > 1 && $showitems < $pages) echo "<a href='".get_pagenum_link($paged - 1)."'>‹ Previous</a>"; for ($i=1; $i <= $pages; $i++) { if (1 != $pages &&( !($i >= $paged+$range+1 || $i <= $paged-$range-1) || $pages <= $showitems )) { echo ($paged == $i)? "<span class=\"current\">".$i."</span>":"<a href='".get_pagenum_link($i)."' class=\"inactive\">".$i."</a>"; } } if ($paged < $pages && $showitems < $pages) echo "<a href=\"".get_pagenum_link($paged + 1)."\">Next ›</a>"; if ($paged < $pages-1 && $paged+$range-1 < $pages && $showitems < $pages) echo "<a href='".get_pagenum_link($pages)."'>Last »</a>"; echo "</div>\n"; } }
###該当のソースコード(メインループの条件?/functions.phpに記載)
//メインクエリ function query_at_shop( $query ){ // ダッシュボードまたは管理パネルが表示されている、もしくはメインクエリではない場合は処理を中断 if( is_admin() || ! $query->is_main_query() ) return; if( $query->is_post_type_archive( 'shop' ) ){ $query->set( 'posts_per_page', '4' ); return; } } add_action( 'pre_get_posts', 'query_at_shop' );
###試したこと
最初、archive-shop.phpにメインループだけ作って動作確認をしました。
(期待通りに動作)
次に、条件を加えるためにサブループを加えました。
(メイン、サブというのをこの作業しているときに知って、ループ部分を今のように変更)
ページャーがうまく動作してないことに気づく。
例えば、現在カスタム投稿が18件あり、内容1に2件、内容2に3件、メインは残り13件です。内容1、2については全件表示、メインをページあたり4にしてみると、なぜか全部で5ページで1ページ目は4件、2ページ目は2件、3ページ目は3件、4ページ目は4件、5ページ目は表示なしとなってしまいます。
メインを全件表示にすると全件表示されます。ページあたりの件数を変えると同じようにバラバラになってしまいます。
functions.phpに書かないタイプのページャーも試してみましたが、変化なし。
###補足情報(言語/FW/ツール等のバージョンなど)
wordpress4.6.1
XAMPPを使ってローカルで作業中
ネットの情報を元に作業中
回答2件
あなたの回答
tips
プレビュー