WordPress ツール・ソフトウェア

WordPress - 人気の記事をサイドバーに表示する

2010年1月1日

2010/01/12追記
このプラグインですが、一部の機能が私の環境では動いてないない事に気がつきました・・・・
環境に依って動作は違うと思いますが、御参考程度に・・・

Poplularity Contest (ポピュラリティ・コンテスト)と言う、良く読まれている記事を表示するプラグインを使用してみました。

ダウンロード

以下から ダウンロード可能です。

WordPress › Popularity Contest « WordPress Plugins

download

ダウンロード先のサイドバーを見ると、この記事を書いている時点で、WordPress 2.9 + Plugin 2.0b2 で、一票 "Broken" に票が入ってますが、私の環境では、同じ組み合わせで、パット見には問題なく動いているように見えます。 一応、"Works" の方に一票入れておきました。(2010/01/11追記 : さらに "Broken" に入っている票が増えていました。私の環境では問題がある様に見えませんが、環境によっては上手く動かないかもしれないので、お気を付け下さい)

compati

インストール

1. ダウンロードしたファイルを解凍します。

folder
フォルダーができます。

2. plugins フォルダーに解凍した"popularity-contest" フォルダーを配置します。

3. ダッシュボードから、プラグインを有効化します。

activate

4.以下のコードをサイドバーに書きます。(一例です)

<!-- 人気の記事 -->
<?php if (function_exists('akpc_most_popular')) { ?>
<h2><?php _e('人気の記事'); ?></h2>
<ul><?php akpc_most_popular(20,'<li>','</li>'); ?></ul>
<?php } ?>

5.以下の様に人気の記事が表示されます。

popular
※プラグインが導入された直後は、統計情報が存在しないので、暫くたたないと正確な情報にはなりません。

設定

デフォルトでは以下の様に各記事の下に、現在の "Popularity"の評価値が表示されます。

post_bottom

この表示を消すには、WordPress のプラグインの設定画面を表示して、「Show popularity rank for posts」を "No" に設定します。

popularity_plugin setting

カスタマイズ

標準では、投稿記事だけでなく WordPress の "ページ" もランキングの対象になります。
特殊なカスタマイズをしているサイトがあり、実際には記事では無い"ページ"を仕組み上作成していたので、"ページ"をランキングから除外したいという要件がありました。
プラグインに含まれる popularity-contest.php get_top_ranked_posts 関数に手を加えて、"ページ"をランキングから除外する事ができました。

2060行目に、データベースへの Query の条件に post_type = 'post' である事を付け加えます。 (行数は、プラグイン Ver 2.0bのものになります)
サイドバーの php ソース内で、 akpc_most_popular( ) 関数を使用している限りでは、以下の修正で十分でした。他の関数を使う場合は、もう少し修正が必要になるかもしれません。

function get_top_ranked_posts($limit) {
global $wpdb;
$temp = $wpdb;
$join = apply_filters('posts_join', '');
$where = apply_filters('posts_where', '');
$groupby = apply_filters('posts_groupby', '');
if (!empty($groupby)) {
$groupby = ' GROUP BY '.$groupby;
}
else {
$groupby = ' GROUP BY '.$wpdb->posts.'.ID ';
}
$posts = $wpdb->get_results("
SELECT ID, post_title
FROM $wpdb->posts
LEFT JOIN $wpdb->ak_popularity pop
ON $wpdb->posts.ID = pop.post_id
$join
WHERE post_status = 'publish'
AND post_type = 'post' /* ここを追加 */
AND post_date < NOW()
$where
$groupby
ORDER BY pop.total DESC
LIMIT ".intval($limit)
);

$wpdb = $temp;

return $posts;
}

ちょっと修正

Popularity Contest を導入すると、ページを表示させた時に Java Script Error が出ているのに気付きました。

image

各ポストの下に以下の様なコードが自動で埋め込まれているのですが、このコードの中で使われているAKPC_IDS という変数が定義されていないので、足し算が出来ずにエラーになっているようです。

<script type="text/javascript">AKPC_IDS += "78,";</script>

多分、上手く動いているであろう、本家のサイトのソースを参考にしてみると、<head> タグの中に、上記の変数が定義されていたので、同じ様に以下のコードを <head> タグの中に埋め込みました。

<!-- Popularity Contest -->

<script type="text/javascript">var AKPC_IDS = "";</script>

Java Script エラーは収まりましたが、これで問題が無いか暫く様子見中です。

-WordPress, ツール・ソフトウェア

Copyright© エンジニアの何でもメモ帳 , 2024 All Rights Reserved.