過去1ヵ月、過去1年の人気記事を表示する!WordPressで期間指定表示

人気記事をランキング表示していたのですが、古いものがずーっと残ってしまうので、過去1ヵ月とか過去1年とか期間を限定して表示することにしました。

準備:カスタムフィールドにアクセス数を保存する

そもそもアクセス数の記録が必要なので、functions.phpにアクセス数を記録する関数を定義しましょう。
アクセス数関係なく単純に期間指定したい人は飛ばしてください。
function set_post_views( $postID ) {
    $count_key = 'post_views_count';
    $count     = get_post_meta( $postID, $count_key, true );
    if ( $count == '' ) {
        $count = 0;
        delete_post_meta( $postID, $count_key );
        add_post_meta( $postID, $count_key, '0' );
    } else {
        $count ++;
        update_post_meta( $postID, $count_key, $count );
    }
}
IDを渡すと、カスタムフィールド「post_views_count」のカウントをアップする単純な関数です。 これをcontent.phpなどで呼び出して、記事を読み込む度にカウントアップしていきます。 呼び出すときは
set_post_views( get_the_ID() );
でOKです。

期間を指定してget_posts

get_postsする際に、date_queryを指定しましょう。
$args = array(
    'post_type'     => 'post',  //投稿タイプ
    'exclude'       => get_the_ID(),      //現在を除外
    'numberposts'   => 5,                 //表示数、例:5記事
    'meta_key'      => 'post_views_count', //アクセス数を記録しているカスタムフィールド名
    'orderby'       => 'meta_value_num',
    'order'         => 'DESC',
    'date_query'    => array(array('after'  => '1 month ago')) //例:1ヵ月
);
$topic = get_posts( $args );
例では1ヵ月なので「1 month ago」としています。1年なら1 year agoですね。
ネットの記事だと、期間指定を
date('Y-m-d 0:0:0', strtotime('-1 month'))
みたいにゴチャゴチャ書いてある物が多かったんですが、実はこんな風にすっきり済ませられるんですね。
なお、アクセス数は無視したければ、meta_key、orderbyは消していいです。