2026年5月20日
2026年5月20日
WordPressのヘッダー画像が表示されないときの確認手順と直し方
WordPress のヘッダー画像が表示されないときは、原因がどこにあるかを順に切り分けると早く片づきます。確認する順番は次のとおりです。
- 使っているテーマがヘッダー画像の機能(
custom-header)に対応しているか - ヘッダー画像の設定が今のテーマに保存されているか
- テンプレートが画像を出力しているか
- 画像の URL が開けるか、CSS で隠れていないか
- キャッシュに古いページが残っていないか
この記事の内容は WordPress 6.9 のソースコードで確認しています(2026年10月時点)。
症状から見当をつける
| 症状 | 疑う場所 |
|---|---|
| 「外観」に「ヘッダー」がなく、カスタマイザーにも「ヘッダー画像」がない | テーマが custom-header に対応していない、またはブロックテーマ |
| 画像を選んで公開したのに、サイトに何も出ない | テンプレートが画像を出力していない、CSS で隠れている |
| 子テーマに切り替えたら画像が消えた | 設定がテーマごとに保存されている |
| 画像の枠だけ出て中身が表示されない | 画像の URL が 404、または http と https が混在している |
| 自分の画面では新しい画像なのに、ほかの人には古い画像が見える | ページキャッシュや CDN のキャッシュ |
1. テーマが custom-header に対応しているか確かめる
ヘッダー画像の設定画面は、テーマが add_theme_support( 'custom-header' ) で機能を宣言しているときだけ表示されます。対応していれば、「外観」→「ヘッダー」か「外観」→「カスタマイズ」→「ヘッダー画像」(動画にも対応したテーマでは「ヘッダーメディア」)から設定できます。
WP-CLI が使える場合は、次のコマンドで対応の有無がわかります。
wp eval 'var_dump( current_theme_supports( "custom-header" ) );'
bool(false) なら、そのテーマにはヘッダー画像の機能がありません。対処は次のどちらかです。
- ブロックテーマ(Twenty Twenty-Two 以降の標準テーマなど)の場合: ヘッダーはサイトエディターで編集します。「外観」→「エディター」でヘッダーのテンプレートパーツを開き、画像ブロックやカバーブロックを置きます。カスタマイザーのヘッダー画像は使いません。
- クラシックテーマで機能がない場合: テーマ独自の設定画面にヘッダー画像の項目がないか確認します。自作テーマや子テーマで機能を足すなら、
functions.phpで宣言します。
<?php
// functions.php(クラシックテーマ)
add_action( 'after_setup_theme', function () {
add_theme_support(
'custom-header',
array(
'width' => 1920,
'height' => 400,
'flex-width' => true,
'flex-height' => true,
'header-text' => false,
)
);
} );
width と height は推奨サイズで、カスタマイザーで画像を選ぶときの切り抜きの基準になります。flex-width と flex-height を true にすると、その方向は推奨サイズと違う画像も受け付けます。宣言しただけでは画像は表示されないので、手順3のテンプレートの出力も必要です。
2. ヘッダー画像の設定値を確かめる
画像を選んだはずなのに表示されない場合は、保存されている値を見ます。
wp theme mod get header_image
| 値 | 意味 |
|---|---|
| 画像の URL | 設定は保存されている。手順3以降へ |
remove-header |
「画像を非表示」が選ばれている。カスタマイザーで画像を選び直して公開する |
| 何も出ない | 今のテーマには設定がない |
ヘッダー画像の設定は、テーマごとに theme_mods_テーマのフォルダー名 というオプションに保存されます。そのため、親テーマから子テーマに切り替えた直後や、別のテーマに切り替えた後は、前のテーマで選んだ画像は引き継がれません。今のテーマでカスタマイザーを開き、画像を選び直して「公開」を押してください。
3. テンプレートが画像を出力しているか確かめる
クラシックテーマでは、ヘッダー画像を表示するコードが header.php などのテンプレートに必要です。テーマ(子テーマの場合は子テーマ側にコピーした header.php を含む)に、次のような出力があるか確かめます。
画像タグとして出力するなら、the_header_image_tag() が手軽です。width・height・alt と、使える場合は srcset も付いた img タグを出力します。
<?php if ( has_header_image() ) : ?>
<div class="site-header-image">
<?php the_header_image_tag(); ?>
</div>
<?php endif; ?>
URL だけが必要な場合は、関数の違いに注意します。
| 関数 | 動き |
|---|---|
header_image() |
URL をエスケープして出力する。戻り値はない |
get_header_image() |
URL を返す。非表示のときは false、設定がないときは空文字 |
has_header_image() |
ヘッダー画像があるかを真偽値で返す |
テンプレートの中で直接出力するなら header_image() を使います。
<?php if ( has_header_image() ) : ?>
<div class="site-hero" style="background-image: url('<?php header_image(); ?>');"></div>
<?php endif; ?>
PHP の変数に入れて使う場合は get_header_image() を使い、出力するときに esc_url() を通します。esc_url( header_image() ) と書くと、header_image() がその場で URL を出力してしまい、esc_url() には何も渡らないため、意図した場所に URL が入りません。
<?php
// functions.php:背景画像として CSS に書き出す例
add_action( 'wp_head', function () {
if ( ! has_header_image() ) {
return;
}
printf(
'<style>.site-hero{background-image:url("%s");}</style>' . "\n",
esc_url( get_header_image() )
);
} );
背景画像として表示する場合、要素に高さがないと画像は見えません。.site-hero に min-height などを指定してください。
4. 画像の URL と CSS を確かめる
手順2で取り出した URL をブラウザーで直接開きます。
- 404 になる: メディアライブラリから画像を削除した、サイトを移転して古いドメインの URL が残っている、などが考えられます。画像を選び直すのが簡単です。移転でまとめて URL が古いままなら、シリアライズされた値も正しく置き換えられる
wp search-replaceを使います。先に--dry-runで件数を確かめてから実行し、作業前にデータベースのバックアップを取ってください。
wp search-replace 'http://old.example.com' 'https://www.example.com' --dry-run
- 画像は開けるがページに出ない: ブラウザーの開発者ツールで、ヘッダー部分の要素を選びます。
display: noneや高さ 0 になっていないか、コンソールに混在コンテンツ(https のページで http の画像を読み込む)の警告が出ていないかを見ます。
5. キャッシュを消して確認する
設定を変えても古い画像が見える場合は、キャッシュが残っています。消す順番は次のとおりです。
- ブラウザー: シークレットウィンドウで開き直すと、ブラウザーのキャッシュの影響を除けます
- ページキャッシュのプラグイン: 使っているプラグインの管理画面や管理バーにある、キャッシュを削除する機能を使います
- サーバーや CDN のキャッシュ: レンタルサーバーのキャッシュ機能や CDN を使っている場合は、その管理画面から削除します
- オブジェクトキャッシュ: Redis や Memcached を使っている場合は、WP-CLI で削除できます
wp cache flush
wp cache flush はオブジェクトキャッシュを空にするコマンドで、ページキャッシュのプラグインが作った HTML のキャッシュは消えません。--hard のようなオプションはないので、ページキャッシュはプラグインの機能で消してください。
子テーマでヘッダー画像の設定を変える
親テーマが決めた推奨サイズなどを子テーマで変えたいときは、add_theme_support( 'custom-header' ) の動きに注意が必要です。同じ機能を2回宣言した場合、WordPress は先に登録された値を優先します。さらに width・height・header-text・default-image・default-text-color は、最初に登録されたときの値が定数(HEADER_IMAGE_HEIGHT など)に固定されます。そのため、親テーマより後(after_setup_theme の優先度11など)で宣言し直しても、いったん remove_theme_support() で外してから登録し直しても、親テーマの高さや幅は変わりません。
子テーマの値を使わせるには、親テーマより先に登録します。子テーマで指定しなかった項目は、後から登録される親テーマの値で補われます。
<?php
// 子テーマの functions.php
add_action( 'after_setup_theme', function () {
add_theme_support(
'custom-header',
array(
'default-image' => get_stylesheet_directory_uri() . '/images/header-default.jpg',
'height' => 600,
'flex-height' => true,
)
);
}, 9 ); // 親テーマ(優先度10で登録している場合)より先に実行する
この例では、高さは子テーマの 600、幅などの指定しなかった項目は親テーマの値になります。親テーマがどこで登録しているかは、親テーマのファイルで add_theme_support( 'custom-header' を検索して確かめます。
after_setup_themeに優先度を指定せずに登録している(優先度10)場合は、上の例の 9 で先に登録できます- 優先度が 9 以下の場合は、子テーマ側をそれより小さい数にします
- フックを使わずに
functions.phpの中で直接登録している場合は、子テーマ側もfunctions.phpの中で直接add_theme_support()を書きます。子テーマのfunctions.phpは親テーマのfunctions.phpより先に読み込まれるためです
default-image に指定した画像は、ヘッダー画像をまだ一度も選んでいないテーマで表示されます。手順2で remove-header になっている場合は表示されません。
まとめ
- まず
current_theme_supports( 'custom-header' )でテーマの対応を確かめる。ブロックテーマはサイトエディターでヘッダーを編集する wp theme mod get header_imageで設定値を見る。設定はテーマごとなので、子テーマに切り替えたら選び直す- テンプレートでは
the_header_image_tag()かheader_image()で出力する。変数に入れるときはget_header_image()とesc_url()を使う - 画像の URL を直接開き、404・CSS・混在コンテンツを確かめる
wp cache flushはオブジェクトキャッシュだけを消す。ページキャッシュはプラグインや CDN の機能で消す