wordpressで投稿の一覧表示のソート順を新着コメントがある投稿順にしたい

wordpressで掲示板をつかいたいらしい。もとはXOOPSサイトからの移行である。その当時は、掲示板があったし、プラグインで簡単に掲示板を準備できた。wordpressでもプラグインで掲示板ができるようだ。

でも、もういいかな。移行元もほとんど使われてない。管理者が書き込んでるぐらい2年前くらいが最後の投稿。つかってないんだよ。余計なプラグインいれたくもない。

で、wordpressのカテゴリで掲示板にして、話題を投稿にして、コメントのところで、ツリー形式にして掲示板にした。ここで問題が投稿の順番、コメントの日時が投稿のソートに影響しないので、昔の投稿が埋もれてしまう。これはいまいちとおもった。コメントが入った日時が新しいものを新着とするみたいなソートがほしかった。

あった。偉大な先人に感謝

WP_Queryのソースコードを読んでみると、「posts_orderby」にadd_filterすればいけそう。

function group_forum_posts_orderby($orderby, $query) {
	if (empty($query->query['orderby'])) {
		return $orderby;
	}

	if ($query->query['orderby'] != 'active') {
		return $orderby;
	}

	global $wpdb;

	// Latest comment date
	$sql = [];
	$sql[] = "(";
	$sql[] = "SELECT comment_date";
	$sql[] = "  FROM {$wpdb->comments}";
	$sql[] = " WHERE comment_post_ID = {$wpdb->posts}.ID";
	$sql[] = "   And comment_approved = 1";
	$sql[] = " ORDER By comment_date DESC";
	$sql[] = " LIMIT 1";
	$sql[] = ")";

	return "COALESCE(" . implode("", $sql) . ", {$wpdb->posts}.post_modified) DESC";
}
add_filter('posts_orderby', 'group_forum_posts_orderby', 10, 2);

呼び出すときはこんな感じ。

new WP_Query([
	'orderby' => 'active',  // Custom hooks in hooks.php
])

応用すれば並び替え自由自在。
「active」という名前でなくてもいい。
「order」は無視。
postmetaだけで並び替えるならhookせずにできる。掲示板

【WordPress】投稿一覧をコメントの日付を含めて最新のもので並び替える

晴れ。38.2℃。

2023年8月31日(木曜日)

定点観測。河北町庁舎から晴れ

関連キーワード

関連記事

令和5年8月31日

  • 平成35年8月31日
  • 昭和98年8月31日
  • 旧7月16日
  • 葉月

今日は何の日

  • そばの日
  • 満月

明日のことは明日案じよ

あすのことはあすあんじよ

取り越し苦労はするものではない。今日の苦労だけでたくさんではないか、明日は明日で思案すればよいというたとえ。

引用元

四季風呂暦8月

桃湯:
桃が出まわる季節。桃は果実が食用、葉は薬用に使える植物。約500gの桃の葉をよく洗い湯舟に入れる。これは乳児の湯浴みにも使える他、軽い皮膚疾患の治療にもなる。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です