%e3%80%90wordpress%e3%80%91%e3%83%88%e3%83%83%e3%83%97%e3%83%9a%e3%83%bc%e3%82%b8%e3%81%a7%e3%83%9a%e3%83%bc%e3%82%b8%e9%80%81%e3%82%8a%e3%82%92%e3%81%99%e3%82%8b%e6%99%82%e3%81%ab%e3%81%af%e3%81%be

【wordpress】トップページでページ送りをする時にはまったこと

ちなみに今回の記事は、はっきりした解決方法がありません。
今後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」に変えなくてもよかったんじゃぁ…。
フォーラムに掲載されてたコードだけ実装すれば、うまくページ送りできたような気もする。。。
とりあえずの方法なんで、本当に困った時だけお試しください。

タイトルとURLをコピーしました