以前、このブログでも紹介させていただきました
WordPress用プラグイン
WordPress Facebook Like Ranking
参考記事:WordPressサイト上の記事におけるFacebookでもらった「いいね!」数ランキングを表示する
このプラグインをとあるサイトに導入したところ、「カスタム投稿」ではカウントしていないようだったのでソースを拝見させていただき、該当部分をチョチョっと変更させていただいたのでその備忘録も兼ねてご紹介させていただきます。
もともとは「投稿」の「いいね!」数だけカウントしています
このプラグインのコードを見ると get_posts 関数で `post_type` を指定せずに記事を取得していました。
`post_type`を指定しないと get_posts のデフォルトで検索されます。
参考:get_posts のデフォルト
$args = array(
‘posts_per_page’ => 5,
‘offset’ => 0,
‘category’ => ”,
‘orderby’ => ‘post_date’,
‘order’ => ‘DESC’,
‘include’ => ”,
‘exclude’ => ”,
‘meta_key’ => ”,
‘meta_value’ => ”,
‘post_type’ => ‘post’,
‘post_mime_type’ => ”,
‘post_parent’ => ”,
‘post_status’ => ‘publish’,
‘suppress_filters’ => true );
このとおり、指定しない=post(通常の投稿) となっているんですね。
そこで「カスタム投稿」の「いいね!」一覧を作るためにこうしました・・・・
※ WP Facebook Like Ranking version 1.3.0 を元に改造させていただきました。
※ここではカスタム投稿のスラッグを『customer』ということで記述します。適宜変更してください。
45行目付近
・・・ // Search All Of The Posts $lastposts = get_posts('numberposts=-1'); foreach($lastposts as $post) { ・・・
を
・・・ // Search All Of The Posts $lastposts = get_posts(array( 'numberposts'=>-1, 'post_type'=>'customer')); foreach($lastposts as $post) { ・・・
に。
59行目付近からのif文節
・・・ if ($WpFbLikeRankingUpdatePostNumber == 'all') { $lastposts = get_posts('numberposts=-1'); } else { $lastposts = get_posts('numberposts='.$WpFbLikeRankingUpdatePostNumber.'&orderby=post_date&order=DESC'); } ・・・
を
・・・ if ($WpFbLikeRankingUpdatePostNumber == 'all') { $lastposts = get_posts(array( 'numberposts'=>-1, 'post_type'=>'customer')); } else { $lastposts = get_posts('numberposts='.$WpFbLikeRankingUpdatePostNumber.'&orderby=post_date&order=DESC&post_type=customer'); } ・・・
に。
99行目付近
・・・ // Search All Of The Posts $lastposts = get_posts('numberposts=-1'); ・・・
を
・・・ // Search All Of The Posts $lastposts = get_posts(array( 'numberposts'=>-1, 'post_type'=>'customer')); ・・・
に。
150行目付近のif文節
・・・ if(!empty($category_id)) { $rank = get_posts('meta_key=wp_fb_like_count&numberposts='.$number.'&orderby=meta_value_num&category='.$category_id); } else { $rank = get_posts('meta_key=wp_fb_like_count&numberposts='.$number.'&orderby=meta_value_num'); } ・・・
を
・・・ if(!empty($category_id)) { $rank = get_posts('meta_key=wp_fb_like_count&numberposts='.$number.'&orderby=meta_value_num&category='.$category_id.'&post_type=customer'); } else { $rank = get_posts('meta_key=wp_fb_like_count&numberposts='.$number.'&orderby=meta_value_num&post_type=customer'); } ・・・
に、それぞれ変更します。
その後、再集計すれば指定した投稿タイプでの「いいね!」ランキングが集計されます。
プラグイン作者に敬意を込めて改造するようにしましょう。
また、改造後該当のプラグインにアップデートがあると上書きされてしまいますので注意して下さい。
アップデートされたくない場合は「プラグイン」のメインのファイル(多分、「プラグイン名」.phpだと思います。)
のヘッダ部分「Plugin Name:」等がある場所の「Version:」を 100000とか99999とか
そこまでバージョンアップせんやろ!!
ってくらいの数字に書き換えておくとバージョンアップされません。
※万が一、作者がそれ以上の数値で来たらバージョンアップされます(笑)
※合わせて「Plugin Name:」も 「~~~(元の名前) KAI(改造の意味)」 のように修正しておけば良いかもしれません。
くれぐれも「プラグイン作成者」への敬意はわすれないようにお願いいたします!
本当は・・・
ここまで説明していて、私自身も思っているし、多分ソースが理解出来ていらっしゃる方なら思っていると思われることなので書いておきます。
多分、引数として「post_type」を指定させた方が良いと思います。
管理画面上でポストタイプを指定させるようにして・・・・
ただ、これをやってしまうと次の深みへハマるのは目に見えているので今回はやりません。
次の深み・・・「数パターン(投稿タイプ毎に作るなど)リストを作成出来るようにしたら使い勝手が良い。」ということ。
作者さんのサイトに書けば良いのでしょうが、昨年9月くらいから更新がないので、近況を思うと書き込めないビビリな私がいます(笑)
WP FB Like Rankingについて記事を書いてくださりありがとうございます。カスタム投稿のことは全然頭にありませんでした笑 色々余裕がある時に実装しておきたいと思います。ご指摘ありがとうございました。
あ、作者さん!こちらこそありがとうございます!大変素晴らしいブラグインの開発に感謝いたします!
私もプラグイン開発してますので分かります。実装はごゆっくりでも意向があるのなら期待しちゃいます!
コメントいただきましてありがとうございました!