直近1ヶ月に投稿した記事の人気順位を表示するテンプレートを作りました

Image

社内で、「メールマガジンに掲載するネタとして直近1ヶ月の投稿を人気順で表示できないか?」と聞かれました。

人気記事はJetpackの統計情報で見ることができますが、投稿日の範囲を限定して順位付けというものはどの画面を見てもできないような気がしました。

そこで色々ググったところ、なんか出来るようになりましたのでそれについて書きたいと思います。

* 2016/06/28 この記事の色々が更新されました。新しい記事は「2016版 直近1ヶ月に投稿した記事直近1ヶ月に投稿した記事の人気順位を表示するテンプレート」となります。こちらをご参照ください。

Jetpackの統計情報を利用するためのプラグインを発見

まずこのページを見つけました

Jetpack のみで人気TOP10を表示する

残念ながら投稿した日付を限定するということではありませんでしたが、なるほどJetpackの統計情報を使うプラグインがあるんだなということがわかりました。

上記のような Jetpack のコードについては stats_get_csv で検索すると色々出てきますよ。

と、書いてあるので早速ググってみました。そして、

[resolved] Stats Plugin: Excluding Homepage from stats_get_csv results (9 posts)

というページを発見。こちらのコードが分かりやすかったのでこれを元にテンプレートを作ることにしました。

環境を設定する

プラグインとしてはJetpackを使うのでこれをインストールして有効化しておくことはもちろんですが、Jetpackの統計情報を扱えるプラグインを追加します。

Jetpack Post Views というプラグインをインストールして有効化します。

その後に設定が必要です。

Image

設定>Jetpack Post Views をクリックします。

Image

下にある3つの赤い丸が全て緑の丸にならないと利用することが出来ません。

WordPress API Key

自分のAPIキーを入力します。分からない場合は

https://apikey.wordpress.com/

へ行きます。

Image

このようにAPIキーが表示されます(ログインしていなければここでログインへのリンクが表示されます)。これをコピーして貼り付けます。

Blog URI

ここには自分のサイトurlを入力します。このblogの場合は、 https://usortblog.com/ となります。

ここまで入力してもすべてが緑の丸にならない場合は、Jetpackとの連携がちゃんとできているか確認してください。私の場合なのですが、どうしても赤い丸が消えなかったので一度連携を解除して再度連携したら緑の丸になりました。これをするとほかのJetpackの設定が一旦おかしくなるかもしれませんのでおかしくなった場合はJetpackの各機能の再設定などをしてください。

Image

全ての設定が正しく終わるとこのように全て緑の丸になります。

page.phpをコピーして新しいテンプレートを作る

親テーマtwentyfourteenからpage.phpをコピーして、子テーマのフォルダに入れます。名前をオリジナルのものにします。

page-recentOnemonthPostedPopular.php

と、しました(ちと長い(^_^;)

ファイルを開いて、頭のコメント部分を削除して代わりに

オリジナルのテンプレート名を入れます。

から

までの間に表示部分を入れますので、その間にあるコードは削除しておきます。

人気順に投稿記事情報を取得する

新しく入れたプラグイン、Jetpack Post Viewsstats_get_csvという関数を使って人気順に投稿記事を取得します。

上記で days= というところに正の数字を入れるとその期間中の統計情報が対象になります。ここで-1としているのは無制限を表します。limit=取得する投稿記事の最大記事数を示します。同じく-1で無制限にします。

無制限にするのは取得した後に投稿日が該当するものだけを抽出したいからです。制限をかけるとたいがいその期間の記事数が1つか2つになってしまいます(^_^;。ロングテールといいますか、読まれた数の多い投稿は1ヶ月以上過去の記事が多いです。

そして $top_posts = stats_get_csv… で投稿記事を人気のある順に取得します。

取得した$top_postsのそれぞれのデータは、

このような値が入ってきます。

投稿日が直近1ヶ月のものだけとする

取得した $top_postsforeachでループして表示しますがその際に、直近1ヶ月に投稿したものだけを表示の対象とします。

部分的に解説します。

直近1ヶ月を見るために1ヶ月前の日付を取得します。

$top_postsの内容には投稿日がありませんでしたので、post_idを元に元の投稿データを取得します。

そして、foreachのループ中で、

1ヶ月前の日付以上の投稿日を判定します。

もう一つの条件として、

がついていますが、これは取得したデータにトップページが入っているために除外をしています。

完成したテンプレートはこちら。

↓ダウンロード
page-recentOnemonthPostedPopular
↓最新版(固定ページを表示しないようにしました)
page-recentOnemonthPostedPopular

テンプレートの使い方

固定ページを新規追加して、適当にタイトルをつけて、

Image

ページ属性のテンプレートで、「page-recentOnemonthPostedPopular」を選び、公開をクリックします。

Image

このような感じで表示されます。実際のページはこちら↓

兎本美佳

ブログを見た人がそのままできたらいいなと思って、できるだけ丁寧に書いています。blogに書いたようなネタの有償対応のご相談は「ゆうそうと」へいただければと思います(^^)/
無償での対応をご希望の場合は、コメントをいただけましたら可能な場合はコメントを返させていただきます。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
スポンサー広告
ブログをメールで購読

メールアドレスを記入して購読すれば、更新をメールで受信できます。

261人の購読者に加わりましょう

トップへ戻る