【WordPress】記事文字数のカウント方法(コア機能・プラグイン)チェックと、フロントへの出力について

      2021/06/22   2786文字

今回は、WordPressの『記事文字数のカウント』について取り上げます。勿論、誰も興味がないクソ文を20000文字書いたってダメなんですけど(笑)、文字数的にも『ある程度まとまったコンテンツがあるか』はチェックしたいところだと思います。
コア機能・プラグインによる文字数のカウントや、『カウントしてフロントに出力する(ユーザーがコンテンツ量を視認できる)』というところも行ってみます。さっそく確認してきましょう。

WordPressでの、デフォルト搭載/プラグインでの、記事文字数のカウント方法

クラシックエディタ使用時の文字数カウント

クラシックエディタ使用時の文字数カウント
クラシックエディタ使用時の文字数カウント・表示部分は『記事編集部分の下』に出てきます。WordPressにデフォルトで搭載されている機能ですね。とくにフィールドに格納されている数値では無いようです。

というのも、WordPressには『〇〇(ドメイン)/wp-admin/js/word-count.min.js』に、カウント用スクリプトが入っています。このスクリプトが、文字入力数に応じて『wp-word-countというidが付いている部分』の数値を変えているからです。

ブロックエディタ使用時の文字数カウント

ブロックエディタ使用時の文字数カウント
ブロックエディタ使用時です。ちょっとわかりにくいんですが、画面の上のほうに小さい『i』のようなアイコンがあり、クリックすると文字数が確認できます。使っているスクリプトは違うかも(word-count.min.jsじゃなくて、idがwp-editor-js-translationsというスクリプトが出力されている)

文字数がクラシック使用時と少しずれています。理由は、p-editor-js-translationsスクリプト内のパラメーターに『Word count type:characters_including_spaces』というのがあるからです(スペース含む)。『半角/全角スペースや記号などを含まないカウント』をしている場合は、数値上ズレが発生する場合があります。

プラグインを利用した文字数カウント(例:WP Word Count)

プラグインを利用した文字数カウント
デフォルト搭載機能でもなんとかなるけど、より詳細に管理画面で確認したい場合はWP Word Countプラグインが良いでしょう。管理画面一覧などでも確認しやすくなります。

とはいえ、このような機能は自作できるかもしれません。
文字数を『フィールドから呼び出す』または『the_content()のタグを含まない値を計測』『そして追加カラムに表示』と言った流れです。manage_edit-post_columns記事などもご覧になってください。

WordPressで、記事文字数をカウントして、フロント出力する方法

失敗例(2000字の記事で4000など、やたら多い文字数が出る)


それではさっそくやってみましょう。PHPには与えられた文字列の長さをチェックするファンクションがあります。日本語などマルチバイト文字を含むので『mb_strlen』(マルチバイトじゃない場合はstrlen)を、『post_content』の文字列に使えばokという発想になりました。個別の記事ページに出力したいので『single.php』に記載しました。


で、管理画面でのカウントは『2321』なんですけど・・・


2倍近い値がでてしまいました。これは文字数カウントのサイトに、記事部分をコピーして貼り付けた値に近い数値です(スペース込み4607が出る。厳密なカウント方法は違うかも。)データベースpost_contentの部分には、執筆に使ったhtmlタグなども入っています。どうにかタグ除去はできないでしょうか?

管理画面・実際の値に近い数値を出すプログラム(strip_tagsでタグ除去)

そこで、適当に『php タグ除去』とかで検索してたら『strip_tags』というものを見つけたので、これをかませてみました。strip_tagsに渡すのは『get_post_fieldで取った記事本文』。2番目のパラメーターに『取り除かないタグを指定』もできるそうです(今回は使っていません)。

WordPressで、記事文字数をカウントして、フロント出力するプログラム
使い方は同様に、『single.php』に記載。

表示例

WordPressで、記事文字数をカウントして、フロント出力 表示例
すこしカウントのしかたの違いなどがあると思うんですけど、管理画面でのカウントに近い値・2500程度が出てきました。
(タグ内マルチバイト文字もカウント・または 自己終了型XHTMLタグ無視か?)
これで、ユーザー・読者にも、ある程度コンテンツボリュームを確認いただけるようになります。

参考リンク(PHP関連)

あとがき・まとめ

  • WordPressはデフォルトで文字数カウントができる(クラシック/ブロックで表示は違う)
  • WP Word Count等が便利
  • phpのファンクション『mb_strlen』で、マルチバイト文字のカウントができるが、タグも含んでしまう
  • phpのファンクション『strip_tags』では、与えられた文字列に対してタグの除去ができる

まとめると、このようなところでしょうか。文字数をフロント側で確認できると、ユーザー・読者が『ボリュームがどのくらいあるかわかる』というメリットがあります。一覧ページでループ回して、表示させてもよいでしょう。


【カテゴリ】 - PHP・データベースetc
【タグ】 - , , , ,

  関連記事

WPデータベースの余計なデータには何がある?事例と対処方法・あるとイヤなケース
PHP・shuffleやarrayを使った、画像ランダム表示方法~メインビジュアルやバナー・テキストにも利用可能
【PHP】カウントダウン機能に使える?array_reverseで配列要素を逆に,パラメーター挙動&array_flipとの違い
【ユーザーデータ取得】WordPress定義済み関数の『get_userdata()』『wp_get_current_user()』ってどのように違うの?
【PHP】GD・ImageFilterで、画像の色合いを変えてみる
YouTube Data APIを使って、PHPで『タイトル・動画id・サムネイル画像』などを取得してみる(Search: listリソース)
WordPress・REST APIのjsonファイルにカスタムフィールドを入れ、タイトル・アイキャッチと共に外部サイトで取得・表示
WordPressユーザーが覚えると便利な条件分岐~投稿記事・固定ページ指定して表示/非表示
WordPress一覧表示で、特定のカテゴリ/投稿を表示しないようにするには?→category_not_in・post_not_inで
PHP・mb_substr関数を使って、タイトル文字数を揃える(WPレイアウト調整)
WordPress記事一覧ページの『本文からの抜粋』を表示する関数と、その文字数の調整方法をチェックする
【WPユーザー名バレ対策】ユーザー名表示からPHP・preg_matchでリダイレクト(wp-json/wp/v2/usersなど)