人気の(アクセスの多い)投稿を表示するJetpackのウィジェットをなんとなくサイドバーに置いてみたけど、アクセス数の取得期間がデフォルトの24〜48時間から変更できず、ウチのような泡沫サイトだともうちょい長くしたいのでソースを書き換えてみた。やり方書いてるページが見つからなかったのでメモ。Jetpackのバージョンは4.4.2。
(2016/2/11 functions.phpにコードを追加する場合を追記)
変更手順
書き換えるファイルは/wp-content/plugins/jetpack/modules/widgets/top-posts.php
まずアクセス数取得期間を増やす。変更箇所はtop-posts.php
354行あたりで以下のようになっているところ。
$days = (int) apply_filters( 'jetpack_top_posts_days', 2 );
if ( $days < 1 ) {
$days = 2;
}
if ( $days > 10 ) {
$days = 10;
}
例えば30日にする場合は次のように変更。
$days = (int) apply_filters( 'jetpack_top_posts_days', 30 );
if ( $days < 1 ) {
$days = 2;
}
if ( $days > 30 ) {
$days = 30;
}
さらに、固定ページを除外し投稿のみ表示したいので次のように変更する。
(ウィジェットの設定でも投稿のみ表示にできるが、これは投稿と固定ページを合わせて取得してから固定ページを除外するので、例えば固定ページが上位10件中2件あった場合、投稿が8件しか表示されなくなってしまう。)
410行あたりの以下の部分を見つけて、
// hide private and password protected posts
if ( 'publish' != $post->post_status || !empty( $post->post_password ) || empty( $post->ID ))
次のように固定ページも除外する記述を追加。(元記事: Ramsukul.comShow only Posts in Jetpack Top Posts & Pages Widget – Ramsukul.com
// hide private and password protected posts
if ( 'publish' != $post->post_status || !empty( $post->post_password ) || empty( $post->ID ) || get_post_type($post_id)=='page' )
以上。なおソースを直接書き換えているので、当然top-posts.php
がアップデートされると元に戻ってしまうけどまぁしばらくこれで様子見。functions.php
に書いたりするほうがスマートだと思うけどよくわかってないのでやらない。→わかったので以下に追記
functions.phpにコードを追加する場合
公式フォーラムに書いてありました。以下のコードをテーマのfunctions.phpに追加するだけでよいようです。こちらのやり方だと、top-posts.php
がアップデートされてもいちいちコードを書き直したりしなくてよくなります。
function jeherve_top_posts_timeframe() {
return '30';
}
add_filter( 'jetpack_top_posts_days', 'jeherve_top_posts_timeframe' );
2行目の数字が取得期間(日)なので、好きな数字に変更すればよいです。注意点としては、あんまり期間を長くしすぎるとデータを返すのに時間がかかるかもよ的なことがフォーラムに書いてあります。
プラグインを使う場合
下記のプラグインも少し試してみたけど、プラグイン入れるほどのことでもなかろうと思ってやめた。
WordPress Popular Posts
人気投稿表示ではたぶん一番有名なプラグイン。アクセス数取得期間も含めていろいろ設定できてよさげだが、アクセス数のカウントを独自に取っているようなので、あまりそういうデータを増やしたくないなと思って使わないことに(JetpackのウィジェットはWordpressの統計から取ってきている)。
Popular Posts Tabbed Widget for Jetpack
人気の投稿とコメントと最新記事をタブ切替で表示可能。こちらはJetpackのウィジェットと同じくWordpressの統計からアクセス数を取得している。がタブにするとなんか仰々しいのでやめ。