BLOG

ブログ
  • Web制作

WordPress アイキャッチ画像をCSVで一括登録する方法

WordPress アイキャッチ画像をCSVで一括登録する方法

WordPressの記事やカスタム投稿をCSVで一括登録する時に、アイキャッチもまとめて登録するのはなかなか難しいです。
この記事では、「WordPress アイキャッチ画像をCSVで一括登録する方法」をまとめます。

メディアライブラリに画像を一括登録

まずはメディアライブラリにアイキャッチとして使いたい画像をドラッグ & ドロップして一括登録します。

登録した画像のIDを取得

メディアIDをCSVで出力する仕組みを作る

functions.php に下記のコードを追加して、
メディアIDを一覧でCSV出力するメニューを作ります。

functions.php に追加するコード

<?php
// 1) ツールメニューにボタンを出す(ここでは出力しない)
add_action('admin_menu', function () {
    add_submenu_page(
        'tools.php',
        'メディアCSV出力',
        'メディアCSV出力',
        'manage_options',
        'export-media-csv',
        function () {
            echo '<div class="wrap"><h1>メディアCSV出力</h1>';
            echo '<p>「CSVをダウンロード」を押すと、メディアのID一覧をCSVで出力します。</p>';
            echo '<form method="post" action="' . esc_url(admin_url('admin-post.php')) . '">';
            wp_nonce_field('export_media_csv');
            echo '<input type="hidden" name="action" value="export_media_csv">';
            submit_button('CSVをダウンロード');
            echo '</form></div>';
        }
    );
});

// 2) ここで初めてCSVを生成(admin-postが実行される時点ではまだHTML出力が始まっていない)
add_action('admin_post_export_media_csv', function () {
    if (!current_user_can('manage_options')) {
        wp_die('Permission denied.');
    }
    check_admin_referer('export_media_csv');

    // 余計なバッファをすべて破棄(万一どこかで出力が始まっていても消す)
    while (ob_get_level() > 0) { ob_end_clean(); }

    ignore_user_abort(true);
    nocache_headers();

    $filename = 'media-list-' . date('Ymd-His') . '.csv';
    header('Content-Type: text/csv; charset=UTF-8');
    header('Content-Disposition: attachment; filename="' . $filename . '"');

    $out = fopen('php://output', 'w');

    // Excel対策のUTF-8 BOM(不要なら削除可)
    fprintf($out, chr(0xEF) . chr(0xBB) . chr(0xBF));

    // 見出し
    fputcsv($out, ['ID', 'タイトル', 'URL', 'MIME', 'アップロード日時']);

    // 大量サイトでも安全なページング処理
    $paged = 1;
    $ppp   = 500;

    do {
        $q = new WP_Query([
            'post_type'      => 'attachment',
            'post_status'    => 'inherit',
            'posts_per_page' => $ppp,
            'paged'          => $paged,
            'fields'         => 'all',
            'orderby'        => 'ID',
            'order'          => 'ASC',
        ]);

        foreach ($q->posts as $p) {
            fputcsv($out, [
                $p->ID,
                $p->post_title,
                wp_get_attachment_url($p->ID),
                get_post_mime_type($p),
                get_the_date('Y-m-d H:i:s', $p),
            ]);
        }

        $paged++;
        wp_reset_postdata();
    } while ($q->max_num_pages >= $paged);

    fclose($out);
    exit;
});

このコードでやっていること

・管理画面 「ツール」メニューの配下に「メディアCSV出力」 を追加

ボタンを押したときに
・サイト内の すべてのメディア(attachmentポスト) を順に取得
・以下の項目を1行ずつCSVに書き出し
 ・ID
 ・タイトル
 ・URL(wp_get_attachment_url())
 ・MIMEタイプ
 ・アップロード日時

500件ずつページングしているので、メディア数が多いサイトでも安全に出力できます。

管理画面からメディアCSVを出力する

functions.phpを保存して管理画面を再読み込みすると、

ツール → メディアCSV出力

というメニューが増えているはずです。

管理画面で「ツール → メディアCSV出力」をクリック

「CSVをダウンロード」ボタンを押す

media-list-YYYYmmdd-His.csv のようなファイルがダウンロードされます。

このCSVには

  • ID
  • タイトル
  • URL
  • MIME
  • アップロード日時

が入っています。

このうち、アイキャッチ設定時に特に使うのは「ID」 です。

インポートするCSVファイルに落とし込む

次に、Really Simple CSV Importerで読み込む用のCSV を作ります。

以前は csvの post_thumbnail にアイキャッチ画像のURLを入れてインポートすれば良かったようですが、今は _thumbnail_id にアイキャッチ画像のIDを入れる必要があります。

CSV整形のイメージ

エクセル / スプレッドシートで、最終的にこんな形のCSVを作ります。

  • _thumbnail_id の値には、
    先ほど出力した「メディアCSV」の ID 列をコピペ します
  • 投稿タイトルや本文などもここでまとめて用意しておくと、
    1回のインポートで記事もアイキャッチも一気に登録できます

Really Simple CSV Importer でCSVインポート

CSVが用意できたら、いよいよインポートです。

  1. プラグイン「Really Simple CSV Importer」をインストール&有効化
  2. 管理画面の「ツール → インポート」へ
  3. 一覧の中から 「CSV (Really Simple CSV Importer)」 を選択
  4. 先ほど作ったCSVをアップロードして実行

CSVの列名に従って、投稿が作成されます。
このとき _thumbnail_id にIDが入っていれば、
その画像がアイキャッチ(サムネイル)として自動的に設定されます。

まとめ:手作業地獄から解放されるワークフロー

おさらいです。

  1. 画像を一括でメディアにアップロード
  2. functions.php のコードで
    「ツール → メディアCSV出力」から メディア一覧CSVをダウンロード
  3. そのCSVのID列を使って、
    _thumbnail_id 列を含む 投稿用CSVを整形
  4. Really Simple CSV Importer で投稿+アイキャッチを一括インポート

アイキャッチを1件ずつポチポチ設定するのに比べると、
桁違いに楽になるワークフローです。