GushをカスタマイズしてWordPressブログで表示されている記事と同じカテゴリでページ送りする方法
当ブログ、システムはWordPress、テーマは国産無料テーマのGushを使わせて頂いています。ちょっと思うところがあって現在表示してる記事と同じカテゴリの記事へ前後移動できるようにしてみたくなったので、ローカル環境で試してみました。
複数ブログにするか単一ブログか悩んだけど当面はブログ1つで
前々から当ブログ、記事のジャンルがいろいろあり過ぎて収拾のつかない状態になっています。何分、興味のあることを片っ端から試してその研究結果?を報告するためのブログですから、そりゃもう管理人であるところのSiSOの人格を反映して多彩です。
そんなこともあって、以前から、サイドバーの新着記事や人気記事、そしてタグクラウドを表示している記事に合わせて同じカテゴリの物を表示するようにしています。
あまり多彩な情報を1つのブログに書かない方がいいという見方もあって、試しに100均グッズ関係の記事は別ブログにしてみたものの、管理が意外とめんどくさいです。
ということで、いろいろと迷いはあるものの当面は1つのブログで行くことにしました。
そこで、多彩ブログ向けカテゴリ機能の強化第4弾として、「ページ送りによる表示記事と同一カテゴリ記事への移動」を実装することにしました。これなら、キャンプのネタを楽しんでいる方が、「この記事のちょっと前の記事は何かな?」とワクワクしながらページ送りをしてみたらミニ四駆ネタだった、ということを避けることができます。
これにより、
実はチャランポランなんだけど
たまたまアクセスした記事からは
何気に一貫性を感じさせるブログ
になるかな?と…。
ブログの全貌が見えにくくなるという面もありますが、きっとSiSOに興味を持ってくれた方はトップページも見てくれるでしょう!と期待して、それよりはより見やすくて、来て下さった方の趣味になるべく合わせられるブログを目指したいと思います。
意外と需要が少ないのか情報少なめ、SiSO涙目
いろいろと探してみたものの、なかなかこれだという情報に当たらず。探すキーワードも難しいです…と思っていたら、ようやく参考になる情報を見つけました。
WordPress 同一カテゴリ内でページ送りをしたい場合 – 横浜のホームページ制作 croitre
内容的には、そもそもページ送りに使われているWordPressの関数「previous_post_link()」と「next_post_link()」にはカテゴリを意識して動作することができ、パラメータとしてそれを有効にするために「TRUE」」を指定するだけでできるとのことです。
うーむ、これならばっちり!と思って現在使用中のWordPressテーマ「Gush」のソースコードを確認していくと、そもそも、「Gush」のソースコード中に「previous_post_link()」がありません。
get_previous_post、get_next_postにも同一カテゴリ機能があった!
ということであきらめムードで沈み込むこと1時間。考えてみれば、単一記事の表示時に使われる機能なので、「single.php」の中にページ送りのためのソースコードがあるはずです。ということで調べてみると、それらしき場所がありました。
<?php
$prev_post = get_previous_post();
if (!empty( $prev_post )): ?>
<dt>PREV:</dt>
<dd><a href="<?php echo get_permalink( $prev_post->ID ); ?>"><?php echo $prev_post->post_title; ?></a></dd>
<?php endif; ?>
<?php
$next_post = get_next_post();
if (!empty( $next_post )): ?>
<dt>NEXT:</dt>
<dd><a href="<?php echo get_permalink( $next_post->ID ); ?>"><?php echo $next_post->post_title; ?></a></dd>
<?php endif; ?>
ネット検索して見つかった「previous_post_link()」をWordPress Codex日本語版で調べてみると、以下のような引数になっています。
<?php previous_post_link( $format, $link, $in_same_term, $excluded_terms, $taxonomy ); ?>
Gush及びGush2で使われているページ送りリンクを作る部分に使われている関数はこんな引数になっています。
あれ?記事を書いていて気が付いたのですが、「previous_post_link」の方は「テンプレートタグ」、「get_previous_post」の方は「関数リファレンス」となっています。何か違うんでしょうかね?まだまだ勉強が必要です。
<?php get_previous_post( $in_same_term, $excluded_terms, $taxonomy ) ?>
どちらも「$in_same_term」という引数があり、内容も同じようです。そんなわけで関数としての機能は同じと考えていいでしょう。
そんなわけで試しに以下のようなコードに書き換えてみました(引数に「true」を足しただけです)。
<?php
$prev_post = get_previous_post(true);
if (!empty( $prev_post )): ?>
<dt>PREV:</dt>
<dd><a href="<?php echo get_permalink( $prev_post->ID ); ?>"><?php echo $prev_post->post_title; ?></a></dd>
<?php endif; ?>
<?php
$next_post = get_next_post(true);
if (!empty( $next_post )): ?>
<dt>NEXT:</dt>
<dd><a href="<?php echo get_permalink( $next_post->ID ); ?>"><?php echo $next_post->post_title; ?></a></dd>
<?php endif; ?>
お!ばっちりうまくできました。いや~、簡単簡単。
カテゴリを記事に複数つけている場合は要注意かも
WordPressローカルテスト環境でパシパシっといじっていたら、おもしろいことに気が付きました
カテゴリを適当に決めて複数つけてしまっていたりすると、ページ送りしているうちにちょっと思わぬ方向に行ってしまいます。カテゴリーIDの小さい方が優先されているようです。
例えばシンプルにカテゴリを一階層で使っているとして、「料理(ID=1)」と「キャンプ(ID=2)」という2つのカテゴリがあったとします。「料理」に関心があって、記事01から読み始めたとします。
記事02:料理(ID=1)、キャンプ(ID=2)
記事03:キャンプ(ID=2)
記事04:料理(ID=1)
記事05:料理(ID=1)
と記事が並んでいる場合、進んだ場合、表示される記事は、「記事01→記事02→記事04→記事05」となり、ずっと料理関係の記事ばかり表示されます。
ところが、以下のように並んでいると、「キャンプ」に関心があって記事をめくり始めたのに、違うカテゴリに移動してしまうのです。
記事12:料理(ID=1)、キャンプ(ID=2)
記事13:料理(ID=1)
記事14:キャンプ(ID=1)
記事15:料理(ID=1)
と記事が並んでいる場合、進んだ場合、表示される記事は、「記事11→記事12→記事13→記事15」となります。どうやら、Category IDの値(数値)が小さい方が選択されるようです。さらに、それは親カテゴリ、子カテゴリというのは関係なさそう。
SiSO-LABの記事の場合、原則、1つの記事に対して親カテゴリは複数設定せず、かつ、子カテゴリを設定する時は親カテゴリも合わせて設定しています。そんなわけでとんでもないところに行ってしまうことは無いかと思いますが、これからカテゴリの整理をしようと思います。
また、親カテゴリIDは、子カテゴリIDより小さな数値になるようにしておいた方がよさそうです。Category IDの数値を自由に再設定できるプラグインとかないのかな?とりあえず、名前を変更しながら「Batch Cat」を使って整理してみようと思います。
オマケ。カテゴリを意識した人気記事表示や新着記事表示カスタマイズネタのまとめ
今までのカテゴリを意識したWordPressのカスタマイズ記事です。
- カテゴリ別に人気時期を表示
- カテゴリ別にタグクラウドを表示
今日の一言二言三言
カテゴリー ID数値を 再設定
プラグインとか 無いものかな?
ということで、このWordPressカスタマイズを行う前に、まずはカテゴリIDを整理しなおさないといけないことがわかりました。簡単にCategory IDの値だけ入れ替えるツールとかって無いんでしょうか?Batch Catのおかげでそんなに大変ではないのですが、過去に削除したカテゴリIDとか抜け番になっていてちょっともったいない?感じです。
Your Message