【WordPress】functions.phpでエラーを出さない書き方の基本と安全な編集手順

functions.phpを安全に編集するための基本ポイントをまとめたアイキャッチ画像
functions.phpでエラーを出さないための書き方の基本と編集の注意点をまとめたアイキャッチ画像

functions.php は WordPress テーマの中でもっとも触る機会が多く、同時にエラーを出しやすいファイルでもあります。
セミコロンの抜けや閉じタグの位置など、たった1つのミスでサイト全体が真っ白になることも珍しくありません。

この記事では、**functions.php を安全に編集するための「エラーを出さない書き方の基本」**を、初心者でも確実に身につくように丁寧に解説します。
テーマカスタマイズをこれから始める方も、すでに触れている方も、この記事を読みながら手順通りに進めれば安心して作業できます。

1. そもそも functions.php とは?

functions.php は、テーマが読み込まれるたびに実行される「テーマ専用の機能ファイル」です。
テーマごとに1つ用意されており、主に以下のようなカスタマイズを担います。

  • CSS・JavaScript の読み込み
  • アイキャッチ画像やメニューなどのテーマ機能の追加
  • 管理画面のカスタマイズ
  • ショートコードの追加
  • 条件分岐を使った制御

💡本格的にカスタマイズするなら、親テーマではなく
子テーマの functions.php を使うのが安全です。
子テーマの作り方とfunctions.phpを安全に編集する手順

2. エラーを出さないための大原則

functions.php はほんの1文字のミスでもサイトが落ちます。
まずは共通ルールを押さえましょう。

2-1. 「少し書いて、すぐ動作確認」を徹底する

大量にコピペ → まとめて保存 は危険です。

  1. 数行だけ追加する
  2. 保存する
  3. フロントと管理画面で動作確認
  4. 問題なければ続きのコードを書く

この繰り返しで事故率が劇的に下がります。

2-2. PHPの基本構文を確実に守る

  • 文末の ; を忘れない
  • {}() は正しく閉じる
  • '" の閉じ忘れに注意
  • 全角スペースを混入させない
<?php
// OK
function my_theme_setup() {
    add_theme_support( 'post-thumbnails' );
    add_theme_support( 'title-tag' );
}
add_action( 'after_setup_theme', 'my_theme_setup' );
<?php
// NG:; が抜けている
function my_theme_setup() {
    add_theme_support( 'post-thumbnails' )
    add_theme_support( 'title-tag' );
}

2-3. 文字コードは「UTF-8 / BOMなし」

エディタ側の設定が原因で
「ヘッダーを送信できません」エラーが出ることがあります。

  • UTF-8
  • BOMなし(UTF-8N)

で保存するのが必須です。

2-4. PHP閉じタグ ?> を書かない

WordPress公式推奨です。
閉じタグ後に余計な空白や改行が入るだけでエラーの原因になります。

2-5. 管理画面のテーマエディターは極力使わない

テーマエディターで functions.php を壊すと

管理画面ごと真っ白 → 何もできない

という最悪パターンに。

編集は必ず

  • FTP
  • またはローカル環境

で行うのが安全です。

WordPressテーマカスタマイズの基本と安全な作業手順

3. よくある致命的エラーと対処法

▼ functions.php のエラー一覧表

エラーの種類よくある原因対処のポイント
Syntax error(構文エラー)セミコロン抜け、カッコの閉じ忘れ、クォートの閉じ忘れ行番号付近を確認し、「;」「{」「}」「’」「\”」の閉じ忘れを修正する
Call to undefined function存在しない関数の呼び出し、フックのタイミング違い関数が定義されているか、読み込み順やフックのタイミングを確認する
Cannot redeclare function同じ名前の関数を複数回定義しているfunction_exists() で二重定義を防ぐ、関数名をユニークにする
Headers already sentPHP閉じタグの後の空白・改行、BOM付きファイル閉じタグを削除し、UTF-8 / BOMなしで保存し直す
White screen of death(真っ白画面)致命的エラーの非表示状態FTPでfunctions.phpを戻す or WP_DEBUGを有効化して原因を特定する

WP_DEBUGの有効化とエラーログの見方

4. 安全に書くための基本パターン

4-1. 必ず「関数+フック」で書く

処理をいきなり書くのではなく、
関数化 → フック登録がWordPressの基本です。

<?php
function yagi_enqueue_scripts() {
    wp_enqueue_style( 'yagi-style', get_stylesheet_uri(), array(), '1.0.0' );
    wp_enqueue_script( 'yagi-js', get_template_directory_uri() . '/assets/js/script.js', array(), '1.0.0', true );
}
add_action( 'wp_enqueue_scripts', 'yagi_enqueue_scripts' );

wp_enqueue_style / wp_enqueue_script の基本

4-2. function_exists() で二重定義を防ぐ

同名関数がすでにあった場合のエラー防止に必須。

<?php
if ( ! function_exists( 'yagi_custom_excerpt_length' ) ) {
    function yagi_custom_excerpt_length( $length ) {
        return 80;
    }
}
add_filter( 'excerpt_length', 'yagi_custom_excerpt_length' );

WordPressで抜粋文の文字数を変更する方法

4-3. 条件分岐を書くときの注意点

  • 条件式はなるべく1行にまとめる
  • 意味が似ている処理は関数にまとめる
<?php
function yagi_example() {
    if ( is_single() && ! is_user_logged_in() ) {
        // ログインしていないユーザーだけに表示させる処理
    }
}
add_action( 'wp', 'yagi_example' );

functions.phpに条件分岐を書くときの注意点
is_user_logged_in()の使い方

5. 権限チェック・セキュリティ系は特に慎重に

5-1. current_user_can() を必ず使う

管理画面カスタマイズは権限を確認しないと危険。

<?php
function yagi_admin_customize() {
    if ( ! current_user_can( 'manage_options' ) ) {
        remove_menu_page( 'tools.php' );
    }
}
add_action( 'admin_menu', 'yagi_admin_customize', 99 );

→ current_user_can()の使い方

5-2. セキュリティは基本的にプラグインで行う

functions.phpで自作するより、
AIOSなどのセキュリティプラグインの方が安全です。

ログイン試行回数をAIOSで制限する方法
AIOSファイアウォール設定

6. 事故ったときの復旧手順

6-1. 真っ白画面になった場合

  1. FTPでテーマフォルダへ接続
  2. functions.php をリネーム(例:functions-broken.php
  3. WordPressが自動で動作するテーマに切り替わる
  4. バックアップと差し替え or 問題箇所を修正して再アップロード

6-2. WP_DEBUG でエラー内容を確認

<?php
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );

wp-content/debug.log にエラーが出力されます。

7. 最終チェックリスト

チェック項目確認内容
構文エラーはないかセミコロンやカッコの閉じ忘れがないかWP_DEBUGで確認した
文字コードは正しいかUTF-8 / BOMなしで保存されている
閉じタグを削除したかファイル末尾に「?>」がない
関数名はユニークか接頭辞を付け、function_exists() を使っている
条件分岐の整理は十分かネストが深くなりすぎていない
権限チェックは適切かcurrent_user_can() を使っている
バックアップはあるか編集前のfunctions.phpを保存している

まとめ

  • functions.php はテーマの心臓部
  • 1文字のミスでサイト全体に影響する
  • 「少し書く→確認」の徹底で事故率が大幅に下がる
  • 関数+フック+権限チェックが基本
  • セキュリティ系はプラグインに任せる
  • 失敗しても WP_DEBUG と FTP で確実に復旧できる