テーマで変わる画像の切り抜きサイズ|既存の画像には自動で作られない点と確かめ方

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)は全画像にあり、大きいサイズは元の画像が大きい時だけ作られていた

本記事は読み取りの方法の説明です。画像の再生成やテーマの変更は含みません。