WordPressの記事やカスタム投稿をCSVで一括登録する時に、アイキャッチもまとめて登録するのはなかなか難しいです。
この記事では、「WordPress アイキャッチ画像をCSVで一括登録する方法」をまとめます。
結論から言うと、メディアライブラリに画像を一括アップロードし、その画像のIDを取得して、インポート用CSVの_thumbnail_id列に入れることで、投稿とアイキャッチをまとめて登録できます。以前はURLを使う方法もありましたが、現在はID指定が必要です。順番に見ていきましょう。
目次
まずはメディアライブラリにアイキャッチとして使いたい画像をドラッグ & ドロップして一括登録します。

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件ずつページングしているので、メディア数が多いサイトでも安全に出力できます。
functions.phpを保存して管理画面を再読み込みすると、
ツール → メディアCSV出力
というメニューが増えているはずです。
管理画面で「ツール → メディアCSV出力」をクリック
↓
「CSVをダウンロード」ボタンを押す
↓
media-list-YYYYmmdd-His.csv のようなファイルがダウンロードされます。

このCSVには
が入っています。
このうち、アイキャッチ設定時に特に使うのは「ID」 です。
次に、Really Simple CSV Importerで読み込む用のCSV を作ります。
以前は csvの post_thumbnail にアイキャッチ画像のURLを入れてインポートすれば良かったようですが、今は _thumbnail_id にアイキャッチ画像のIDを入れる必要があります。
エクセル / スプレッドシートで、最終的にこんな形のCSVを作ります。

_thumbnail_id の値には、CSVが用意できたら、いよいよインポートです。
CSVの列名に従って、投稿が作成されます。
このとき _thumbnail_id にIDが入っていれば、
その画像がアイキャッチ(サムネイル)として自動的に設定されます。
おさらいです。
functions.php のコードで_thumbnail_id 列を含む 投稿用CSVを整形アイキャッチを1件ずつポチポチ設定するのに比べると、
桁違いに楽になるワークフローです。