準備:カスタムフィールドにアクセス数を保存する
そもそもアクセス数の記録が必要なので、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は消していいです。