続・ページをめくる

WordPressで小説サイト

 ページめくりについては以前、ページをめくるで一度まとめてはみました。しかしその後、表示がちょっとおかしくなってしまったので、もう一度勉強してみることにいたしました。

 ナニがおかしいって、ページの前後が逆に表示されるのですよ。おまけに突拍子もないところから別の小説が現れるし。これはいかん、ということで修復に乗り出しました。

 以前ページめくりのために使ったのは

previous_post_link()
next_post_link()

 というテンプレートタグでした。実際の記述は

<?php
next_post_link(‘%link’, ‘<< Prev / ’, true);
previous_post_link(‘%link’, ‘Next >>’, true);  
?>

だったわけです。trueというのは同一カテゴリの記事、という条件をつけるためのパラメータだそうな。
 next・・・は現在の投稿から見て日付順でひとつ後(より新しい)の投稿へのリンクを表示し、previousはひとつ前(古い)へのリンクを表示します。普通ブログの記事というやつは新しくてナンボという性格のものですから、新しいものから表示されます。ここで柳、大間違いをしていました。

例えば、4章構成のお話を
第1章を1月3日にアップし
第2章を1月4日
第3章を1月5日
第4章を1月6日にアップロードしたとします。
 そのページが第2章を表示しているとき、<< Prevで示されるべきは一つ前のお話である第1章で、日付としては前日にアップロードされているので使うべきタグはprevious_post_linkということになります。もうおわかりですね。表示の中身と表示が入れ替わってしまっているのです。
一応見栄えのテストもしたはずなのにどうしてこんなことになってしまったのか皆目見当がつかないのですが、一つの可能性として、

previous_posts_link()
next_posts_link()

 というタグと混同した可能性はあります。このタグであれば日付の逆順にソートされるので、この順序でよかったということになります。全く以てsひとつで大事になってしまいました。頭の中でページの前と後ろが変則ラインダンスを踊ってしまって一騒動。しかし結局は・・・

the_post_navigation()

というタグを使えばそこそこな見栄えのものが出せるとわかったのでそちらへ書き換えました。それというのも、previous_post_link() およびnext_post_link()では、前後へのリンクをただ出力することできても、ページにおける位置決めが思い通りにならなかったのです。(要するに対応するCSSをきちんと設定していないので、見栄えがイマイチ・・・CSSを付加しようとしたのですが巧く効きませんでした)

実際には

the_post_navigation( array(
‘in_same_term’ => ‘true’, //同じカテゴリの記事だけを拾ってね、という命令
‘prev_text’ => ‘« %title’,  //「≪」という記号に続いて一つ前の記事タイトルをリンクつきで表示
‘next_text’ => ‘%title »’,  //一つ後の記事タイトル+「≫」という記号をリンクつきで表示
) );

 ・・・という記述で現在のページめくりが成立しています。
 命令の中身を見ると実直に以前と何も変わらんのですが、対応するCSSがうちのテーマ「Scribe」の中に予め存在するらしく、位置的な見栄えが調整されて表示されます。(タイトルが長くなっても重ならずに左上-右下で表示される)

 ページテンプレートの有り難いところは、膨大なファイルを一々書き換えなくても使用しているテンプレートをちょこちょこっと直すだけで全体の修正が済むということですね。・・・逆を云えば、これをしくじるとサイト全体が大変なことに・・・(汗)

 それと、困ったことがもう一つ。やっぱり順番がおかしい。

 固定ページの表示順は以前プラグインを使って結構がっちり直した1のですが、どうにもシリーズ中に別の小説が入り込むのです。それだけなら固定ページにカテゴリを適用2し、’in_same_term’ => ‘true’,で同じカテゴリのページだけを拾うように設定すればいいのですが、表示順はかっちり決まっているのに上記のタグが拾ってくるページの順番がおかしいのです。

 よくよくthe_post_navigation()やprevious_post_link()、next_post_link()について調べてみると、どうやらそのソートは基本的に「表示順」ではなく「日付順」なのです3ね。日付が同じなら、当然時間を読みに行っているとみるべきです。サイト構築後に新たに書いた小説の場合、数日にわけて1章ずつというのが通り相場なのですが、移植した小説の場合数章を一気に上げた時もありました。この場合、いくら表示順を整えていても上記の命令が拾ってくるのは日付順だから、間で日付が前後すれば当然ページめくりとしてはおかしくなります。日付が同じ場合、時間の並びがおかしいとそうなるわけですね。

 結局、公開日とその時間に注意しながら章の並びをみてみると・・・やっぱり、途中で時間が前後している。表示順は整っていても、存外公開日とその時間は結構バラついていたのです。サイトの表示と固定ページ一覧で並びに矛盾がある箇所を探し、ページ一覧のクイック編集で日付と時間を修正すると、上記のタグできちんとページ送りが出来るようになりました。

 じゃあ、表示順を整えたことには何も意味がなかったのかというと・・・どっこい、親ページに子ページ一覧を表示させて目次として使用する場合4、きちんとした表示順あっての目次なのです。やってて良かったのだ、ウン。

 結論をいうと、ページ送りを整える為にはまず公開日の並びに矛盾がないようにしなければならなかったのです。で、目次をショートコードで自動的に出力させるには表示順を整えるコトが必要と。だいぶ消化出来たような気がします。

2020.2.2追記

 表示順に関連して。
 表示順を整えるプラグインとして以前ご紹介した 「Intuitive Custom Post Order」は柳の環境(ダウングレードして5.2.4)ですと「使用中の WordPress バージョンで未検証」と出まして、どうにも動作が怪しい。このため現在は「Simple Page Ordering」というプラグインに切り替えています。こちらは5.2.5まで対応済みとのこと。現在のところ、問題なく使用できています。

  1. 目次を作る⑤表示順について参照。
  2. 固定ページを整理する参照
  3. 他の順番(例えばタイトル昇順、降順など)で拾う方法がないでもないらしいのですが・・・柳のおツムではそこまで手が届きません。
  4. 「Child Pages Shortcode」・・・子ページの一覧をショートコードで出力するというプラグイン

コメント