WordPressで、当月の投稿数を取得して画面に表示させてみました。
ちょっとテストしてみたところ、うまくいったのでメモしておきます。
やりたいこと
毎日Blogを欠かさず書く習慣づけを行いたい。たくさんの記事を提供したい。
考えたこと、やりたいこと
- 「毎日がんばる」的な精神論だと飽きるので、Blogの投稿をする為の動機付けを作りたい。
- 計測できるものは改善できる。な、はず。
- そのきっかけとして、常に前月の投稿数実績と比較できるようにしたい。
- 取得した実績は、管理ページのトップに常に表示させたい。
いきなり目標に到達するにはハードルが高いので、まずは調査を兼ねて、WordPressの当月投稿数を取得し、投稿数+累積数を表示させてみます。
データの取得
まずは、目的データを取得する方法の確認です。MySQLのDBを直接チェックしたところ、投稿データはwp1_postsテーブルに入っていっていました。
ですが、WordPressの場合はテーブル名の接頭語がインストール時に指定可能なので、プログラム上で、上記テーブルを直書きすることはできません。
では、どうするかというと、WordPressでは以下の変数で上記のテーブルが取得できます。また、この変数はDBのコネクション管理もしているので、$wpdb->get_results()でSQLが直接発行できます。
$wpdb->posts |
仕組みは分かったのでデータを取得したいのですが、データの中身をを直接チェックしたところ、データの取得は以下の関数でとれるようです。
<?php //------------------------------ // 今月の投稿数を取得する //------------------------------ function getThisMonthEntryQty( $wpdb ) { $sql = <<<QUERY SELECT DATE_FORMAT( POST_DATE, '%Y%m%d') targetdate, COUNT(*) count FROM $wpdb->posts WHERE POST_TYPE = 'post' AND POST_STATUS = 'publish' AND POST_DATE >= CONCAT( DATE_FORMAT( NOW(), '%Y%m'), '01' ) GROUP BY date_format( POST_DATE, '%Y%m%d') ORDER BY POST_DATE QUERY; return $wpdb->get_results( $sql ); } ?> |
表示側のロジック
表示側はこんな感じ。
本当はグラフにしたいけど、今回は実験なので表形式で出力させます。
<h2>今月の投稿数</h2> <table> <tr> <th>日付</th> <th>投稿数</th> <th>累積投稿数</th> </tr> <?php $totalcount = 0; ?> <?php foreach ( getThisMonthEntryQty( $wpdb ) as $d ) { ?> <?php $totalcount += $d->count; ?> <tr> <td><?php echo $d->targetdate; ?></td> <td><?php echo $d->count; ?></td> <td><?php echo $totalcount; ?></td> </tr> <?php } ?> </table> |
動作確認
とりあえずのテストとして、single.phpに以下のコード(と関数定義)を追加し、画面を表示させてみます。

期待した結果が出力されました。
TODO
この次にやりたいことメモです。- この表示を管理ページで閲覧可能にする。
- 結果を積み上げグラフで表示可能にする。
- 当月の累積投稿数と、前月を比較できるようにする。
管理ページに表示させるためには、プラグインを作らなければいけないはずなので、その辺の調査が次のステップになりそうです。
関連記事
コメントを残す