WordPressに記事として書かれている文章のおおよその総文字数をSQL文だけで求める方法

By | 2017年6月24日 , Last update: 2019年6月11日

はじめに

WordPressの「投稿の編集」画面では、エディタの左下に↓の黒矢印のような感じで文字数が表示されます。

ところが、「Webサイトの記事全体の文字数の総数」を求めるために、すべての編集中のページを1ページごとに開いて、エディアの左下隅にある文字数を確認して、その総和を計算するとなると、記事数が増えたときにかなりの手間を要しますよね。それでなくとも、確認のためだけにエディタを開くのは誤って記事を編集してしまう原因になりかねないので、これをWordPressのシステム外で行う方法を考えてみることにしました。ただし、実際に求まるのはおおよその文字数であることをあらかじめご承知おきください。

スポンサーリンク

最近のMariaDBならSQL文だけで何とかできそうです。

記事の総文字数を求めるには、記事からHTMLのタグ等を取り除く必要があります。幸いMariaDB 10.0.5以降ではregexp_replace関数が追加されているので、これを使って以下のようにSQL文を書くと、タグを取り除くことができます。ただし、サンプルコードなどを貼り付けていて、そこにHTMLやXMLのタグが埋め込まれている場合等には、それもついでに削除してしまうことになりますので、実行の結果得られる総文字数が実際の総文字数よりも少なくなります。
[2017/08/20追加] SQL文を修正しました。
[2017/09/27補足] 引用符のコピー&ペーストができないことがあるようなので、SQL文本体をGitHub Gistに移動しました。

現時点(2017年6月24日時点)で実行すると、以下の結果になります。

MariaDB [lesser]> select sum(char_length(regexp_replace(regexp_replace(regexp_replace(post_content,’<.+?>‘,”),’&.+?;’,’_’),’\s+’,”))) as total from wp_posts where post_status=’publish’;
+——-+
| total |
+——-+
| 38839 |
+——-+
1 row in set (0.08 sec)

 
いつの間にか4万文字に近づいてますね。

WordPressの拡張タグに対応する。

もし拡張タグを使っている場合にはそれらも除外するようにSQL文を変更する必要があります。拡張タグ(‘[‘,’]’)及びその内部の文字列を文字数の集計対象から除外する場合には、前節のSQL文を以下のように変更すると使えると思います。
[2019/06/11追加] SQL文をGitHubに追加しました。

本サイトのデータベースで実行してみると…

MariaDB [lesser]> select sum(char_length(regexp_replace(regexp_replace(regexp_replace(regexp_replace(post_content,’<.+?>‘,”),’\[.+?\]’,”),’&.+?;’,’_’),’\\s+’,”))) as total from wp_posts where post_status=’publish’;
+——-+
| total |
+——-+
| 38594 |
+——-+
1 row in set (0.08 sec)

 
前節の結果と比較すると少ない値になりますね。

まとめ

この記事では、WordPressに記事として書かれている文章のおおよその総文字数をSQL文だけで求める方法について書きました。

正確に計算するためには他のプログラミング言語を用いて、仕様書等の文献や参考書の書籍とにらめっこをしながらプログラムを書く必要がありますが、すべてのケースを考慮してコードを書くのはそれなりに手間がかかりますし、それらのケースを考慮しつつ作業をする時間が取れない場合に手っ取り早く概数を求めたいときには有効な方法だと思います。

この記事は以上です。