WordPressのプラグインである「WP ULike」を使えば簡単に実装できてしまいます。
プラグイン導入から基本設定までは今回割愛させていただきます。
下記サイトが分かりやすかったので参考にしてみてください。
サンプルコード
WP ULikeのバージョンは4.5.4です。
「WP ULike」の設定では実装出来ないので、PHPでコードを書く必要があります。
$the_query = new WP_Query(
array(
$post__in = wp_ulike_get_popular_items_ids(array(
'type' => 'post',
'rel_type' => 'news',
'status' => 'like',
'period' => 'all',
)),
'posts_per_page' => 10, // 10件表示
'post__in' => $post__in,
'post_type' => 'news', // カスタム投稿名(例:newsの場合)
'orderby' => 'post__in',
'order' => 'DESC' // いいねの降順
)
);
WP_Queryは記事の情報を受け取るWordpressに定義されているクラスです。$the_queryに格納しています。
<?php if ( $the_query->have_posts() ) : ?>
<!-- ループ開始 -->
<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<h2><?php the_title(); ?></h2>
<?php endwhile; ?>
<!-- ループ終わり -->
<?php wp_reset_postdata(); ?>
<?php endif; ?>
上記のようにループして使います。サンプルとして記事のタイトルを表示するようにしています。
wp_ulike_get_popular_items_idsの内容を見てみる
続いてWP ULikeの関数であるwp_ulike_get_popular_items_idsの内容を確認してみます。
function wp_ulike_get_popular_items_ids( $args = array() ){
//Main data
$defaults = array(
"type" => 'post',
"rel_type" => 'post',
"status" => 'like',
"user_id" => '',
"order" => 'DESC',
"is_popular" => true,
"period" => 'all',
"offset" => 1,
"limit" => 10
);
$parsed_args = wp_parse_args( $args, $defaults );
$item_info = wp_ulike_get_popular_items_info( $parsed_args );
$ids_stack = array();
if( ! empty( $item_info ) ){
foreach ($item_info as $key => $info) {
$ids_stack[] = $info->item_ID;
}
}
return $ids_stack;
}
今回はオプションとして
'type' => 'post',
'rel_type' => 'news',
'status' => 'like',
'period' => 'all'
を追加しましたが、他にも下記の内容を追加する事ができます。
$defaults = array(
"type" => 'post',
"rel_type" => 'post',
"status" => 'like',
"user_id" => '',
"order" => 'DESC',
"is_popular" => true,
"period" => 'all',
"offset" => 1,
"limit" => 10
);
デフォルトではこのような設定になっています。今回は明示的に設定を定義しましたが、デフォルトのままで問題なかったですね。
簡単に設定項目を確認してみます。
type
(post, comment, activity, topic)といったタイプが選択できます。基本的に投稿タイプ(post)を使う事が多いかと思います。
rel_type
投稿タイプを選択できます。例えばnewsというカスタム投稿タイプを作成するとnewsになります。
status
(like, dislike, unlike, undislike)のオプションを選択できます。likeであればいいねされているもの、dislikeであれば低評価されたものが取得されます。
user_id
特定のユーザーID(いいねしたユーザーID)を選択する事で、そのユーザーがいいねしたものが取得されます。
order
(DESC, ASC)を選択できます。並べ替えになります。
is_popular
(true, false)のどちらか選択できます。trueにする事でいいね数でソートできるようになります。
offset
現在のページ数です。
limit
1ページあたりの表示件数です。
以上がオプションの説明になります。いいね順で使う場合は、デフォルト値のままで良いかと思います。
いいねが0件のものが表示されない
これで無事にいいね順に並んでいるのが確認できました。
ですが、このままだといいねが0件のものが表示されません。
いいねが0件のものも表示したい場合、WP ULikeのプラグインファイルを修正する必要があります。
バックアップを取ってから実行するようにしましょう。
wp-content\plugins\wp-ulike\includes\functions\queries.phpのファイルを開きます。
ファイルにあるwp_ulike_get_popular_items_infoメソッドを見つけます。
104行目にあるSQL文を修正します。
WHERE t.meta_group = "%5$s" AND t.meta_value > 0 %6$s
↓
WHERE t.meta_group = "%5$s" AND t.meta_value >= 0 %6$s
に変更します。
これで、いいねが0件のものも表示されるようになりました。
おまけ 記事一覧画面にいいねボタンを設置する
最後に記事一覧にいいねボタンを設置してみようと思います。
<?php if ( $the_query->have_posts() ) : ?>
<!-- ループ開始 -->
<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<h2><?php the_title(); ?></h2>
+ <div><?php if(function_exists('wp_ulike')) wp_ulike('get'); ?></div>
<?php endwhile; ?>
<!-- ループ終わり -->
<?php wp_reset_postdata(); ?>
<?php endif; ?>
先ほどの一覧表示のコードにいいねボタンを追加してみました。簡単に実装する事ができます。