WordPressで各記事の文字数を取得しデータベースに保存する
the_contentフィルターフックを利用して文字数を計算
WordPressで文字数を取得するためには、
the_contentフィルターフックを利用する。このフックを利用すれば記事内に構成文字数などを書いておくことができるようになる。文字数のカウント方法や表示の仕方は以下の方法で可能。
フィルターにpost_strings_countという関数を関連付ける
add_filter('the_content', 'post_strings_count');
post_strings_countでは、文字数をカウントする。
function post_strings_count($text) { // 改行コードを削除 $strings = str_replace(array("\r\n", "\r", "\n"), '', $text); // 文字列からHTMLコードを除去し文字数をカウント $count = mb_strlen(strip_tags($strings), "UTF-8"); // 記事ページの場合は文字数を表示する if(!is_single()) { return $text; } else { return $text.'<br/><b>'.$count.'</b>文字の記事です'; } }
表示するだけなら上の方法で対応可能となる。
記事の文字数を用いてブログサイトの分析に利用したい場合には、上の処理にプラスして文字数を保存する必要がある。その場合には、WordPressのカスタムフィールドを利用する。
カスタムフィールドを利用して文字数を保存
記事毎に文字数を保存する場合には、カスタムフィールドを利用することで効率的にデータを管理することができる。具体的には、
- add_post_meta
- update_post_meta
を利用して文字数の追加と更新をすることができる。
文字数をカスタムフィールドで管理するためのコードは以下のようにした。
function post_strings_count($text) { global $id; // 記事のIDを利用可能な状態にする $strings = str_replace(array("\r\n", "\r", "\n"), '', $text); $count = mb_strlen(strip_tags($strings), "UTF-8"); // 新規記事の投稿の場合 if ( wp_is_post_revision($id) ) { add_post_meta($id, 'char_count', $count, true); } // 記事の更新の場合 else { update_post_meta($id, 'char_count', $count); } if(!is_single()) { return $text; } else { return $text.'<br/><b>'.$count.'</b>文字の記事です'; } }
上のコードをfunctions.phpに設定して、新規に記事を追加すると、データベースの
wp_postmetaテーブル
にデータが登録される。また、記事を更新した場合は、idで行を特定しその行の値が新規の文字数で更新される。
ブログ記事を削除してゴミ箱から完全に削除すれば、該当する文字数データも削除されるので、wp_postmetaテーブルに不要なデータが蓄積されるということはない。
文字数の表示だけでなく、データベースに保存までしておけば、記事の優劣を決めるための一つの指標として文字数データを活用することが可能となる。