0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WordPressのエラー日本語訳:初心者がまずつまずく10選(原因・対処・再発防止)

Last updated at Posted at 2025-08-17

エラーメッセージ日本語訳:WP 新人がまずつまずく 10 選

意味 → 原因 → 対処・再発防止を各 3 行+補足解説)

目次

1) Headers already sent / Cannot modify header information

  • 意味:ヘッダー送信(例:リダイレクト)よりに出力がありました。
  • 原因?> の後の空白や改行、BOM 付きファイル、早いフックでの echo です。
  • 対処functions.php 末尾の ?>書かない/BOM なし保存/早いフックは error_log() に出します。
<?php
// 正:リダイレクトの直後は必ず終了します
wp_redirect(home_url('/'));
exit;

補足:ヘッダーは最初の出力前にしか送れません。空白 1 文字でもアウトです。

2) Call to undefined function ...

  • 意味:呼び出した関数が読み込まれていません
  • 原因:ファイル未読込、プラグイン未有効化、呼び出しが早すぎることがあります。
  • 対処require_once のパス確認、plugins_loaded 以降で WP 関数を呼ぶなど、適切なフック順に直します。
<?php
// 例:初期化タイミングを後ろに寄せます
add_action('plugins_loaded', function () {
    // ここなら多くのプラグイン・関数が利用可能です
});

3) Undefined index / Undefined array key

  • 意味:配列のキーが存在しないのに読み取りました。
  • 原因$_POST['foo'] などを存在確認なしで読んでいます。
  • 対処isset()null 合体演算子(??) で存在を確認してから sanitize します。
<?php
$title = isset($_POST['title']) ? sanitize_text_field($_POST['title']) : '';
// または
$title = sanitize_text_field($_POST['title'] ?? '');

4) Undefined variable

  • 意味:変数が初期化されていません
  • 原因:条件分岐のある経路で値が入らないことがあります。
  • 対処:利用前に初期化しておきます(空文字や null で構いません)。
<?php
$val = '';
if (some_condition()) {
    $val = 'ready';
}

5) Call to a member function ... on null

  • 意味null に対してメソッド呼び出しをしました。
  • 原因:取得に失敗している/コンテキスト外(例:ループ外の $post)です。
  • 対処存在確認してから使う/**順序(ループ・クエリ)**を正します。
<?php
if ($obj instanceof stdClass) {
    $obj->do_something();
}

補足(WP 特有):the_post() の外で $post を使わないようにします。WP_Queryhave_posts()the_post() の順序を守ります。

6) Allowed memory size exhausted

  • 意味:PHP のメモリ上限を超えました。
  • 原因:巨大配列、無制限の DB 取得、再帰の暴走などです。
  • 対処:根本を減らします(件数制限ストリーム処理)。やむを得ない場合は WP_MEMORY_LIMIT を一時的に上げます。
<?php
// 暫定対処(根本は必ず別で直します)
define('WP_MEMORY_LIMIT', '256M');

7) Maximum execution time exceeded

  • 意味:処理が時間制限を超えました。
  • 原因:重いループや外部 API 待ちです。
  • 対処:処理の分割(WP-Cron / バッチ)、キャッシュ導入、外部待ちの短縮を行います。安易な set_time_limit() 連発は避けます。

実務では、管理画面からキック → 非同期処理(キュー) に流すのが安全です。

8) Class '...' not found

  • 意味:クラス定義が読み込まれていません
  • 原因:Composer オートロード未読込、名前空間の不一致です。
  • 対処vendor/autoload.php を読み込み、namespaceuse を整えます。
<?php
require __DIR__ . '/vendor/autoload.php';

use App\Service\Mailer;
$mailer = new Mailer();

9) Failed opening required '...'

  • 意味requireパスが間違いです。
  • 原因:相対パスの勘違い、テーマ/プラグインの場所違いです。
  • 対処絶対パスにします。WordPress のヘルパーを使うと安全です。
<?php
// テーマ(親テーマ)
require_once get_template_directory() . '/inc/setup.php';

// プラグイン
require_once plugin_dir_path(__FILE__) . 'includes/setup.php';

10) The link you followed has expired.(リンクが期限切れです)

  • 意味nonce の期限切れアップロード制限超過で処理が無効化されました。
  • 原因:ページを長時間放置してから送信、upload_max_filesize / post_max_size が小さいなどです。
  • 対処:ページの再読み込み後に実行/アップロード上限の見直し/nonce 検証の正しい実装です。
<?php
// 管理画面での保存時の例(失敗時は wp_die() で止まります)
check_admin_referer('my_action', 'my_nonce');

すぐに使える最小チェックリスト

  • リダイレクトの後は exit; を書きます。
  • 早いフックでは echo しませんerror_log() を使います)。
  • 配列アクセスは isset() または ?? で存在確認 → その後 sanitize します。
  • ファイル読込は 絶対パスget_template_directory() / plugin_dir_path())にします。
  • 保存・削除などの状態変更には nonce 検証check_admin_referer() / wp_verify_nonce())を入れます。

最後に

エラーメッセージは「病名」ではなく“症状”の表示にすぎません。
本記事の 意味 → 原因 → 対処・再発防止 の順に落ち着いて確認していけば、必ず道筋が見えてきます。ブックマークして、現場で見ながら直す用途でお使いください。

これだけ覚えると強い要点(再掲)

  • 出力のタイミングはフロントなら wp_head / wp_footer 以降、管理は admin_notices 以降が目安です。
  • 保存・削除などの状態変更には nonce 検証+必要なら 権限チェックcurrent_user_can())+PRGwp_redirect(...); exit;)をセットにします。
  • リダイレクトの後は exit; を必ず書きます。
  • 配列アクセスisset()?? で存在確認 → 入力は sanitize出力は escape(直前) が基本です。
  • ファイル読込絶対パスget_template_directory() / plugin_dir_path() など)で迷子を防ぎます。

あわせて読みたい

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?