- 投稿の並び順を更新時間順にする(つまり投稿を更新したらスレッドは上にあがる)
- コメントがついたら(承認されたら)、投稿の更新時間をコメントの投稿時間で上書きする
で、どうでしょうか?
ただし、コメントを削除した場合に下げるようにはしていません。
コメントの最新日時をカスタムフィールドに持たせる方法などもありますが、複雑化するため、上記の方法で問題なければ、この方法で良いかと思います。
function default_orderby_modified( $wp_query ) {
if ( ! is_admin() && $wp_query->is_main_query( $wp_query ) ) {
if ( ! $wp_query->get( 'orderby' ) ) {
$wp_query->set( 'orderby', 'modified' );
}
}
}
add_action( 'pre_get_posts', 'default_orderby_modified' );
function update_post_modified_by_comment_approved( $comment_id, $comment ) {
$post = get_post( $comment->comment_post_ID );
if ( $comment->comment_approved == 1 && $post && $post->post_modified < $comment->comment_date ) {
wp_update_post( array( 'ID' => $comment->comment_post_ID, 'post_modified' => $comment->comment_date, 'post_modified_gmt' => $comment->comment_date_gmt ) );
}
}
add_action( 'wp_insert_comment', 'update_post_modified_by_comment_approved', 10, 2 );
add_action( 'comment_approved_', 'update_post_modified_by_comment_approved', 10, 2 );
ありがとうございました!うまくいきました!!!とても助かりましたm(_ _)m
jim912様、hey-c様
非常に参考になる情報をご提供いただき
誠にありがとうございます。
上記のコードで更新順に並び替える事ができましたが、
予約投稿をした場合、表示される日時がおかしくなります。
WordPressの予約投稿の場合、
日時の扱いは以下のようになります。
予約投稿を設定(操作)した日時 = 更新日時
予約投稿された日時 = 投稿日時
参考サイト:
予約投稿した時間と、最終更新時間について
今回の、更新順に記事を並べるカスタマイズの場合、
予約投稿を設定した日時が、実際に投稿された日時よりも優先させてしまう為、
予約投稿を設定した日時が記事一覧に表示されてしまいます。
もしよろしければ、教えて頂いたコードに、
以下のような条件も追加していただけますでしょうか?
- 投稿の並び順を更新時間順にする(つまり投稿を更新したらスレッドは上にあがる)
- コメントがついたら(承認されたら)、投稿の更新時間をコメントの投稿時間で上書きする
- (新)予約投稿された場合、予約投稿の設定操作をした時間を、予約投稿された時間で上書きする
少し分かりにくいかもしれませんが、
よろしくお願いいたします。