前回は、競馬情報サイトの競走馬ページを、「https://keibabu.com/horse/生年/馬名」というパーマリンクで作成したいが、投稿ページだと、スラッグが重複するとスラッグ末尾に勝手に英数字を振られるので、URLとして美しくない。
そして同名馬は割と存在するし、なんなら英数字も末尾に持つ馬もいるので、投稿ページで競走馬ページを作るのは難しそう、というお話でした。
投稿ページが無理なら、固定ページで「https://keibabu.com/horse/生年/馬名」というパーマリンクを作るのは可能でしょうか?
固定ページは投稿ページと異なり、同じスラッグを使い回すことができます。同名馬がいても勝手に英数字を割り振られる心配はありません。
それなら「https://keibabu.com/horse/生年/馬名」というパーマリンクが実現しそうですが、ここでもWordPressの仕様の壁が立ちはだかります。
投稿ページなら「%year/%postname%%」などと設定すれば、西暦を含んだパーマリンクを作成できますが、固定ページでは4桁の数字をパーマリンクに使えないのです。
4桁の数字に何らかのおまけを足せば、スラッグに数字を使うことができます。つまり、固定ページでは、
https://keibabu.com/horse/2015/almond-eye/
、は無理ですが
https://keibabu.com/horse/2015s/almond-eye/
、や
https://keibabu.com/horse/2015年/almond-eye/
、なら可能ということです。
んー。理想形とは微妙に異なりますが、妥協しても良さそうなレベルです。が妥協しませんでした。ググってググってググり抜き、ひとつのプラグインを見つけました。その名も
Allow Numeric Slugs = 英数字のスラッグを許可する、という名前に違わず、このプラグインを使うことで、固定ページのスラッグに英数字を使えるようになります。もっとも、投稿ページの年別アーカイヴページとバッティングする可能性もあるので(未検証)、全くのノーリスクという訳ではないと思いますが、固定ページのスラッグで英数字を使いたい人には福音と言えるのではないでしょうか。
早速使ってみると、たしかに英数字を使えます。固定ページなので、同名馬のスラッグに勝手に英数字を振られることはありません。ようやく「https://keibabu.com/horse/生年/馬名」というパーマリンクが実現したのです。やったね!
それでは固定ページで競走馬ページを作っていきましょう。まずは西暦のページを作っていきます(2020、2019、2018、、)。西暦1900年までの約120ページができました。このそれぞれの西暦ページの直下に、その年に産まれた競走馬ページを置いていきましょう。
ということで、まずは2018年生まれの競走馬約5000頭分のCSVデータをインポートします。
今回、CSVデータのインポートに使ったのは、Really Simple CSV Importer。CSVデータの中に、親ページのページIDを指定することで、親子関係を保ったページをインポートできます。
インポートが完了したので、管理画面から固定ページの一覧を開けます。ん?ちょっともっさりしてるけど、気のせいかな?と気になりましたが、固定ページの一覧がもっさりと表示されました。「2018」ページの直下に、今インポートした5000頭分の競走馬ページが存在しています。ちゃんとデータがインポートされているようです。よかったよかった。
続いて、2017年生まれの競走馬約5000頭分のCSVデータをインポートします。インポートが完了しました。これで固定ページに、計1万頭分のページが生成されていることになります。今回インポートする競走馬の頭数は約20万頭分。まだまだ先は長そうです。
それではちゃんとインポートできているのか、今一度、確認してみましょう。管理画面から、固定ページをクリックしてと・・・ん?固定ページの一覧が表示されずタイムアウトエラーになったんですけど?
サーバー上のメモリー設定を見直したり、今のページを全削除して、再度インポートしてみたり、などやってみましたが、固定ページの一覧ページが開きません。ふぅ。困ったときのグーグル先生。ググってググってググり抜きようやく答えに辿り着きました。
(固定)ページを作りすぎると、PHP で扱うメモリ容量の制限にひっかかってエラーになる可能性があります。今のところ、ページの階層構造を確認するために、すべての (固定) ページをメモリーに読み込むという実装を取っている箇所があります。~中略~ 固定ページを10000ページ作る、とかだと PHP のメモリー容量をオーバーしてしまう可能性があります。エントリー(註:投稿ページ)については、そういう処理をしている箇所はない *はず* なので、10万エントリーぐらい作ってもメモリーオーバーはないと思います。
ワードプレスでどれぐらいの量のエントリやページを扱う事が出来ますか
つまりWordPressの仕様上、数千、数万の固定ページはそもそも無理、ということらしいです。20万頭なんて到底不可能なのです。ただし、投稿ページならいける、ということなので、結局、投稿ページで頑張るしかないということですね。
というわけで、投稿ページで理想のパーマリンクに再び挑みます。次回、ケイバぶ開発日誌 パーマリンク編最終回「なんやかんやでうまくいく」にスイッチオン!
コメント