表示中の記事と同一カテゴリの記事をサイドブロックにリスト表示

WordPressって、カテゴリ表示を選んだ時に、記事をリストで表示するのってデフォルトじゃできないんですね。
最近ようやく気づきました(遅!)

自分で過去記事見返してて、なんか見にくいなーと思ってて、ハッと気がついた……

で、ここ二日ほど、現在表示中の記事or表示中のカテゴリの記事リストを、サイドブロックに表示できないかなー、とあれこれ調べてたんですね。

しかし難しい。


ググる中で、カテゴリを選ぶとタイトルリストにという記事を見つけました。
この記事は、カテゴリを選んだ時に、リストが表示されるようにするには…というやり方なんですが、まあどこに表示するにせよ、テンプレートの機能を使ってリスト表示するということなので、このやり方が基本なんだろうと思います。

なんだけど、問題がある。

テンプレートファイルをいじってリストを表示させようとすると、1ページあたりに表示されるリスト数が、Wordpressの表示設定の1ページあたりの記事表示数と同じ数になっちゃうんです。

たとえば、10ずつ記事表示する設定になってたら、リストにも10しか表示されない……。

これを回避するために、プラグインCustom Post per Pageという、テンプレートによって表示される投稿数を変更するプラグインを入れろ、と、上記のサイトなどには書いてあるんですが。
しかし、このCustom Post per Pageのリンク先、なんつーかエラーになってるんですよ。
お手上げです。


それで他の方法を探して、あれこれ試行錯誤…
途中、各投稿の末尾に同一カテゴリの最新記事いくつかを入れるプラグインを入れてみたり。Other Posts from Catというので、日本語での説明はここが分かりやすいです。


しかし、本来やりたいことは、カテゴリを選んだ時に、そのカテゴリに属する記事のリストを表示する…ということ。


なおも探す。
探してるうちに、どっからどう検索してたどりついたかもうワケ分からなくなっちゃったんですが、カテゴリーの記事リストと題する記事を発見。

上記サイトの記事で紹介されている二つめのプラグイン、WP Categories and Posts

カテゴリーと記事のリストを表示するプラグイン、テンプレートに指定のタグを記述する(プラグインにサンプルファイルが同梱されています)。テンプレートタグのwp_list_categoriesとほぼ同じパラメータが使えるようです。


ふむ。
これは記事数はWordPressの表示設定に左右されずに独自に数を指定できるようだから、使えそうな感じ??

しかし、表示するリストは、カテゴリー全部か、IDで指定したもの……

あくまで、コード内で特定のカテゴリを指定するんじゃなくて、そのときに表示している記事のカテゴリと同じカテゴリのリストを表示したいんだよね。

うーむ。



…一方で、とろテクというサイト内の、wordpressでカテゴリ内の記事タイトル一覧を表示する (wordpress 2.8 以降対応)という記事も見つけた。

wordpress 2.8以降のページ内・サイドバーなどで、現在表示している記事と同じカテゴリの記事名とリンクの一覧を表示するコードです。


うんうん、それそれ。やりたいことは。


さっそく、導入を試みる。

サイドバーに表示するには別のプラグインを利用しろ、とかあるけど、このサイトはXPressME。
つまりXoops内にWordPressが導入してあって、XPressMEには、非常に親切なことに、Xoopsのブロックとして「拡張ブロック」ってなものが用意してあってですね、カスタムブロックを自由に作成できるようになってるんですよ。

さっそく上記のサイトの記事内のコードをテキストエディタにコピペして、「my_***_block.html」と名前を付けて、XPressMEのテーマ「xpress_default」フォルダ内にある「blocks」フォルダ内に保存。
Xoopsの管理画面で、「拡張ブロック」を表示設定。

ヤタ!
表示中の記事と同じカテゴリの記事リストを右サイドブロックへ表示成功!!!

……でもやっぱり、WordPressの表示設定で指定してる、1ページ内の記事表示数の分しかリストが表示されません(号泣)


うえーん。

泣き泣き、ふと考えた。
要するに、現在表示している記事のカテゴリを取得して、同じカテゴリの記事リストを表示する方法があるってことだよね?
だとしたら、「WP Categories and Posts」では、テンプレート内に指定のタグを



<?php if (function_exists("ronalfy_list_categories_and_posts")) { ronalfy_list_categories_and_posts('orderby=ID&include=1,2'); }?>




という風に記述してリストを表示させるんだけど(include=1,2ならカテゴリID1と2のリストを、exclude=1,2ならカテゴリID1,2を除外したリストを表示する)、この「include=」の指定に、現在表示中の記事カテゴリを指定できないのかな??


「とろテク」内の記事のコードを見ると、どうやら

$cats = get_the_category();
$cate = $cats[0];
$cat = $cate->cat_ID;


という部分で、表示中の記事のカテゴリを取得しているらしい。
「get_the_category();」っていうのがポイントみたいだ。
これって多分、WordPressのテンプレートタグとかいうヤツで、データベースからカテゴリーのデータを引っ張ってくるためのものっぽい。

ググってみたらやはりそうだった。WordPressの日本語サイト内に、ちゃんとget_the_categoryの説明があった

そこの記述からすると、変数 『cat_ID』というのが、 記事のカテゴリーIDを引っ張ってくるためのものらしい。

そのページのコード記述例を参考に、WP Categories and Postsのタグに無理矢理くっつけてみた。



<?php
$cat = get_the_category(); $cat = $cat[0]; {
if (function_exists("ronalfy_list_categories_and_posts")) { ronalfy_list_categories_and_posts('orderby=ID&include=' . $cat->cat_ID . ''); }
}
?>




これを、ブロックテンプレートとして保存して、XPressMEのテーマ「xpress_default」フォルダ内にある「blocks」フォルダ内に保存。
Xoopsの管理画面で、「拡張ブロック」を右サイドに表示設定。

……なんか当てずっぽうでやったわりに、どうやら、現在のカテゴリの記事表示にちゃんとなっているようです(嬉)
ブログのトップページだとか、「all」(すべてのカテゴリ)指定にした時のリスト表示がなんかちょっと変だけど……。どーしてそういう動きになるのか、私にはサッパリ分からないけど……


ともかく、どーゆー理屈か分かりませんが、当初の目的は基本的には達成できたので、今日はこれで良しとしよう。
phpなんぞ全然分からないのに、ここまで出来たことで自画自賛したい気分でござります。


……何をめちゃくちゃなコトやってるんだ、などのツッコミは大歓迎ですが、できれば優しくアドバイスしていただけたりしたら嬉しいです。

トラックバック・ピンバック 1 件

ご自分のサイトからトラックバックを送ることができます。

  1. 2010 年 1 月 18 日 サイト [WP] トップページを設ける際に役立つ情報 の [WP] トップページを設ける際に役立つ情報 より

コメント 2 件

中村 より:

とろテクの中村です。
こちらの記事を拝見してサンプルコードの不具合を修正いたしました。
この手の機能は結構需要があると思うのですが、なかなかWordpress本体で実装されませんね。

fujimi より:

>中村様

対応ありがとうございます!
さっそく使わせていただきますね。

この手の機能、まさかないとは思っていなくて今まで気がつきませんでした。
本体で実装されても良さそうな機能ですよね。

コメントをどうぞ