前提として
WPでの制作は初めてです。言葉足らずだったり説明が分かりづらかったりしますが、宜しくお願いします。
実現したいこと
taxonomy-news.phpのページネーションをプラグインなしで実装したいです。
カスタム投稿タイプ名: blog
タクソノミー名: news
ターム: IT, 考察, 自動車..etc (投稿する記事内容に応じて増えていく予定)
このページにカテゴリー一覧のようにターム毎の記事一覧を表示させたいですが、2ぺージ目以降のURL(http://localhost:8888/WP/ドメイン名/news/タームのスラッグ名/page/2)を直接ブラウザに入力したり、2ぺージ目の番号をクリックしても404が吐き出されます。なので、まず2ぺージ目以降のURLが存在してない所までは分かりました。
ターム毎の記事一覧ページのページネーションについて調べていると、『pre_get_postsがいい。』と書いてある記事(__**https://qiita.com/_ruka_/items/e14280d34eddf49efad1#pre_get_posts%E3%81%AE%E3%81%94%E6%8F%90%E6%A1%88**__)を見たのでfunctions.php に追加しましたが、その後、そのコードをどのように使ったらいいか分からず苦戦しています。
その他事前の設定としては、
「フロントページの表示」には固定ページを設定
該当のソースコード
/*---------- taxonomy-news.php -------------*/ <?php $paged = get_query_var('paged') ? get_query_var('paged') : 1 ; $type = get_query_var('news'); $args = array( 'post_type' => 'blog', 'tax_query' => array( // 'relation' => 'OR', array( 'taxonomy' => 'news', 'field' => 'slug', 'terms' => $type, ), ), 'paged' => $paged, 'posts_per_page' => '1', ); $my_query = new WP_Query($args); $max_num_pages = $my_query->max_num_pages; ?> <pre>$my_query->max_num_pages:<?php print_r($my_query -> max_num_pages); ?></pre> <?php $my_query = new WP_Query( $args ); ?> <?php if ( $my_query->have_posts() ) : ?> <?php while ( $my_query->have_posts()) : $my_query->the_post(); ?> /*---------- 記事一覧表示ループ ----------*/ <?php endwhile; endif; ?> <?php if (function_exists('responsive_pagination')) { responsive_pagination($max_num_pages); } ?> <?php wp_reset_postdata(); wp_reset_query(); ?>
ソースコード
試したこと
例)ターム『考察』の投稿数は合計7。
1) WP => 設定 => 表示設定 => 1ページに表示する最大投稿数を『1』に設定
2) 'posts_per_page' => '1'にして、
上記のコードのサブループで設定した値を確認した結果、ターム『考察』一覧ページでは『7』が出力され、ページネーションも7ぺージまで表示される
また、
1) WP => 設定 => 表示設定 => 1ページに表示する最大投稿数を『2』に設定
2) 'posts_per_page' => '2'にして、
上記のコードのサブループで設定した値を確認した結果、ターム『考察』一覧ページでは『4』が出力され、ページネーションも4ぺージまで表示される
/*---------- functions.php -------------*/ https://qiita.com/_ruka_/items/e14280d34eddf49efad1#pre_get_posts%E3%81%AE%E3%81%94%E6%8F%90%E6%A1%88 //////////////// function custom_query($query) { if ( is_admin() || !$query->is_main_query() ) return; if ( $query-> is_tax('news') ) { $query->set('posts_per_page', '2'); return; } } add_action( 'pre_get_posts', 'custom_query' ); /*---------- pagination ----------*/ function responsive_pagination($pages = '', $range = 4){ $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 '<ul class="pagination" role="menubar" aria-label="Pagination">'; //先頭へ echo '<li class="first"><a href="'.get_pagenum_link(1).'"><span>First</span></a></li>'; //1つ戻る echo '<li class="previous"><a href="'.get_pagenum_link($paged - 1).'"><span>Previous</span></a></li>'; //番号つきページ送りボタン for ($i=1; $i <= $pages; $i++) { if (1 != $pages &&( !($i >= $paged+$range+1 || $i <= $paged-$range-1) || $pages <= $showitems )) { echo ($paged == $i)? '<li class="current"><a>'.$i.'</a></li>':'<li><a href="'.get_pagenum_link($i).'" class="inactive" >'.$i.'</a></li>'; } } //1つ進む echo '<li class="next"><a href="'.get_pagenum_link($paged + 1).'"><span>Next</span></a></li>'; //最後尾へ echo '<li class="last"><a href="'.get_pagenum_link($pages).'"><span>Last</span></a></li>'; echo '</ul>'; } }
参考にしたサイト
https://xtra-blog.net/pagination/
https://lib.ridesign.jp/lib_wp/wp02/
投稿ぺージ、カスタム投稿ぺージ、カテゴリー一覧ページでは、ページネーションがしっかり表示され2ぺージ目以降にも飛びますが、このターム毎の記事一覧ページではうまく反映されずに苦戦しているので、ここに質問させていただきました。
宜しくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/18 20:25
2020/05/19 03:49 編集