ブログ文字数自動カウントして記事一覧で確認したい!リライト・下書き溜まりすぎ問題を解決

  • URLをコピーしました!

下書きが増えすぎて収拾つかない…!

ブログを運用していると、「これ書きたい!」と思ったときに、とりあえず下書きにメモしておくことありませんか?

ネタは溜まるのに、なかなか仕上げられず、気づけば下書きが多すぎて管理ができなくなってきた…。

「このブログの下書きたちをどうする?」

「どの記事が中途半端なのか」「どれをリライトすべきか」 記事の文字数カウントが自動で出来て、記事一覧で確認できたら便利なのに意外とそういう機能が見つからず、ここ数週間いろいろ調べていました。

その中で使えそうだったのが 「Admin Columns」 というプラグインです。

これは記事一覧に 「単語数」 を表示できるので、記事のボリュームをざっくり把握するには便利!

でも、やっぱり「文字数」で確認したい…と思い、最終的には 「自分で記述して追加する」 という方法をとることにしました。

これで、どの記事が中途半端なのか、どれをリライトすべきかを一目でチェックできるので便利です!

「ちょっとカスタマイズできそう!」 という方は、ぜひ試してみてください!

目次

ブログ記事の単語数 vs 文字数|違いを知って使い分けよう!

ブログ記事のボリュームを把握する方法として、「単語数」と「文字数」の2つがあります。

日本語の場合は、単語数カウントが正確でないことが多いんです。

まずは、単語数と文字数の違いを簡単に整理してみます。

単語数カウントは日本語に向いてない?

Admin Columns」のようなプラグインでは、英語圏向けのカウント方法(スペース区切り) を採用している。

たとえば、以下のような日本語の文章の場合:

「ブログの記事をリライトする方法を紹介します。」

  • 英語のようにスペースで区切る方式の場合Admin Columnsなど)→ 1単語 になる可能性あり
  • 日本語の形態素解析を使う場合(MeCabなど)10単語前後 に分かれる

日本語では単語の区切りが曖昧なため、スペースを基準にした単語数カウントは不正確になりがちです。

文字数カウントなら正確!

一方で、「文字数カウント」ならどんな言語でも正確に測れます

日本語は 単語の区切りが曖昧でも、1文字は確実に1文字としてカウントされる ので、記事のボリュームを把握するのに最適!

今回の目的が 「どの記事が中途半端なのか」「どれをリライトすべきか」 を把握することなので、単語数よりも文字数を一覧表示する方が実用的 だと思います。

Admin Columnsでできること

とはいえ、「Admin Columns」も便利なプラグインです。

記事一覧ページにカラムを追加できる ので、投稿の管理がしやすくなります。

Admin Columnsの主な機能
  • 投稿一覧に「単語数」「アイキャッチ画像」「カスタムフィールド」などを表示できる
  • 並び替えやフィルタリング機能が使える

このプラグインの単語数カウントは日本語だと少し微妙ですが、それ以外のカスタマイズ性は高いので、使い方によっては便利です!

「Admin Columns」インストール手順

まずは、単語数を記事一覧で確認できる「Admin Columns」から紹介していきます。

以下インストール手順です。

STEP
「Admin Columns」インストール

「Admin Columns」を検索してインストールします。

STEP
「Admin Columns」有効化
STEP
「Admin Columns」設定

設定画面はサイドメニューから「Admin Columns」クリック。

STEP
「Admin Columns」管理画面

以下のような画面が表示されます。

「Admin Columns」で項目追加カスタマイズ

ここでは、「Admin Columns」で投稿一覧で表示される項目を追加していきます。

STEP
投稿を選択

投稿一覧に追加したいので、「投稿」を選択します。

STEP
列を追加

以下のような表示になるので、「+列を追加」をクリック。

STEP
「単語数」を選択

タイプで「単語数」を選択します。

STEP
設定を保存

ラベルは任意で設定してください。自動でタイプと同じテキストが入力されてました。

「保存」をクリック。

STEP
記事一覧で「単語数」確認

これだと全然わからない!(笑)

なんとなく把握したい人はこちらで完了です。

Admin Columnsでは単語数でカウントということに加えて、昇順・降順で並び替えできなかったので、以下の方法でカスタマイズしていきます!

文字数カウント「昇順・降順ソート」対応にする方法

ここでは、文字数を自動でカウントし、投稿一覧で昇順・降順ソートできるようカスタマイズしていきます。

「fanctions.php」を編集します。

重要なファイルですので、変更を行う前に必ずバックアップを取ってください。
※サイトが壊れた場合など、いかなる保証もできませんので、自己責任で行っていただきますようお願いいたします。

私はSWELLテーマを使用しているので、サイトのディレクトリ内、SWELL子テーマ(swell_child)の「fanctions.php」を編集していきます。

以下のPHPコードを追加すれば、投稿一覧で「文字数」の昇順・降順ソートが可能になります。

下書きも含めた記述です。

PHP
// 投稿一覧に「文字数」カラムを追加
function add_character_count_column($columns) {
    $columns['character_count'] = '文字数';
    return $columns;
}

// 各投稿の文字数を計算して表示
function display_character_count_column($column_name, $post_id) {
    if ($column_name === 'character_count') {
        $post_content = get_post_field('post_content', $post_id);
        echo mb_strlen(strip_tags($post_content));
    }
}

// 文字数カラムをソート可能にする
function character_count_sortable_columns($sortable_columns) {
    $sortable_columns['character_count'] = 'character_count';
    return $sortable_columns;
}

// ソートクエリの修正(公開済み・下書き両方対応)
function character_count_orderby($query) {
    if (!is_admin() || !$query->is_main_query()) {
        return;
    }

    // 文字数でソートが選択された場合
    if ($query->get('orderby') === 'character_count') {
        $query->set('meta_key', '_character_count');
        $query->set('orderby', 'meta_value_num');

        // 現在の post_status を取得
        $current_status = $query->get('post_status');

        // post_status が指定されていない場合に全てのステータスを対象に
        if (empty($current_status)) {
            $query->set('post_status', ['publish', 'draft', 'pending', 'future', 'private']);
        }

        // 下書き記事も含めるように meta_query の条件を修正
        $meta_query = [
            'relation' => 'OR',
            [
                'key' => '_character_count',
                'compare' => 'EXISTS',
            ],
            [
                'key' => '_character_count',
                'compare' => 'NOT EXISTS',  // メタデータがない場合も表示
            ],
        ];
        $query->set('meta_query', $meta_query);
    }
}

// 投稿保存時に文字数をメタデータに保存(下書きも対象)
function save_character_count_meta($post_id) {
    if (wp_is_post_revision($post_id)) {
        return;
    }

    $post_content = get_post_field('post_content', $post_id);
    $character_count = mb_strlen(strip_tags($post_content));

    if (!empty($character_count)) {
        update_post_meta($post_id, '_character_count', $character_count);
    } else {
        delete_post_meta($post_id, '_character_count'); // 文字数が空の場合は削除
    }
}

// フックを追加
add_filter('manage_posts_columns', 'add_character_count_column');
add_action('manage_posts_custom_column', 'display_character_count_column', 10, 2);
add_filter('manage_edit-post_sortable_columns', 'character_count_sortable_columns');
add_action('pre_get_posts', 'character_count_orderby');
add_action('save_post', 'save_character_count_meta');

昇順・降順ソートがうまくいかない場合

『下書き』で昇順・降順ソートしようとしたのに「投稿が見つかりませんでした。」や『すべて』でフィルターかけているのに、公開記事しか表示されない場合の手順です。

この原因として、meta_key _character_count に文字数データが正しく保存されていない可能性があります。

下書きを編集してみる

文字数が反映されていない可能性が高いので、試しに下書きをひとつ編集して「上書き保存」してみてください。

その後、投稿一覧>下書き>文字数で昇順・降順ソートしてみて、テストで編集した1記事のみ表示されていたら、下書きの文字数が正しく保存されていないことが確定します。

自動的に全記事の文字数を更新するコード

上で説明した「下書きを編集してみる」で該当記事のみ反映されたら、全記事一括で更新していきます。

functions.php に一時的に追加して、1回だけ実行後、追加した記述を削除してください。

以下のコードを追加して試してみてください。

PHP
$all_posts = get_posts([
    'post_type' => 'post',
    'post_status' => ['publish', 'draft', 'pending', 'future', 'private'],
    'numberposts' => -1,  // すべての投稿を取得
]);

foreach ($all_posts as $post) {
    save_character_count_meta($post->ID);  // 文字数メタデータを再保存
}

キャッシュクリア、強制リロードかけたあとに、以下のようになっていればOK!

降順(文字数が多い順)にしたときの表示

まとめ|記事一覧で文字数をチェックしよう

  • ブログの下書きが溜まりすぎると、どれを仕上げるべきか分かりにくくなる
  • Admin Columnsプラグインで「単語数」を表示できるが、日本語では正確でない場合もある
  • 「文字数」を一覧表示したい場合は、functions.php を編集してカスタマイズ
  • 文字数を確認することで、中途半端な記事やリライトが必要な記事を一目で把握できる!

functions.php を編集する際は、必ずバックアップを取ってから作業してください!

「下書きを整理して、効率よく記事を仕上げたい!」という方は、ぜひこの方法を試してみてください!

では!

↓↓このブログテーマはSWELL↓↓

よかったらシェアしてね!
  • URLをコピーしました!
目次