人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

こんにちは、また宜しくお願いいたします。
Commented entry list 2.0をWordpressで利用しているのですが、コメントを入れてもらうと親タイトルの下に時間(日)と投稿者の名前がつきますが、このコメントに対してレスを入れると次の投稿者は先の人の上に記載されます。このプラグインを開いてみてDESCからASCに変更してみたら昇順にはなり2番目の投稿者は最初の投稿者の下に記載されるようになるのですが、親タイトルまでが昇順になり一番したに落ちてしまいます。

そこでご教授お願いしたいのは、投稿者の記載が常に先の人の下にまわり、なおかつ親タイトルは一番新しいコメントがついているものが一番上にくるようにしたいと考えております。
私の力では自己解決不能のためご教授お願いしたく、投稿いたしました。

Commented entry list 2.0 のソースは下のアドレスにUPしてあります。
http://www.luckymails.net/list.txt

以上宜しくお願い申しあげます。 こんにちは、また宜し..

●質問者: dejavu888i
●カテゴリ:ウェブ制作
✍キーワード:2.0 ASC wordpress こんにちは アドレス
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● a-kuma3
●600ポイント

get_recently_commented() の以下のくだりを、

 foreach ($comments as $comment) {
 $posts[$comment->ID]++;
 }

というふうに変更したら、期待通りになりません?

 // $ports をコメントID 毎のコメント数ではなく、コメントの最新の日付を持つ連想配列にする
 foreach ($comments as $comment) {
 if (array_key_exists($comment->ID, $posts)) {
 if (strcmp($comment->comment_date, $posts[$comment->ID])) {
 $posts[$comment->ID] = $comment->comment_date;
 }
 } else {
 $posts[$comment->ID] = $comment->comment_date;
 }
 }

 // ports を comment_date の逆順で並べ替え
 arsort($posts);

ぼくは、あまり php が得意じゃないんで、初歩的なミスがあるかもしれませんが m(_ _)m


2 ● a-kuma3
●600ポイント ベストアンサー

コメントでのやりとりも含めて、get_recently_commented() のコードを整理しました。

<?php
 ...

function get_recently_commented($limit = 10) {
 global $wpdb;
 $tablecomments = $wpdb->comments;
 $tableposts = $wpdb->posts;

//★ここから
//* $comments = $wpdb->get_results("SELECT ID, post_title, post_date, comment_ID, comment_author, comment_author_url, comment_author_email, comment_date FROM $tableposts, $tablecomments WHERE $tableposts.ID=$tablecomments.comment_post_ID AND $tablecomments.comment_approved='1' AND $tablecomments.comment_type='' ORDER BY $tablecomments.comment_date ASC LIMIT $limit");

 // SQL の LIMIT の範囲を、最後の $limit 件にする
 $n_comments = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM $tablecomments WHERE $tablecomments.comment_approved='1' AND $tablecomments.comment_type='' ;"));
 $limit_start = $n_comments - $limit + 1;
 $comments = $wpdb->get_results("SELECT ID, post_title, post_date, comment_ID, comment_author, comment_author_url, comment_author_email, comment_date FROM $tableposts, $tablecomments WHERE $tableposts.ID=$tablecomments.comment_post_ID AND $tablecomments.comment_approved='1' AND $tablecomments.comment_type='' ORDER BY $tablecomments.comment_date ASC LIMIT $limit_start, $n_comments");
//★ここまで

 $output = '';

 if (is_array($comments) && count($comments) == 0) {
 echo "No Responses.";
 } else {

//★ここから
//* foreach ($comments as $comment) {
//* $posts[$comment->ID]++;
//* }
 // $ports をコメントID 毎のコメント数ではなく、コメントの最新の日付を持つ連想配列にする
 foreach ($comments as $comment) {
 if (array_key_exists($comment->ID, $posts)) {
 if (strcmp($comment->comment_date, $posts[$comment->ID])) {
 $posts[$comment->ID] = $comment->comment_date;
 }
 } else {
 $posts[$comment->ID] = $comment->comment_date;
 }
 }

 // ports を comment_date の逆順で並べ替え
 arsort($posts);
//★ここまで

 while (list ($key, $val) = each($posts)) {
 $first_comment = TRUE;
 foreach ($comments as $comment) {
 if ($comment->ID != $key)
 continue;
 if ($first_comment == TRUE) {
 $post_title = stripslashes($comment->post_title);
 $permalink = get_permalink($comment->ID)."#commentlist";
 $output .= "<li>";
 $output .= "<a href=\"$permalink\">$post_title</a>\n";
 $output .= "\t<ul>\n";
 $first_comment = FALSE;
 }
 $comment_date = $comment->comment_date;
 $commentid = get_permalink($comment->ID)."#comment-".$comment->comment_ID;
 if ( mysql2date('Y m d', $comment_date) == gmdate('Y m d', current_time(timestamp)) ) { # Today's comment
 $comment_date = mysql2date('H:i', $comment_date);
 } else {
 $comment_date = mysql2date('m/d', $comment_date);
 }
 $output .= "\t\t<li><span class=\"comment_date\"><a href=\"$commentid\" title=\"\">$comment_date</a> </span>".
 "<span class=\"comment_author\">".tkzy_get_comment_author_link($comment,20)."</span></li>\n";
 }
 $output .= "\t</ul>\n</li>\n";
 }
 echo $output;
 }
}

 ...
?>

質問のリンク先にあった、元のコードは //* でコメントアウトして、残してあります。

$limit は、10 のままです。

SQL の並べ替えは、comment_date の昇順 (ASC) です。


# きちんと動くかな >ドキドキ

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ