カスタムヘッダー画像に非対応のテーマに「ヘッダー」メニューを組み込む
WordPressで選べるテーマの多くはヘッダー画像をアップロードして切り替えられる「カスタムヘッダー」に対応していますが、対応しておらず「ヘッダー」メニューが使えないテーマもあります。
この場合の対策は、
- カスタムヘッダー対応のテーマに切り替える
- このテーマをカスタムヘッダー対応にする
のいずれかです。
慣れていない方はカスタムヘッダー対応のテーマに切り替えた方が無難だと思いますが、どうしても使用中のテーマをカスタムヘッダーに対応させたいこともあるでしょうから、使用中のテーマをカスタムヘッダー対応にする手順を紹介します。
「外観」-「ヘッダー」メニューを使用可能にする(functions.phpの修正)
まずは、「外観」-「ヘッダー」メニューを使用可能にするために、次のコードをfunctions.php(できれば子テーマですが親テーマでも可)に入力してみましょう。
// カスタムヘッダーを追加する(幅950px、高さ250px) $defaults = array( 'default-image' => '', 'random-default' => false, 'width' => 950, 'height' => 250, 'flex-height' => false, 'flex-width' => false, 'default-text-color' => '', 'header-text' => true, 'uploads' => true, ); add_theme_support( 'custom-header', $defaults );
(WordPress Codex日本語:関数リファレンス/add_theme_supportより一部加工して引用)
これで、「外観」-「ヘッダー」メニューが使用可能になります。
「ヘッダー」メニューから画像をアップロードするとプレビューに表示されます。
ヘッダー画像をサイトに表示(header.phpの修正)
このヘッダー画像をサイトに表示するにはテンプレートファイルを修正する必要があります。header.phpにコードを追加するのが一般的です。
最低限、次のコードを追加すればヘッダー画像が表示されます。header_imageはヘッダー画像のURLを返す関数です。
<img src="<?php header_image(); ?>">
これだけでサイトにヘッダー画像は表示されますが、実用的ではないので少し加工します。
<?php if(is_front_page() || is_home()) : ?> <?php if ( get_header_image() ) : ?> <a href="<?php echo esc_url( home_url( '/' ) ); ?>"> <img src="<?php header_image(); ?>" class="header-image" alt="<?php bloginfo( 'name' ); ?>" /></a> <?php endif; ?> <?php endif ?>
コードの内容は、
- 1行目:フロントページ(is_front_page)または投稿トップ(is_home)のみでヘッダー画像を表示するように条件を組み立てています。
- 2行目:ヘッダー画像が存在するかどうかget_header_imageで調べています。存在する場合のみにimgタグを表示するためです。
- 3行目:表示する画像にトップページ(home_url)へのリンクを追加しています。
- 4行目:header_imageで画像のURLを出力して、この画像にheader-imageというclass名を付加しています。
- 5行目:画像のalt属性にサイト名(bloginfo( 'name' ))を設定しています。
テーマによって異なるので具体的にheader.phpの「どこに」追加するのかは書きませんが、header.phpでbodyタグから後の任意の場所に入力してみて、表示結果を見て調整してください。
表示結果は次のようになります。
ヘッダー画像のスタイル設定
ヘッダー画像のスタイル設定は必須ではありませんが、次のようなCSSをstyle.cssに入力しておくとスマホなどでの表示に役立ちます。
/* ヘッダー画像の最大サイズを画面幅に */ img.header-image { max-width: 100%; height: auto; }
「max-width: 100%;」で画像の最大幅を画面いっぱいに制限することで、スマホなどの画面幅が狭い端末では画像が縮小されます。