WordPressで掲示板的なコーナーをつくっていて、記事の投稿日やコメント数でソートすることはできたのですが、「最新のコメントが新しい順に表示」というソートができませんでした。
某巨大掲示板でいうと
記事=スレ
コメント=レス
ということをやりたかったのです。
SQL文を書けば汎用的に使えるものができるのかもしれませんが、僕には荷が重いので「最新のコメント投稿日時」をカスタムフィールドに持たせることにしました。
それが以下の文になります。functions.phpに記述します。
1 2 3 4 5 6 |
function add_post_data($comment){ $postid = get_the_ID(); update_post_meta($postid, 'last_comment_post', date_i18n( 'Y/m/d H:i:s' )); } add_filter( 'pre_comment_content', 'add_post_data' ); |
出力する際は以下のようにquery_postsにmeta_keyを加えます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$arg = array( 'post_type' => 'board', 'numberposts' => 10, 'meta_key' => 'last_comment_post', 'orderby' => 'meta_value' ); $myposts = get_posts($arg); foreach( $myposts as $post ) : setup_postdata($post); 以下略 |
ただ、このままだと新しいスレ(レスが0のスレ)が「last_comment_post」というカスタムフィールドが存在しないため、対象となりません。
wp_insert_postでスレを立てる場合はその直後にupdate_post_metaでlast_comment_postというカスタムフィールドを生成する必要があります。
もしくはダッシュボードからスレを立てる場合(普通の投稿と同じ)は、content_save_pre、title_save_pre などの記事投稿時に実行されるフィルターフックでupdate_post_metaを実行します。
記事やコメントが投稿されたタイミングで更新日を取得するので、過去のコメントには適用されません。汎用性はあまりないかもしれませんので、いい手があればコメントなどいただけると嬉しいです。
ADs
コメントはまだありません。