ページネーション(ページャー)自作
Page No.1
Contents
まえがき – どうでもいいこと
この投稿の公開日付は、2014年11月となっているので、始めにこのプログラムを作ったのはその頃になります。もう、ずいぶんと月日が流れました。こうして改めて当時投稿した内容を見返していると、そうだったか、などと思い出すことも多々あって、備忘録として投稿を残していたことは、自分なりに改めて良かったと思ったりしています。あと、こうしてプログラムのことを記事に書いていると、実はその時に、こうした方がいいんじゃないか!ということに気がつくことがよくあるのです。
WordPress を使い始めた当初は、教本に載っていた通り WP-PageNavi を使っていたとのこと。
これといった問題があったわけではないし、こうであればいいのにという希望もまったくと言ってよいほどなかったのだけれど、たいして難しいものでないし、自作すれば汎用的でない分、シンプルになって少しは軽くなるのではないか、というわずかな期待をもって自作することにしたようです。
今となって自分としてはすっかり忘れてしまっていますが、「画像一覧ページ」で参考にした教本、「PHPによるWordPressカスタマイズブック 藤本 壱 著 出版社 ソシム」に出ていたページネーションを基本にしたとのことです。あらためてその本を見てみると、参考にしたというか、ほぼそのままという感じですね。
for でページ数だけループさせ、それで得られる番号により、get_pagenum_link() を使ってページへのリンクを取得して表示させるというやり方。シンプルだけどまっとうな手法。
その本では、get_pagenum_link() を使ってリンクを得ているのを、パーマリンク設定が基本のままだったということもあって、簡略化して使わないようにすることで、少しでも軽くなればと、涙ぐましい努力をしたようです。
そして、自作なりのオリジナリティーな部分として、目当てのページ番号を入力して直にそのページへジャンプできるようにと form ( input 要素 )を付加しています。このときすでにページ数が多量になることを想定していたようです。ページ数が多いサイトであるなら、このダイレクトジャンプの機能は有用なのではないかと思います。
このプログラムもなんだかんだと改良を重ね、2023年1月現在、バージョンは5となっています。なんとか少しでも軽く速くということを考えて改良したきたわけですが、このバージョン5においては、リストの生成に for ループを使うのをやめ、新たに思いついた手法へと変更しています。実はこれ、お風呂に入っていて頭を洗っているときに閃いたんだけど。これにより、かなり高速化できたのではと、自負しています。
function make_page_num_list()
なんとか高速化できないものかと、あーでもないこーでもないと考えて思いついた手法。それは、ページナンバーリストを生成するのに、正攻法の for ループを使うのをやめ、配列操作でナンバーリストを生成していく手法です。
こちらも理屈はとてもシンプルなものです。
1から総ベージ数までのすべてのページ番号を値にもつ配列を、range( 1, $allpages ) で生成します。この全ページ番号を値としてもっている配列を、現在のページ番号で array_slice() を使って前後二つに分割します。隣接するページ番号は、その前後の配列の最後と最初で簡単に取得できます。
if の条件式はほとんど必要としない。おおかたの処理を配列を操作する関数でできる。10 の倍数ページも100 の倍数ページも同じことをするだけ。それぞれの配列を10の倍数の配列、100の倍数の配列として作っておけばいいだけのこと。どうしても細かいことで if 文が必要にはなるけれど、ループでやるよりも条件判断を通る数を圧倒的に減らすことが出来るはずです。
ということで、まずはその関数。与えられた現在のページ番号、総ページ数から、表示するページ番号のリストを配列で返します。当然のことながら、functions.php 内に書いてあります。
function echopagelist()
そして、メインとなる本体の関数。これは自サイト用で、パーマリンク設定がデフォルトの基本のままのサイトでしか使えないものです。あしからずご承知おきください。で、汎用性をもたせたものは2ページ目に載せてます。
これももちろん、functions.php 内に書いてあります。
で、同じページ内で上部と下部など、この関数が二度呼ばれたときは、一度目に生成した html データを変数に保存しておいて、二度目の時はそのキャッシュを使用するようにして同じものが二度生成されないようにしてあります。
そのキャッシュとしての変数が static $liststr。これ、関数内でも static ということが使えることを実は知らなかった。あまり global を使いたくないな、と思ってなにか他に手は無いものかと探していたら見つかった。static をつけて静的な変数にすると、その関数が終わってもその変数に入れた値は維持されているというもの。なんだそんな便利なものがちゃんとあったんだな~って。
と、いうことでやはりパーマリンク設定をしてあっても使える汎用性をもたせたものも作ってみるかということになります。まぁ、結局それはプラグインとして使うことになるわけです。ちなみにそのプラグインは WordPress のプラグイン公式ディレクトリからダウンロードできます。
Simplistic page navi Pluginそしてこのサイトにあるそのプラグインの詳細ページはここです->「ページネーション(ページャー)を作り直してプラグイン」
と、いいつつ、2ページめではその汎用性をもたせた関数となります。
Post : 2014/11/04 00:28
Comments feed
Trackback URL : https://strix.main.jp/wp-trackback.php?p=48154