2.

WordPress get_header 関数の使い方(テーマヘッダ読み込み・$name 引数・$args パラメータ)

編集
この記事の要点
  • get_header() はテーマの header.php を読み込む WordPress テンプレートタグ
  • $name 引数で header-{$name}.php を読み込み — ページタイプ毎にヘッダを切り替えられる
  • WP 5.5+ では第 2 引数 $args(配列)でテンプレートに変数を渡せる
  • 対象ファイルが見つからない場合は、コアの wp-includes/theme-compat/header.php がフォールバックとして読み込まれる
  • get_header_template() フィルター / get_header アクションでヘッダ読み込み前後に処理を挿入可能
  • 関連: get_footer 関数 / get_sidebar 関数

get_header 関数とは

get_header() は WordPress のテンプレートタグで、現在有効なテーマの header.php ファイルを読み込んで出力します。ページごとに同じヘッダ(ロゴ・グローバルナビ・<head> タグなど)を再利用するのが目的で、ほぼすべてのテーマファイル冒頭で呼ばれます。

構文

get_header( string $name = null, array $args = array() ): void|false
引数意味
$namestring読み込むヘッダ名。header-{$name}.php を探す。null なら header.php
$argsarrayテンプレートに渡す変数の連想配列(WP 5.5+)

戻り値は void(通常)または false(テンプレート発見できず)。WP 5.5 以降は void|false

テンプレート読み込みの優先順位

get_header('foo') と呼ぶと WordPress は次の順で探します。

  1. 子テーマの header-foo.php
  2. 親テーマの header-foo.php
  3. 子テーマの header.php
  4. 親テーマの header.php
  5. コア wp-includes/theme-compat/header.php(フォールバック)

子テーマでオーバーライドできる仕組みなので、子テーマ作成時はこの仕様を理解しておくと便利です。

基本的な使い方

<?php
// 最も一般的な使い方(header.php を読み込む)
get_header();
?>
<main>
  <?php while ( have_posts() ) : the_post(); ?>
    <article>
      <h1><?php the_title(); ?></h1>
      <?php the_content(); ?>
    </article>
  <?php endwhile; ?>
</main>
<?php get_footer(); ?>

ページ毎にヘッダを切り替える

トップページとサブページでヘッダを変えたい場合、$name 引数を渡します。

<?php
// front-page.php
get_header( 'front' );  // header-front.php を読み込む
?>

<?php
// page.php
get_header();           // header.php を読み込む
?>

<?php
// single.php(記事ページ)
get_header( 'single' ); // header-single.php を読み込む
?>

$args で変数を渡す(WP 5.5+)

<?php
// テンプレートを呼ぶ側
get_header( null, array(
    'class'      => 'home-hero',
    'show_search' => true,
) );
?>

<!-- header.php 内 -->
<header class="<?php echo esc_attr( $args['class'] ?? '' ); ?>">
  <?php if ( $args['show_search'] ?? false ) : ?>
    <?php get_search_form(); ?>
  <?php endif; ?>
</header>

$args の中身はテンプレート内で $args 変数として参照できます。

典型的な header.php の中身

<!DOCTYPE html>
<html <?php language_attributes(); ?>>
<head>
  <meta charset="<?php bloginfo( 'charset' ); ?>">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title><?php wp_title(); ?></title>
  <?php wp_head(); ?>
</head>
<body <?php body_class(); ?>>
<?php wp_body_open(); ?>
<header class="site-header">
  <h1 class="site-title">
    <a href="<?php echo esc_url( home_url( '/' ) ); ?>">
      <?php bloginfo( 'name' ); ?>
    </a>
  </h1>
  <?php
  wp_nav_menu( array(
      'theme_location' => 'primary',
      'menu_class'     => 'main-nav',
  ) );
  ?>
</header>

wp_head() はプラグインやコアが head 内に出力するためのフックなので、テーマには必須。

関連フック

フック種類用途
get_headeractionget_header() 実行時、テンプレート読み込み前に発火
get_header_templatefilter読み込まれるテンプレートのパスを変更
wp_headactionheader.php 内の wp_head() で発火(CSS / JS 出力)
wp_body_openactionbody 開始直後(GA タグ・Cookie 同意など)

注意点

  • functions.php で呼ばない — 初期化前は wp_head 等が動かない。テンプレート (single.php / page.php) の冒頭で呼ぶ
  • $name はファイル名の - 以降。header-mobile.php なら get_header('mobile')
  • ヘッダ内で大きな処理を行うとページ全体の生成が遅くなる — 重い処理はキャッシュ化

関連関数

関数役割
get_footer()footer.php を読み込む
get_sidebar()sidebar.php を読み込む
get_template_part()任意のテンプレート部品を読み込む
locate_template()テンプレートのパスを取得(読み込まずに)

FAQ

Q: get_header() を呼ばないとどうなる?
A: wp_head() フックが動かず、プラグインが出力する CSS/JS が読み込まれない。トラッキングや表示も壊れる。

Q: 同じテンプレートで複数回呼んでいい?
A: 技術的には可能だが、<html> / <head> を二重出力する事故になるので非推奨。

Q: ブロックテーマ(FSE)でも使う?
A: ブロックテーマでは theme.json + block templates が中心で、PHP テンプレートと get_header() は使わない。クラシックテーマでのみ必須。

関連: get_footer 関数 / get_sidebar 関数

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. do_action
  2. get_header

最近更新/作成されたページ