【WordPress】WP-CLIでダミー投稿をカテゴリごとに自動生成する方法

開発やデザイン確認のために、カスタム投稿タイプへ大量のテストデータを投入したいケースはよくあります。
この記事では、WP-CLIを使って、ダミーカテゴリごとにダミー投稿を10件ずつ追加する方法を紹介します。


この記事でやること

  • カスタム投稿タイプ:sample_post
  • カスタムタクソノミー:sample_category
  • WP-CLIコマンドでカテゴリごとに10件のダミー投稿を追加
  • 本文は自然な日本語ダミーテキスト
  • 投稿日は過去30日以内のランダム
  • --dry-run オプションで確認モードに対応

ファイル構成例

以下の構成で wp-cli/ ディレクトリにカスタムコマンドを配置し、
mu-plugins に読み込み用ファイルを追加します。

wp-content/
├── mu-plugins/
│   └── wp-cli-commands.php  ← WP-CLIコマンド読み込み用
└── wp-cli/
    ├── sample-categories.php  ← カテゴリ同期コマンド(例)
    └── sample-dummy.php       ← ダミーデータ作成コマンド

mu-plugins のエントリーポイント

mu-plugins/wp-cli-commands.php

<?php
// mu-plugins/wp-cli-commands.php

if (defined('WP_CLI') && WP_CLI) {
    require_once WP_CONTENT_DIR . '/wp-cli/sample-categories.php';
    require_once WP_CONTENT_DIR . '/wp-cli/sample-dummy.php';
}

WP-CLIコマンド本体

wp-cli/sample-dummy.php

<?php
// wp-cli/sample-dummy.php

class SampleDummyCommand {

    /**
     * ダミーカテゴリごとに10件の投稿を自動作成
     *
     * ## OPTIONS
     * [--dry-run]
     * : 実際に作成せず、処理内容のみを表示
     *
     * ## EXAMPLES
     *     wp sample-dummy create
     *     wp sample-dummy create --dry-run
     *
     * @when after_wp_load
     */
    public function create($args, $assoc_args) {
        $dry_run = isset($assoc_args['dry-run']);

        // 投稿タイプ・タクソノミー(ダミー)
        $taxonomy = 'sample_category';
        $post_type = 'sample_post';

        // 自然な日本語のダミー本文(複数パターン)
        $dummy_texts = [
            "この投稿はテスト用に作成されたダミーコンテンツです。実際の情報は後日掲載されます。",
            "こちらはシステム動作確認用の記事です。内容は仮のものですのでご注意ください。",
            "この投稿はダミーデータです。正式な情報は準備中です。",
            "レイアウト確認用のダミー記事です。実際のコンテンツとは異なります。",
            "この情報はテスト用に自動生成されています。後ほど更新予定です。"
        ];

        // カテゴリ一覧を取得
        $terms = get_terms(['taxonomy' => $taxonomy, 'hide_empty' => false]);
        if (empty($terms) || is_wp_error($terms)) {
            WP_CLI::error('カテゴリが見つかりません。先にカテゴリを作成してください。');
            return;
        }

        foreach ($terms as $term) {
            WP_CLI::log("カテゴリ: {$term->name} ({$term->slug}) にダミー投稿を10件追加");

            for ($i = 1; $i <= 10; $i++) {
                $title = "{$term->name} テスト投稿 No.{$i}";
                $content = $dummy_texts[array_rand($dummy_texts)];

                // 過去30日以内でランダムな投稿日を生成
                $timestamp = strtotime('-' . rand(0, 30) . ' days');
                $post_date = date('Y-m-d H:i:s', $timestamp);
                $post_date_gmt = get_gmt_from_date($post_date);

                if ($dry_run) {
                    WP_CLI::log("[DRY-RUN] Add Post: {$title} | Date: {$post_date}");
                } else {
                    $post_id = wp_insert_post([
                        'post_title'     => $title,
                        'post_content'   => $content,
                        'post_status'    => 'publish',
                        'post_type'      => $post_type,
                        'post_date'      => $post_date,
                        'post_date_gmt'  => $post_date_gmt,
                    ]);

                    if (!is_wp_error($post_id)) {
                        wp_set_object_terms($post_id, [$term->term_id], $taxonomy);
                        WP_CLI::log("Added: {$title} (ID: {$post_id}) | Date: {$post_date}");
                    } else {
                        WP_CLI::warning("Failed to add post: {$title}");
                    }
                }
            }
        }

        WP_CLI::success($dry_run ? 'Dry-run completed.' : 'ダミーデータの追加が完了しました。');
    }
}

WP_CLI::add_command('sample-dummy', 'SampleDummyCommand');

実行例

シミュレーション(投稿は追加しない)

wp sample-dummy create --dry-run

本番実行(カテゴリごとに10件)

wp sample-dummy create

まとめ

  • WP-CLIを活用すれば、開発用ダミーデータを一括作成できる
  • 投稿本文は自然な日本語で複数パターンをランダムに適用
  • 投稿日をランダム化して、ソートや一覧表示の確認に最適

コメント

タイトルとURLをコピーしました