Favorites for WordPressでお気に入り一覧を新着順に表示する方法

Favorites」は、クッキーとAJAXを利用してお気に入り登録ができるWordpress用プラグインです。
wordpressへのユーザー登録を必要としないので、簡単にお気に入り機能を実装できます。

ただ、デフォルトで利用すると、表示順が記事の投稿順になってしまいます。
そこで、少しだけコードを追加することで、お気に入りした順番に表示するようにしてみます。

まずはお気に入りを出力するコード

$favorites = get_user_favorites();
if ($favorites) :
  $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; // If you want to include pagination
  $favorites_query = new WP_Query(array(
  'post_type' => 'post', // If you have multiple post types, pass an array
  'posts_per_page' => -1,
  'ignore_sticky_posts' => true,
  'post__in' => $favorites,
  if ($favorites_query->have_posts()) : 
    while ($favorites_query->have_posts()) : $favorites_query->the_post();
      echo $post->post_title;
    endwhile;
  else :
    echo 'お気に入りはありません';
  endif;
));

上記のコードに以下の2行目と9行目を追加します。

$favorites = get_user_favorites();
krsort($favorites);
if ($favorites) :
  $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; // If you want to include pagination
  $favorites_query = new WP_Query(array(
    'post_type' => 'post', // If you have multiple post types, pass an array
    'posts_per_page' => -1,
    'ignore_sticky_posts' => true,
    'post__in' => $favorites,
    'orderby' => 'post__in'
  ));
  if ($favorites_query->have_posts()) : 
    while ($favorites_query->have_posts()) : $favorites_query->the_post();
      echo $post->post_title;
    endwhile;
  else :
    echo 'お気に入りはありません';
  endif;
));

具体的に説明します。

まずは2行目のkrsort($favorites); の部分は、取得したお気に入りデータを並び替えています。
$favoritesは配列で、お気に入りした順番(昇順)でデータが格納されています。
そこで、それを降順(つまりお気に入りした日時の新しい順)に並び替えます。

その配列をWP_Query()に渡すわけですが、WP_Query()は実行後に記事を投稿日時の新しい順に勝手に並び替えてしまいます。
そこで9行目の‘orderby’ => ‘post__in’ を指定します。
この「post__in」の意味は、「その上の行で指定している$favorites配列の順番でデータを取得してくれ」というお願いです。

こうすることで、最新のお気に入りから順番に表示してくれるようになるはずです。