
ちなみに今回の記事は、はっきりした解決方法がありません。
今後wordpressが進化する過程で、ずいぶん変わるんだろうなとは思っています。
今回遭遇したのは、このブログのトップページだけページ送りがおかしくなったこと。アーカイブページ、シングルページは問題なし。
どんな風におかしいかというと、ページ送りそのものは表示されるんですが、1ページ目の内容しか表示されないという現象。
ページ送りでよくある「今どのページを見ているかwordpressが理解していない」ということだと思ったので、「$paged」の指定さえうまくやればそれでOKと思っていました。
しかし、そんなに甘くなかった。
このブログのトップページはカスタム投稿タイプを利用しています。アーカイブではなく、固定ページにカスタム投稿タイプの記事を表示させています。
ここでのキーワードは「トップページ(front-page.php)」「カスタム投稿」「ページ送り」です。
ここ最近言われている「query_posts」は使っちゃダメというのが多いですが、「pre_get_posts」はfront-page.phpを利用している場合は、条件分岐が現時点では効かないようです。。。
さらに固定ページにカスタム投稿の一覧を表示させる場合、「pre_get_posts」は使えないそうです。
これが分かるまで何時間費やしたか…ということで、「query_posts」を使って、カスタム投稿タイプの記事を表示させました。
さらに落とし穴。
フロントページを固定ページにするとpagedの情報が無効にされるとのこと。
functions.phpにコード書き込んで、やっとうまくいった!
ちょっと対応するだけが、思わぬ事態に…。何回ページの表示を崩したか…
現時点での備忘録として、うまくいったコードを書いておきます。
201
front-page.phpのコード
<?php query_posts('post_type=カスタム投稿タイプ名&posts_per_page=表示させる記事数&paged='.$paged); ?> <?php if (have_posts()) : while (have_posts()) : the_post(); ?> //ここにループ内の記述 <?php endwhile; else : ?> <?php endif; ?> <?php //ページネーション挿入?> <?php get_template_part('pager'); ?>
pager.phpのコード
使い回しするコードなので、別のphpファイルとして、作ったものです。
上記コードの
<?php get_template_part('pager'); ?>
は、別のPHPファイルを読み込むという指定です。
別ファイルにするのが面倒なら、このpager.phpのコードと差し替えればOKです。
<?php //Pagenation if (function_exists("pagination")) { pagination($additional_loop->max_num_pages); } ?>
functions.phpのコード
このコードはフォーラムに掲載されていたものです。
add_action( 'parse_query', 'my_parse_query' ); function my_parse_query( $query ) { if ( ! isset( $query->query_vars['paged'] ) && isset( $query->query_vars['page'] ) ) $query->query_vars['paged'] = $query->query_vars['page']; }
参考:https://ja.forums.wordpress.org/topic/7549
functions.php内のページネーションのコード
先日の記事に掲載していますので、そちらをご覧ください。
ふと思ったんだけど、トップページにカスタム投稿タイプが無事に表示されてたんだから、わざわざ「query_posts」に変えなくてもよかったんじゃぁ…。
フォーラムに掲載されてたコードだけ実装すれば、うまくページ送りできたような気もする。。。
とりあえずの方法なんで、本当に困った時だけお試しください。