【WP ULike】WordPressの記事一覧をいいね順に並べ変える方法

WordPressで記事一覧をいいね順に表示したい場合はどうすれば良いのだろう・・・。

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の関数である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)を選択できます。並べ替えになります。

(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; ?>

先ほどの一覧表示のコードにいいねボタンを追加してみました。簡単に実装する事ができます。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次