テーマで変わる画像の切り抜きサイズ|既存の画像には自動で作られない点と確かめ方
WordPressに画像をアップロードすると、元の画像のほかに、決まった大きさの縮小版(切り抜きサイズ)がいくつも作られます。そのうちの一部は、テーマやプラグインが登録したサイズです。テーマを変えると、新しいテーマのサイズが必要になりますが、すでにアップロードした画像には、新しいサイズは自動では作られません。この記事では、メディアライブラリの画像にどのサイズが作られているかをREST APIで数える方法と、筆者のサイトの結果、テーマを変える時に確かめることを紹介します。
(確認:筆者のWordPressサイト(WordPress 7.1.3・テーマはLightningの子テーマ)で、2026年10月21日に実行。取得は読み取りだけで、画像の再生成などはしていません)
切り抜きサイズは、誰が決めているか
| サイズの名前 | 登録する側 | 根拠 |
|---|---|---|
| thumbnail・medium・medium_large・large | WordPress本体(大きさは管理画面の「メディア設定」などで決まる) | 公式リファレンス(add_image_size)の予約済みの名前 |
| 1536x1536・2048x2048 | WordPress本体(5.3で追加) | WordPress 5.3の開発者向けの告知 |
| post-thumbnail | テーマ(アイキャッチの標準のサイズ) | 予約済みの名前。Lightningのソースでは set_post_thumbnail_size( 320, 180, true ) |
| woocommerce_~ | WooCommerce(プラグイン) | 名前から判断 |
| mailpoet_newsletter_max | MailPoet(プラグイン) | 名前から判断 |
テーマは、add_image_size() で独自のサイズを追加したり、set_post_thumbnail_size() でアイキャッチの大きさを決めたりします。Lightningの post-thumbnail は、GitHubで公開されているソース(2026年10月21日に確認した最新版)で、幅320・高さ180の切り抜きです。
コード
# メディアライブラリの画像に、どの切り抜きサイズが作られているかを数える(読み取りのみ)。
# 画像ごとの media_details.sizes の名前と寸法を集計し、アップロードの月ごとに並べる。
import os, json, base64, urllib.request
from collections import Counter, defaultdict
SITE = os.environ["WP_SITE"].rstrip("/")
AUTH = "Basic " + base64.b64encode(f'{os.environ["WP_USER"]}:{os.environ["WP_APP_PASSWORD"]}'.encode()).decode()
def get(path):
req = urllib.request.Request(SITE + path, headers={"Authorization": AUTH})
with urllib.request.urlopen(req, timeout=60) as r:
return json.load(r), r.headers
items, page = [], 1
while True:
batch, h = get(f"/wp-json/wp/v2/media?media_type=image&per_page=100&page={page}&_fields=id,date,media_details")
items += batch
if page >= int(h["X-WP-TotalPages"]):
break
page += 1
sizes = Counter()
dims = defaultdict(Counter)
by_month = defaultdict(Counter)
for m in items:
md = m.get("media_details") or {}
for name, s in (md.get("sizes") or {}).items():
sizes[name] += 1
dims[name][f'{s["width"]}x{s["height"]}'] += 1
by_month[m["date"][:7]][name] += 1
print("画像の数:", len(items))
for name, c in sizes.most_common():
top = ", ".join(f"{d}({n})" for d, n in dims[name].most_common(2))
print(f" {name}: {c} 枚 寸法の例 {top}")
print("月ごと(その月の画像に作られたサイズの種類)")
for ym in sorted(by_month)[-6:]:
print(" ", ym, sorted(by_month[ym]))
メディアは、管理者でなくても公開されている画像なら読めますが、このコードは自分のサイトの全画像を数えるため、アプリケーションパスワードで認証しています。認証情報は環境変数に入れ、コードには書きません。
筆者のサイトの結果
画像の数: 364
medium: 364 枚 寸法の例 300x167(196), 300x158(96)
thumbnail: 364 枚 寸法の例 150x150(364)
post-thumbnail: 364 枚 寸法の例 320x180(364)
woocommerce_thumbnail: 364 枚 寸法の例 300x300(364)
woocommerce_gallery_thumbnail: 364 枚 寸法の例 100x100(364)
full: 364 枚 寸法の例 1696x944(190), 1200x630(93)
medium_large: 363 枚 寸法の例 768x427(190), 768x403(97)
woocommerce_single: 363 枚 寸法の例 600x334(191), 600x315(97)
large: 355 枚 寸法の例 1024x570(191), 1024x538(94)
mailpoet_newsletter_max: 234 枚 寸法の例 1320x735(191), 1320x720(4)
1536x1536: 216 枚 寸法の例 1536x855(190), 1536x857(5)
2048x2048: 8 枚 寸法の例 2048x1117(4), 2048x1143(3)
site_icon-270: 1 枚 寸法の例 270x270(1)
site_icon-192: 1 枚 寸法の例 192x192(1)
site_icon-180: 1 枚 寸法の例 180x180(1)
site_icon-32: 1 枚 寸法の例 32x32(1)
月ごと(その月の画像に作られたサイズの種類)
2026-05 ['1536x1536', 'full', 'large', 'mailpoet_newsletter_max', 'medium', 'medium_large', 'post-thumbnail', 'thumbnail', 'woocommerce_gallery_thumbnail', 'woocommerce_single', 'woocommerce_thumbnail']
2026-06 ['1536x1536', '2048x2048', 'full', 'large', 'mailpoet_newsletter_max', 'medium', 'medium_large', 'post-thumbnail', 'thumbnail', 'woocommerce_gallery_thumbnail', 'woocommerce_single', 'woocommerce_thumbnail']
2026-07 ['1536x1536', 'full', 'large', 'mailpoet_newsletter_max', 'medium', 'medium_large', 'post-thumbnail', 'site_icon-180', 'site_icon-192', 'site_icon-270', 'site_icon-32', 'thumbnail', 'woocommerce_gallery_thumbnail', 'woocommerce_single', 'woocommerce_thumbnail']
2026-08 ['1536x1536', 'full', 'large', 'mailpoet_newsletter_max', 'medium', 'medium_large', 'post-thumbnail', 'thumbnail', 'woocommerce_gallery_thumbnail', 'woocommerce_single', 'woocommerce_thumbnail']
2026-09 ['1536x1536', 'full', 'large', 'mailpoet_newsletter_max', 'medium', 'medium_large', 'post-thumbnail', 'thumbnail', 'woocommerce_gallery_thumbnail', 'woocommerce_single', 'woocommerce_thumbnail']
2026-10 ['1536x1536', 'full', 'large', 'mailpoet_newsletter_max', 'medium', 'medium_large', 'post-thumbnail', 'thumbnail', 'woocommerce_gallery_thumbnail', 'woocommerce_single', 'woocommerce_thumbnail']
読み取れることは、次の3つです。
- post-thumbnail(320×180)は364枚すべてにある:今のテーマ(Lightning)のアイキャッチのサイズが、全画像に作られている
- 大きいサイズは、元の画像が大きい時だけ作られる:元の画像が1200×630の画像(93枚)より大きいサイズ(1320幅のmailpoet、1536幅)は、全体の数より少ない。WordPressは元の画像より大きい縮小版は作らない、という動きと合う
- 2048x2048は8枚だけ:元の画像が2048より大きいものが少ないため
月ごとの一覧では、2026年5月以降のどの月にも、テーマ・WordPress本体・プラグインの主なサイズが作られていました(2026年6月の2048x2048と、7月の site_icon は、その月の画像の大きさや用途によるものです)。
テーマを変えると、何が起きるか
新しいテーマが、今と違う大きさの post-thumbnail や独自のサイズを使う場合、すでにある画像には、そのサイズの縮小版がありません。WordPress本体の image_downsize() のコードでは、指定したサイズの縮小版が見つからない時、元の画像の大きさを使う作りになっています。つまり、一覧のサムネイルなどに、大きな元の画像が縮めて表示される場合があり、ページが重くなったり、切り抜きの形が揃わなかったりします。
既存の画像に新しいサイズを作るには、縮小版を作り直す(再生成する)必要があります。方法は、WordPress公式のコマンドラインツール(WP-CLI)の wp media regenerate か、プラグイン「Regenerate Thumbnails」です。このプラグインの説明には、新しいサイズが追加され、過去のアップロードにもそのサイズを作りたい場合に使う、と書かれています(WordPress.orgの表示では、最終更新が1年前・検証済みは6.8.11。2026年10月21日に確認)。再生成はサーバーに画像のファイルを書き込む作業なので、実行する前にバックアップを取ってください。
テーマを変える前に確かめること
- 今の画像に作られているサイズ(この記事のコードで数える)
- 新しいテーマのアイキャッチの大きさと、独自のサイズの名前(テーマの説明書か、テーマの
functions.phpのadd_image_sizeとset_post_thumbnail_size) - 画像の枚数と、再生成にかかる時間・サーバーの容量(縮小版の分だけファイルが増える)
有料テーマ3つの違いは有料WordPressテーマの選び方に、変える前の記録の取り方はテーマを変える前に今のサイトの状態を記録する方法に、サーバーの容量の見積もりはWordPressのサーバー容量はどれだけ必要かにまとめています。
この記事で確かめていないこと
- 筆者のサイトにインストールされているLightningの版(15.33.1)のソースで、post-thumbnail が同じ値か(確かめたのはGitHubの最新版。結果の320×180とは一致)
- LIQUID PRESS・Emanon・SWALLOWが登録する画像サイズ(購入していないため)
- 再生成にかかる時間(実行していません)
まとめ
- 切り抜きサイズには、WordPress本体・テーマ・プラグインが登録したものが混ざっている
- テーマを変えても、既存の画像に新しいサイズは自動で作られない。作り直すには、WP-CLIかプラグインで再生成する
- 筆者のサイトの364枚では、テーマのサイズ(320×180)は全画像にあり、大きいサイズは元の画像が大きい時だけ作られていた
本記事は読み取りの方法の説明です。画像の再生成やテーマの変更は含みません。


