最近のコメント

tkzyさんのところで公開されているWordPress用の“最近のコメント”スクリプトをありがたく使わせてもらっていたのですが、どうも気になる点が2つありました。一つは、承認前のコメントまで表示されてしまうこと。もう一つはコメントの並びが日時順にならないということです。

というわけで、これらの件を自分の好みに合うように変更してみました。

承認前のコメントまで表示されてしまう件は、I know.開発日誌さんのところで変更したものが公開されています。これは、自分の変更が終わった後に気がつきました。下調べは重要ですね。

もう一つの並びが日付順にならない件を調べてみると、元のソースではデータベースから取得したコメントをエントリーごとに並べ替えるために、PHPのusortという機能を使っています。usortは比較関数を自分で定義してソートアルゴリズムから呼び出してもらうような仕組みになっているのですが、usortのマニュアルを読むと次のように書かれています。

注意: 二つのメンバーの比較結果が等しいとなった場合、ソートされた配列の順番は定義されません。PHP4.0.6まではユーザー定義関数は それらの要素の順番を維持します。しかしPHP4.1.0以降で導入された新しいソートアルゴリズムではそれと同等のことを行う効果的な方法はありません。

このサーバで現在使っているPHPのバージョンが4.3.10なので、並びが変わってしまうのはこれの影響ではないかと思います。そこで並べ替えを行わない方法にしてみました。

「PHPで配列はどうやって扱うの?」など、とても基本的なところから調べながらやったのですが、なんとか動くようになったので公開しておきます。

ソースコード:20050131_recent-comments.phps 20050208_recent-comments.phps

次のようにして使います。

<ul>
  <?php get_recent_comments(); ?>
<ul>

追記(2005/2/8):
globalなsiteurl変数とblogfilename変数に値が設定されていないとPermaLinkがおかしくなっていたので、これらの値をget_settingsで持ってくるようにしました。

コメント / トラックバック 5 件

  1. tkzy より:

    はじめまして。TBありがとうございます。
    てきとーに作ったものなので
    皆さんにいろいろ指摘して頂いて助かります。
    ソートの件は知りませんでした。勉強になりました。

  2. ながぬま より:

    はじめまして、tkzyさん。便利なツールのソースを公開していただいてありがとうございます。
    私にはまだ他の人のソースを変更することしかできないのですが、tkzyさんみたいに役に立つものを作れるように精進したいと思います。

  3. Hirobee's Trail [Memorandum] より:

    Recently Commented part2
    tkzy_get_recent_commentsで表示される順番が、

    エントリがポストされた日付 -> コメントされた日付(同じ日にコメントがあった場合、コメントされた時間が遅くてもポストされた日付が新…

  4. Hirobee's Trail [Memorandum] より:

    Recently Commented 完結編
    Recently Commented part2で、並び順を替えるために参考にしたと書いたりょ! >> 最近のコメントにある20050208_recent-comments.phpは、よく読んでみるとtkzy_get_recent_commentsを元にソースを書き換えられ…

  5. 社内ブログ より:

    コメントの一覧を表示する件
    どうやるんだかさっぱりわからなかったのですが、以下でソースが紹介されていました(サンクス)
    りょ! ? 最近のコメント

    ここのソースをmy-hacks.phpというファイルに貼り付ければOK。m…

コメントをどうぞ