[WordPress]今月の投稿数を取得して表示させる


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

この次にやりたいことメモです。
  • この表示を管理ページで閲覧可能にする。
  • 結果を積み上げグラフで表示可能にする。
  • 当月の累積投稿数と、前月を比較できるようにする。

管理ページに表示させるためには、プラグインを作らなければいけないはずなので、その辺の調査が次のステップになりそうです。

関連記事

コメントを残す

メールアドレスが公開されることはありません。