WordPressでオリジナルテーマを開発する際、避けては通れないのが「共通パーツの共通化」です。
その中核を担うのがget_header()およびget_footer()という2つの関数です。
これらの関数を正しく理解し、使いこなすことで、保守性の高い効率的なテーマ制作が可能になります。
本記事では、WordPress初心者の方から、より高度なテンプレート設計を目指す中級者の方に向けて、get_headerとget_footerの基本的な使い方から、複数のテンプレートを使い分ける応用テクニックまで詳しく解説します。
2026年現在のモダンな開発手法も踏まえ、実践的なコード例とともに見ていきましょう。
get_header()とget_footer()の役割とは
WordPressのテーマは、通常複数のテンプレートファイル(index.php、single.php、page.phpなど)で構成されています。
しかし、サイトのヘッダー部分やフッター部分は、どのページでも共通のデザインであることが一般的です。
もし、すべてのファイルに直接HTMLのヘッダー記述を書いてしまうと、メニュー項目を一つ変更するだけで全ファイルを修正しなければならなくなり、管理が非常に煩雑になります。
そこで、「ヘッダー部分だけを別ファイル(header.php)に切り出し、それを各ページで呼び出す」という仕組みが採用されています。
この呼び出しを行うための専用関数がget_header()であり、フッター版がget_footer()です。
なぜ include ではなく get_header なのか
PHP標準のincludeやrequireでもファイルを読み込むことは可能ですが、WordPress専用の関数を使うことには大きなメリットがあります。
| 機能 | PHPのinclude | get_header / get_footer |
|---|---|---|
| ファイルパスの解決 | 絶対パスや相対パスの指定が必要 | 自動的にテーマディレクトリ内を探す |
| 子テーマ対応 | 親テーマのファイルしか読み込めない | 子テーマがあれば自動で優先する |
| アクションフック | 実行前後にフックを挟めない | get_headerフックなどが実行される |
特に子テーマでのカスタマイズを容易にする点において、これらの関数を使用することはWordPress開発における鉄則といえます。
基本的な使い方とテンプレートファイルの構成
まずは、最もシンプルな構成での使い方を確認しましょう。
標準的なテーマでは、テーマフォルダの直下にheader.phpとfooter.phpを作成します。
1. header.php の作成
ヘッダーファイルには、HTMLの<!DOCTYPE html>から始まり、<head>タグ、そしてサイト共通のナビゲーションメニューなどを含めます。
<!DOCTYPE html>
<html <?php language_attributes(); ?>>
<head>
<meta charset="<?php bloginfo( 'charset' ); ?>">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<?php wp_head(); // プラグインやWordPressシステムがコードを挿入するために必須 ?>
</head>
<body <?php body_class(); ?>>
<header id="site-header">
<h1><?php bloginfo( 'name' ); ?></h1>
<nav>
<?php wp_nav_menu( array( 'theme_location' => 'main-menu' ) ); ?>
</nav>
</header>
2. footer.php の作成
フッターファイルには、コピーライト表記や終了タグを含めます。
<footer id="site-footer">
<p>© <?php echo date( 'Y' ); ?> <?php bloginfo( 'name' ); ?></p>
</footer>
<?php wp_footer(); // スクリプトの読み込みなどに必須。</body>の直前に記述 ?>
</body>
</html>
3. index.php などで呼び出す
作成したパーツを、メインのテンプレートファイルから呼び出します。
<?php get_header(); // header.phpを読み込む ?>
<main>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<article>
<h2><?php the_title(); ?></h2>
<div><?php the_content(); ?></div>
</article>
<?php endwhile; endif; ?>
</main>
<?php get_footer(); // footer.phpを読み込む ?>
ブラウザで表示される際は、これら3つのファイルが結合され、一つの完全なHTMLとして出力されます。
<!DOCTYPE html>
<html>
<head>...(wp_headの内容)...</head>
<body class="...">
<header>...</header>
<main>...</main>
<footer>...</footer>
...(wp_footerの内容)...
</body>
</html>
複数のヘッダー・フッターを使い分ける方法
サイトによっては、「トップページだけ特別な巨大なヘッダーにしたい」「ランディングページ(LP)ではナビゲーションを消した専用のヘッダーを使いたい」といった要望があります。
このような場合に便利なのが、引数(パラメータ)を指定して特定のテンプレートを読み込む機能です。
ファイルの命名ルール
特定の名前を付けたヘッダー・フッターを作成する場合、ファイル名は以下のようにルール化されています。
header-{name}.phpfooter-{name}.php
例えば、LP用のヘッダーならheader-lp.phpというファイルを作成します。
呼び出し側のコード
引数に{name}の部分の文字列を渡すだけで、WordPressが自動的に対象のファイルを探しに行きます。
<?php
if ( is_front_page() ) {
// フロントページの場合は header-home.php を読み込む
get_header( 'home' );
} elseif ( is_page( 'lp' ) ) {
// LPページの場合は header-lp.php を読み込む
get_header( 'lp' );
} else {
// それ以外は通常の header.php を読み込む
get_header();
}
?>
フッターも同様に、get_footer( 'mini' ); と記述すれば footer-mini.php が読み込まれます。
優先順位の仕組み
get_header( 'lp' ) を呼び出した際、WordPressは以下の順序でファイルを探します。
- 子テーマ内の
header-lp.php - 親テーマ内の
header-lp.php - 子テーマ内の
header.php - 親テーマ内の
header.php
この仕組みがあるため、特定のファイルが見つからなくても、最終的にはデフォルトの header.php が読み込まれるようになっており、エラーで画面が真っ白になるリスクを軽減しています。
パラメータを用いたデータ受け渡し(WordPress 5.5以降)
長年、get_header() などのテンプレート読み込み関数では、外部から変数を直接渡すことができませんでした。
しかし、WordPress 5.5以降、第2引数として $args 配列を渡せるようになっています。
これにより、グローバル変数を使わずに、呼び出し元からヘッダー内へデータを送ることが可能になりました。
データの渡し方(呼び出し側)
<?php
$header_meta = array(
'page_title' => '特別キャンペーンページ',
'show_banner' => true,
'theme_color' => 'red'
);
// 第2引数に配列を渡す
get_header( 'campaign', $header_meta );
?>
データの受け取り方(header-campaign.php側)
渡されたデータは $args という変数名で自動的に展開されます。
<?php
// 渡された値を確認し、デフォルト値を設定することも可能
$title = isset( $args['page_title'] ) ? $args['page_title'] : get_bloginfo( 'name' );
$color = isset( $args['theme_color'] ) ? $args['theme_color'] : 'blue';
?>
<header style="background-color: <?php echo esc_attr( $color ); ?>;">
<h1><?php echo esc_html( $title ); ?></h1>
<?php if ( ! empty( $args['show_banner'] ) ) : ?>
<div class="banner">今だけ50%OFF!</div>
<?php endif; ?>
</header>
この機能により、「ファイルは同じだが、ページによって一部の表示内容(フラグなど)だけを変えたい」といった処理が非常にスマートに記述できるようになりました。
get_header / get_footer使用時の注意点とベストプラクティス
これら2つの関数を使用する上で、絶対に守らなければならないルールや、制作をスムーズにするためのヒントがいくつかあります。
1. wp_head() と wp_footer() を絶対に忘れない
これは最も重要な注意点です。
get_header()で読み込むファイルの中には必ずwp_head();を、get_footer()で読み込むファイルの中には必ずwp_footer();を含めてください。
これらは「アクションフック」と呼ばれ、多くのプラグインやWordPress本体が、CSSやJavaScriptを出力するための「窓口」として利用しています。
これらがないと、SEOプラグインが動作しなかったり、管理バーが表示されなかったりと、サイトの挙動が致命的に壊れる原因となります。
2. 独自のフックを活用する
テーマ開発において、ヘッダーの読み込み直後に何か処理を加えたい場合、自作のアクションフックを設置しておくと便利です。
// header.php 内
</header>
<?php do_action( 'my_theme_after_header' ); ?>
このように記述しておけば、functions.phpから特定のページだけヘッダーの下に広告を挿入するといったカスタマイズが容易になります。
3. 条件分岐タグとの組み合わせ
get_header()を呼び出す前に、WordPressの条件分岐タグ(is_single(), is_archive(), is_search() など)を組み合わせて、動的にテンプレートを切り替える設計は非常に強力です。
しかし、テンプレートファイル側(index.phpなど)に複雑なロジックを書きすぎるのは避けましょう。
ロジックが複雑になる場合は、カスタム関数を自作して整理するのが保守のコツです。
まとめ
get_header() と get_footer() は、WordPressテーマ開発における基本中の基本ですが、その仕組みは非常に合理的で拡張性に富んでいます。
- 基本構成:
header.phpとfooter.phpを作成し、各テンプレートから呼び出す。 - 複数対応:
get_header( 'name' )を使い、特定ページ専用のパーツを作成する。 - 最新手法: WordPress 5.5以降で利用可能な
$args引数を使って、スマートにデータを渡す。 - 必須ルール:
wp_head()とwp_footer()を必ず含める。
これらのポイントを抑えることで、コードの重複が減り、修正に強いスマートなテーマが構築できるようになります。
特に複数のテンプレートを使い分ける手法は、大規模なサイト制作やLP制作で非常に重宝するため、ぜひこの機会にマスターしておきましょう。
2026年のウェブ開発シーンにおいても、WordPressのこの基本的なモジュール化の考え方は変わらず重要です。
シンプルかつ強力なこれらの関数を活用して、より良いユーザー体験を提供するサイト制作に取り組んでみてください。
