wordpress

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配列の順番でデータを取得してくれ」というお願いです。

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

Favorites for WordPressでお気に入り一覧を新着順に表示する方法” への2件のフィードバック

  1. 古い記事なので気付いてもらえるかわかりませんが、このソースを一体どこに入れればいいのかがわかりませんでした。「まずはお気に入りを出力するコード」というのが、プラグイン内のどこにあるのか教えてください。

  2. お返事が遅くなって申し訳ありません。
    また、わかりにくい内容で申し訳ないです(^^;)
    上記のコードはすべて表示したいテーマファイルに直接入力します。
    なので、HTMLとPHPの知識が必要になります。
    例えばWORDPRESSのすべてのページに表示したい場合は、テーマファイルのindex.php内に記述します。
    「まずはお気に入りを出力するコード」というのは、プラグインのデフォルトのコードですので、そのままindex.php内のお気に入りを表示したい箇所に貼り付ければOKです。
    ちなみに、プラグインの本サイトもありますので、そちらへのリンクを貼っておきます。
    英語ですが、使い方等も載っていますので、ご参考まで。

    Favorites for WORDPRESS

コメントを残す

メールアドレスが公開されることはありません。