functions.phpに条件分岐を書くときの注意点【初心者向け】

WordPressでは、functions.phpに条件分岐タグを使って処理を分けたい場面が多くあります。
しかし、記述する場所やタイミングを間違えると動作しない・エラーが出ることも少なくありません。
この記事では、functions.phpに条件分岐を書く際の基本的な考え方と注意点を、初心者にもわかりやすく解説します。
Contents
✅ この記事でわかること
- 条件分岐タグとは何か
functions.phpに書くときの注意点- 使うタイミング(フック)の重要性
- よくあるミスと正しい書き方
1. 条件分岐タグとは?
条件分岐タグとは、WordPressが今どのページを表示しているのかを判断するための関数です。
たとえば以下のようなものがあります。
| タグ名 | 意味 |
|---|---|
is_home() | ブログ投稿一覧ページかどうか |
is_front_page() | サイトのトップページかどうか |
is_single() | 投稿ページ(single.php)かどうか |
is_page() | 固定ページかどうか |
is_category() | カテゴリーアーカイブかどうか |
条件分岐タグの一覧については、
👉 WordPress条件分岐タグの基本まとめ【初心者向け】
で詳しく解説しています。
2. functions.phpに条件分岐を書くときの基本ルール
functions.php は、テーマが読み込まれた時点で最初に実行されるファイルです。
つまり、「WordPressの画面情報(どのページか)」がまだ判定できていない段階で実行されることが多いのです。
❌ よくある失敗例
// NG例:functions.php直下で条件分岐
if ( is_single() ) {
// 投稿ページだけで実行したい処理
add_action( 'wp_enqueue_scripts', 'my_single_style' );
}このように書いても、is_single()が常にfalseになり、意図通り動作しません。
3. 正しいタイミングで条件分岐を使う
条件分岐を使う場合は、「WordPressが現在のページ情報を取得した後」に実行する必要があります。
そのためには、適切なフック(アクションフック)を使います。
✅ 正しい書き方の例
function my_enqueue_styles() {
if ( is_single() ) {
wp_enqueue_style( 'single-style', get_template_directory_uri() . '/css/single.css' );
} elseif ( is_page() ) {
wp_enqueue_style( 'page-style', get_template_directory_uri() . '/css/page.css' );
}
}
add_action( 'wp_enqueue_scripts', 'my_enqueue_styles' );このように、wp_enqueue_scripts など「フロント画面で実行されるフック」に紐づけるのがポイントです。
4. フックを使う代表的なパターン
| 目的 | 適切なフック | 説明 |
|---|---|---|
| CSSやJSを読み込む | wp_enqueue_scripts | 表示中ページに応じたスタイル切替など |
| 管理画面で処理する | admin_init | 管理画面限定で条件分岐 |
| 投稿や固定ページを操作 | template_redirect | 表示テンプレートが決まった段階で条件判断 |
template_redirect フックは「どのテンプレートを使うか決まったあと」に実行されるため、
複雑な条件分岐にも対応できます。
5. 条件分岐をまとめて管理するコツ
条件分岐が増えると、functions.phpがごちゃごちゃしがちです。
その場合は、専用ファイルに分けて読み込むと管理が楽になります。
// functions.php
require get_template_directory() . '/inc/conditional-functions.php';そして、conditional-functions.php 内に条件分岐ごとの処理をまとめて記述します。
6. 条件分岐の使い方で混乱しやすいポイント
| 混同しやすいタグ | 違いの解説 |
|---|---|
is_home() vs is_front_page() | is_front_page()とis_home()の違い |
is_single() vs is_page() | is_single()とis_page()の違いをやさしく解説 |
is_singular() vs is_single() | is_singular()の使い方とis_single()との違い |
7. よくあるエラーと対処法
🔸 エラー:Call to undefined function is_single()
→ 原因:is_single()をWordPressが完全にロードされる前に呼び出している。
対処法:initやwp、template_redirectなどのアクションフック内で呼び出す。
8. まとめ
| ポイント | 内容 |
|---|---|
| 条件分岐タグは「どのページか」を判定するための関数 | is_single() や is_page() などを使って、現在表示中のページの種類を判断できます。 |
functions.php直下で実行すると早すぎて判定できない | functions.php はテーマ読み込み時に最初に動くため、ページ情報がまだ確定しておらず、条件分岐が正しく動作しません。 |
適切なフック(wp_enqueue_scriptsなど)内で使用する | 条件分岐は「ページ情報が確定した後」に実行する必要があるため、アクションフックの中で使うのが正しい方法です。 |
| 混同しやすいタグの違いを理解する | is_home() と is_front_page() など、似たタグの違いを理解することで、意図しない条件分岐を防げます。 |
| 条件分岐が多い場合はファイル分割で管理する | functions.php が複雑になる場合は、条件分岐専用のファイルを作成し、require で読み込むと管理しやすくなります。 |

