お知らせ

PHPによるWordPressカスタマイズブック2009年9月8日

PHPによるWordPressカスタマイズブック」が発売されました。
WordPressのテンプレートにPHPのプログラムを書いてカスタマイズする方法や、WordPressのデータベースにPHPでアクセスする方法、またWordPressのプラグインの開発方法など、WordPressをより深く活用したい方に最適な一冊です。

他にも多数書籍を執筆しています。
こちらもぜひご覧ください。

最近のコメント/トラックバックをエントリーとともに表示するプラグイン

| コメント(14) | トラックバック(13)

2005年6月23日 改良版を公開しましたので、そちらのエントリーも合わせてお読みください

みよたんさんのBlog「Magic White」のこちらのエントリーに、以下のような話が出ていました。

「MTEntriesタグの『recently_commented_on』で最近のコメントを表示すると、意図しない古いコメントが表示されてしまうことがある。」

確かに、言われてみればその通りです。

その解決法として、MTCollateプラグインを使う方法が紹介されていました。ただ、それだとタグが複雑になります。
そこで、最近のコメント/トラックバックを、エントリーとともに表示するプラグインを作ってみました。

プラグインのダウンロードとインストール

こちらをクリックしてプラグインのページを開き、その内容をすべてコピーして、メモ帳等に貼り付けてください。
そして、そのファイルに「Recents.pl」という名前をつけて保存し、Movable Typeの「plugins」ディレクトリにアップロードしてください。

追加されるテンプレートタグ

このプラグインをインストールすると、以下のテンプレートタグが追加されます。

・MTCommentsRecent/MTPingsRecent
最近のコメント/トラックバックを、エントリーとともに出力するコンテナタグです。以下のアトリビュートを指定することができます。

lastn="○" 最近の○件のコメント/トラックバックを出力します。
entry_sort_order ="desend|ascend" 出力されるエントリーを並べ替える順序を指定します。
descendを指定すると、出力対象のエントリーのうち、最近コメントがついたエントリーから順に表示します。
一方、ascendを指定すると、出力対象のエントリーのうち、最近コメントがついたエントリーが後になるように表示します。
省略すると、descendを指定したものとします。
comment_sort_order ="descend|ascend" 各エントリーに対するコメントを並べ替える順序を指定します。
指定しない場合は、Movable Typeの設定画面の「コメントを並べる順番」に従います。
ping_sort_order ="descend|ascend" 各エントリーに対するトラックバックを並べ替える順序を指定します。
指定しない場合は、最近のトラックバックから順に表示します。

・MTCommentsRecentIfEntry/MTPingsRecentIfEntry
次に出力するものがエントリーかどうかを判断する条件タグです。
エントリーである場合は、MTEntry○○タグでエントリーの情報を出力します。

・MTCommentsRecentIfComment
次に出力するものがコメントかどうかを判断する条件タグです。
コメントである場合は、MTComment○○タグでコメントの情報を出力します。

・MTPingsRecentIfPing
次に出力するものがトラックバックかどうかを判断する条件タグです。
トラックバックである場合は、MTPing○○タグでトラックバックの情報を出力します。

・MTCommentsRecentEntryHeader/MTPingsRecentEntryHeader
一連のエントリーの中で、最初のエントリーかどうかを判断する条件タグです。

・MTCommentsRecentEntryFooter/MTPingsRecentEntryFooter
一連のエントリーの中で、最後のエントリーかどうかを判断する条件タグです。

・MTCommentsRecentHeader/MTPingsRecentHeader
各エントリーに対するコメント/トラックバックの中で、最初のものかどうかを判断する条件タグです。

・MTCommentsRecentFooter/MTPingsRecentFooter
各エントリーに対するコメント/トラックバックの中で、最後のものかどうかを判断する条件タグです。

使用例

・例1
最近の10件のコメントをエントリーとともに箇条書きにし、エントリーは最近コメントがついたものから順にして、個々のエントリーへのコメントは古いものから順に表示する。

<ul>
<MTCommentsRecent lastn="10" comment_sort_order="ascend">
<MTCommentsRecentIfEntry><li><a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a>(<$MTEntryDate$>)</MTCommentsRecentIfEntry>
<MTCommentsRecentIfComment>
<MTCommentsRecentHeader><ul></MTCommentsRecentHeader>
<li><$MTCommentAuthorLink$>(<$MTCommentDate$>)
<MTCommentsRecentFooter></ul></li></MTCommentsRecentFooter>
</MTCommentsRecentIfComment>
</MTCommentsRecent>
</ul>

・例2
最近の10件のトラックバックをエントリーとともに箇条書きにし、エントリーは最近コメントがついたものから順にして、個々のエントリーへのトラックバックは古いものから順に表示する。

<ul>
<MTPingsRecent lastn="10" ping_sort_order="ascend">
<MTPingsRecentIfEntry><li><a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a>(<$MTEntryDate$>)</MTPingsRecentIfEntry>
<MTPingsRecentIfPing>
<MTPingsRecentHeader><ul></MTPingsRecentHeader>
<li><a href="<$MTPingURL$>"><$MTPingTitle$></a>(<$MTPingDate$>)
<MTPingsRecentFooter></ul></li></MTPingsRecentFooter>
</MTPingsRecentIfPing>
</MTPingsRecent>
</ul>

トラックバック(13)

トラックバックURL: http://www.h-fj.com/mt/mt-tb.cgi/98.

以前の記事で「最近のコメントを表示する方法」、「最近のトラックバックを一覧表示する方法」 を書いたのですが、もっと便利なプラグインがありました! 「トラックバッ... 続きを読む

こちら のエントリで MTCollate を使って、真の「最近の」コメントだけを... 続きを読む

最近のコメントの一覧表示、以前書いた方法ではちょっと物足りなかったのですよね。 ... 続きを読む

今までトラックバックが来たら,誰から来たのだけを表示していたのですが, 最近のエ... 続きを読む

サイドバーにある「最近のトラックバック(Recent Trackbacks)」の... 続きを読む

以前の記事で「最近のコメントを表示する方法」、「最近のトラックバックを一覧表示する方法」 を書いたのですが、もっと便利なプラグインがありました! 「トラックバッ... 続きを読む

小粋空間: 「最近のトラックバック」をエントリ別にまとめて表示するを参考に、最近... 続きを読む

MTカスタマイズの3回目。今回はサイドバー周りの話です。 続きを読む

ブログの革命的なことのひとつはトラックバック機能だと思います。 ブログ以前は考え... 続きを読む

実践ウェブデザイン!ブログでCMSを構築する - カテゴリーアーカイブに最新トラックバックを記載する (2005年8月20日 02:22)

カテゴリーアーカイブに最新のトラックバックを挿入する方法を紹介。 続きを読む

最近のコメントを投稿されたエントリーと共に表示するには<MTEntries... 続きを読む

どうしても無料テンプレートから、カスタムしたくて格闘したけど、時間だけ過ぎて今日... 続きを読む

各アーカイブページの、 サイドバーのコメント・トラックバックが最近の記事と同様、... 続きを読む

コメント(スレッド14件,コメント14件)

コメントはスレッド表示になっています。
また、スレッドの先頭のコメントに対する返信には、先頭に矢印を表示しています。

No.1 さえら : (無題)

こんばんはー。
プラグイン 使わせていただこうとあれこれ試みたのですが
どうもうまくツリーになりません。
ulとliの位置が悪いんだろうと思うのですが。。。

No.2  : (無題)

こんばんは。

小粋空間さんのリストと同じ動作になるようにするには、以下のようにすれば良いと思います。

<div class="sidetitle">
Recent Comments
</div>
<div class="side">
<MTCommentsRecent lastn="10">
<MTCommentsRecentIfEntry>
<a href="<$MTEntryPermalink$>" title="<$MTEntryTitle encode_html="1"$>"><$MTEntryTitle$></a>
</MTCommentsRecentIfEntry>
<MTCommentsRecentIfComment>
<MTCommentsRecentHeader><ul></MTCommentsRecentHeader>
<li><a href="<$MTEntryPermalink$>#<$MTCommentID$>">
<$MTCommentAuthor$></a> <$MTCommentDate format="%m/%d"></li>
<MTCommentsRecentFooter></ul></MTCommentsRecentFooter>
</MTCommentsRecentIfComment>
</MTCommentsRecent>
</div>

No.3 さえら : (無題)

こんにちはー。ずいぶん遅くなりましたが
やっと、思い通りの表示にできました。
ありがとうございました。

No.4 さえら : (無題)

Ping 'http://www.h-fj.com/mt_cgi/mt/mt-tb.cgi/37' failed: トラックバック ID 37 は有効ではありません
とのエラーになって、トラックバックができません。どうしてでしょう?涙

No.5  : (無題)

>さえらさん
こんにちは。プラグインのご利用ありがとうございます。
トラックバック一覧も「最新」の表示になって良かったです。

ところで、このエントリーのトラックバックURLは「http://www.h-fj.com/mt_cgi/mt/mt-tb.cgi/371」です。
最後の「1」が抜けています。

No.6 さえら : (無題)

あらら・・・なんたる単純ミス!失礼しました。
トラックバックさせていただきました。
お世話になりました。

No.7 zord : (無題)

こんにちは。非常に便利と思い、使わせて頂こうと思ったのですが、ダイナミック・パブリッシングのページでは使えないでしょうか? 以下のエラーになってしまうようです。

The requested page could not be found.

Smarty error: [in mt:36 line 254]: syntax error: unrecognized tag 'MTCommentsRecent' (Smarty_Compiler.class.php, line 556)

変な質問でしたらすいません。

No.8  : (無題)

>zordさん
こんにちは。

ダイナミック・パブリッシングでは、従来のPerlのプラグインのうち、テンプレートタグを拡張するものは、使うことができません。

ダイナミック・パブリッシング用に、PHPでプラグインを作り直すことが必要になります。

No.9 zord : (無題)

壱さん

そうでしたか。ありがとうございました。

No.10 fuul : (無題)

プラグイン使わせていただきました。
本当にありがとうございました。
これからもどうぞよろしくおねがいします。
m(_ _)m

No.11 銀次 : (無題)

こんにちは、ご無沙汰しています。

Recentsが直接関係があるのか分からないのですが、最近になって急に、カテゴリーアーカイブを再構築するとエラーがでるようになってしまいました。
エラーメッセージは、「Can't call method "id" on an undefined value at /xxx/xxx/xxx/xxx/plugins/Recents.pl line 234.」というものです。
特に最近MTのバージョンを上げたとかカスタマイズしたわけではありません。
気になる点は、英語のスパムコメントを何件か削除したタイミングでおかしくなったような気がします。

Recents バージョン 1.01
Movable Type バージョン 3.2-ja-2

自分でも調べてみたのですが、何かアドバイス頂けたら幸いです。

No.12  : (無題)

>銀次さん
こんにちは。

「line 234」とありますが、おそらく134行目ではないかと思います。
134行目は以下のようになっています。

next if ($category && $entry->category && !$force && $category->id != $entry->category->id);

これを以下のように変えてみてください。

next if ($category && !$force && !$entry->is_in_category($category));

No.13 銀次 : (無題)

ありがとうございます!!

エラーメッセージをそのままコピペしたので、234行目は間違いないと思います…。
ちなみに、
next if ($category && $entry->category && !$force && $category->id != $entry->category->id);
は134行目に見当たらず、234行目に似たような、
next if ($category && !$force && $category->id != $entry->category->id);
というのがあったので、234行目をアドバイス通りに変えてみたところ、うまく再構築できました!

お手数お掛けして申し訳ありませんでした。
本当にありがとうございました!

ちなみに何でエラーになったんでしょうね?

No.14 銀次 : (無題)

あ、そうそう!
もう大分前のことになってしまいますが、壱さんの本「上級カスタマイズ術」買わせてもらいましたよ!
重宝させてもらってます♪

コメントする