ログインユーザーの「いいね!」数を表示させる方法はありませんか?
下記の<span id="like">●</span>
に表示したいです。
html
1<?php if (is_user_logged_in()): ?> 2 <p>あなたは<span id="like">●</span>件いいねされてます。</p> 3<?php endif; ?>
「WP ULike」というプラグインで下図のようにユーザー別で集計できているはずなので、$userid = get_current_user_id();
などでログインユーザーのIDを取得してからプラグインのデータと合わせれば?と思うのですが、英語圏も含めて検索したものの方法が全く見つからず質問させて頂きました。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答1件
0
ベストアンサー
出先なので簡潔に... ヒントだけです。
<p>あなたは<span id="like">●</span>件いいねされてます。</p>
と書いていますが、Top Likers
で表示されているのは、Like した数
です。
ちなみにログインしていない状態のユーザが、「いいね」すると Guest User と表示されます。
検索して見つからない場合は、ソースコードを読むのが早いです。
ソースコードをよむと class-wp-ulike-stats.php の get_top_likers() の部分で集計していますので、この関数を呼び出して、$results を取得・参照することになると思います。
WP ULike プラグインが、インストールされていたら、
PHP
1require WP_PLUGIN_DIR . "/wp-ulike/admin/classes/class-wp-ulike-stats.php"; 2$my_ulike_stats = new wp_ulike_stats(); 3$likers = $my_ulike_stats->get_top_likers();
で、 配列 $likers に 以下のようなデータが入ります。
PHP
1array ( 2 0 => 3 stdClass::__set_state(array( 4 'user_id' => '1', 5 'SumUser' => '2', 6 'ip' => '192.168.1.100', 7 )), 8 1 => 9 stdClass::__set_state(array( 10 'user_id' => '2', 11 'SumUser' => '5', 12 'ip' => '192.168.1.101', 13 )), 14 2 => 15 stdClass::__set_state(array( 16 'user_id' => '1037204866', 17 'SumUser' => '1', 18 'ip' => '192.168.1.102', 19 )), 20)
この配列からデータを取り出すのは、foreach を使って、
PHP
1foreach ( $likers as $liker ) { 2 echo "<p>ユーザー ID : ". $liker->user_id ."は、". $liker->SumUser ."件いいねしています。</p>"; 3}
のようにすると順番に表示されます。
特定のユーザーのみ表示したいのであれば、foreach の中で、 if で条件判断して条件に一致する場合のみ表示するようにします。
PHP
1foreach ( $likers as $liker ) { 2 if ( ユーザーID == $liker->user_id ){ 3 echo "<p>ユーザー ID : ". $liker->user_id ."は、". $liker->SumUser ."件いいねしています。</p>"; 4 } 5}
ユーザーID の部分は、WordPress のユーザーID(数字です) で置き換えてください。 ユーザーID は、1 が WordPress をインストールした際の初期Admin です。
ユーザーID は、ユーザーID の編集画面の URL 等で使われていますので、確認可能です。 ( 例: http://example.com/wp-admin/user-edit.php?user_id=3&wp_http_referer=%2Fwp-admin%2Fusers.php )
(追記 2018/08/04 14:16 / 修正 2018/08/06 11:00)
つらつらと眺めていて、postmeta に '_liked' が、追加されていたことに気がついたので、posts と postmeta のデータベースだけで集計できそうです。
global $wpdb; $likers = $wpdb->get_results( " SELECT p.post_author AS user_id, m.meta_value AS SumUser FROM $wpdb->posts AS p, $wpdb->postmeta AS m WHERE p.ID = m.post_ID AND p.post_status = 'publish' AND m.meta_key = '_liked' GROUP BY p.post_author " );
(2018-08-06 11:30 追記)
テスト環境に新しく WordPress をインストールして、試してみました。テンプレートは、twentyfifteen です。
下記の通り、こちらでは、問題なく表示されます。
page-test1.php を下記の内容で作る。
PHP
1<?php 2/** 3* Template Name: page-test1 4* 5*/ 6get_header(); ?> 7 8<div id="primary" class="content-area"> 9<main id="main" class="site-main" role="main"> 10<div id="cherrysan"> 11<?php 12 13global $wpdb; 14$likers = $wpdb->get_results( " 15 SELECT p.post_author AS user_id, m.meta_value AS SumUser 16 FROM $wpdb->posts AS p, $wpdb->postmeta AS m 17 WHERE p.ID = m.post_ID 18 AND p.post_status = 'publish' 19 AND m.meta_key = '_liked' 20 GROUP BY p.post_author 21" ); 22 23foreach ( $likers as $liker ) { 24 if ( 1 == $liker->user_id ){ 25 echo "<p>ユーザー ID : ". $liker->user_id ."は、". $liker->SumUser ."件いいねされています。</p>"; 26 } 27} 28 29?> 30</div> 31</main><!-- .site-main --> 32</div><!-- .content-area --> 33<?php get_footer(); ?>
固定ページの編集画面で、個別テンプレートを選んで固定ページを作成。
page-test1.php の $likers = $wpdb->get_results( .... ); の行を下記のようにすれば、今月分(1日〜月末)が集計できます。
PHP
1$likers = $wpdb->get_results( " 2 SELECT P.post_author AS user_id, SUM(T.CountUser) AS SumUser 3 FROM $wpdb->posts AS P, ( 4 SELECT user_id, count(user_id) AS CountUser, post_id as post_id 5 FROM `".$wpdb->prefix."ulike` 6 WHERE DATE_FORMAT(date_time, '%Y%m') = DATE_FORMAT(NOW(), '%Y%m') 7 GROUP BY user_id, post_id 8 UNION ALL 9 SELECT user_id, count(user_id) AS CountUser, activity_id as post_id 10 FROM `".$wpdb->prefix."ulike_activities` 11 WHERE DATE_FORMAT(date_time, '%Y%m') = DATE_FORMAT(NOW(), '%Y%m') 12 GROUP BY user_id, activity_id 13 UNION ALL 14 SELECT user_id, count(user_id) AS CountUser, comment_id as post_id 15 FROM `".$wpdb->prefix."ulike_comments` 16 WHERE DATE_FORMAT(date_time, '%Y%m') = DATE_FORMAT(NOW(), '%Y%m') 17 GROUP BY user_id, comment_id 18 UNION ALL 19 SELECT user_id, count(user_id) AS CountUser, topic_id as post_id 20 FROM `".$wpdb->prefix."ulike_forums` 21 WHERE DATE_FORMAT(date_time, '%Y%m') = DATE_FORMAT(NOW(), '%Y%m') 22 GROUP BY user_id, topic_id 23 ) AS T 24 WHERE P.ID = T.post_id 25 GROUP BY P.post_author; 26" );
(2018-08-08 18:55追記)
コメント欄では、インデントがつかないので、こちらにも書いておきます。
$sumuser = 0; foreach ( $likers as $liker ) { if ( $UID == $liker->user_id ){ $sumuser = $liker->SumUser; } } echo $sumuser;
投稿2018/08/03 01:45
編集2018/08/08 10:00総合スコア25234
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/03 10:02
2018/08/04 03:18
2018/08/04 03:44
2018/08/04 03:53
2018/08/04 04:13
2018/08/04 04:18
2018/08/06 01:32
2018/08/06 01:38
2018/08/06 01:48
2018/08/06 02:06 編集
2018/08/06 02:09 編集
2018/08/06 02:16
2018/08/06 02:22 編集
2018/08/06 02:27
2018/08/06 02:44 編集
2018/08/07 05:55 編集
2018/08/07 06:16
2018/08/07 06:52
2018/08/07 08:25
2018/08/07 08:53
2018/08/07 08:54
2018/08/07 09:06
2018/08/07 12:46 編集
2018/08/07 22:27
2018/08/07 23:07
2018/08/08 00:14
2018/08/08 09:10
2018/08/08 09:57
2018/08/08 11:26
2018/08/13 07:54
2018/08/13 07:56 編集