WordPressプラグイン関連で、人気記事のランキングを表示させるウィジェットを書き込んでいた時の備忘録です。
WordPressでよく使われるサブループの方法として、WP_Queryとget_posts()がありますね。
僕が今回やりたかったのは「アクセス数の多い順に記事をランキング形式で表示する」ことですので、get_posts()でやりました。
get_posts()は、パラメータを渡してあげると記事の検索条件を絞れます。
具体的にはこんな感じ。
<?php $args = array(
'posts_per_page' => 5,
'offset' => 0,
'category' => '',
'category_name' => '',
'orderby' => 'date',
'order' => 'DESC',
'include' => '',
'exclude' => '',
'meta_key' => '',
'meta_value' => '',
'post_type' => 'post',
'post_mime_type' => '',
'post_parent' => '',
'author' => '',
'post_status' => 'publish',
'suppress_filters' => true
);
$posts_array = get_posts( $args ); ?>
表示の順番を指定してあげるパラメータが‘orderby’なので、こいつに投稿IDの羅列を認識させてあげれば良さそうです。
codexを眺めていると、‘orderby’ => ‘post__in’を指定すれば思ったとおりの動作ができそう。
‘post__in’は‘include’を参照するので、‘include’に投稿IDの羅列を指定します。
MEMO
‘include’自体に指定する投稿IDはカンマ区切りでも配列でも大丈夫ですが、配列にすると‘orderby’ => ‘post__in’がうまく動きませんでした。
<?php $args = array(
'post_type' => 'post',
'include' => '1,3,2,5,4',
'orderby' => 'post__in',
'order' => 'DESC'
);
$posts_array = get_posts( $args ); ?>
さて、これで投稿ID1~5の投稿データ(実際にはそんな連続したのは無いけれど)が1,3,2,5,4の順で$post_arrayに格納されました。
あとは普通にforeachで回せばOKですね。
もちろん上記のコードそのままでは実用性のカケラもないので、適宜変更して遊んでみましょう!