web-dev-qa-db-ja.com

致命的なエラー:未定義の関数add_action()への呼び出し - 手付かずの問題

質問はさまざまな方法で何度も尋ねられましたが、残念ながらほとんどの回答では十分に網羅されていません。私はインクルードファイルを使ったことでも同じ問題を抱えています。

私のTwentyFourteenの子テーマのfunctions.phpでは、私が使った:

require_once get_stylesheet_directory_uri() .'/admin-panel/theme-options.php';

そして私は Ian StewartのSample Theme Options を使っています。私は自分の多くのプロジェクトでそれを使っていましたが、ここでも述べたのと同じ方法で、エラーはありません。しかし最近、私はいくつかのプロジェクトで問題を抱えています。私がfunctions.phpにコードを持っていくならば、それですべては大丈夫です。しかし、それは私が外部ファイルをインクルード/要求しようとしているときにのみ発生します。

私はエラーがあります:

致命的なエラー: 2行目のC:\ xampp\htdocs\project\wp-content\themes\my-theme\admin-panel\theme-options.phpの未定義関数add_action()への呼び出し

この場合、私は(T14の)子テーマを使用しているエラーがあります。しかし、私の親のテーマの一つでさえ私は問題に直面しています。しかし、同じ環境で、私の他のプロジェクトはすべてのインクルードおよび/または必要条件(いくつかのadd_action()が定義されている場合)でうまく動作しています。 すべてのadd_action()呼び出し CPT割り当てカスタム分類法割り当てなどに問題があります。しかし、外部ファイルを含む他の2つのプロジェクトの開発に成功しました。私のすべてのCPTが割り当てられているinc/フォルダとそのメタボックスからも。

WordPressを再インストールし、すべてのプラグインを無効にし、Child Themeから試して、TwentyFifteenを変更して同じことだけを試し(デフォルトテーマを適用)、require()require_once()include()includerequire_once、およびrequireを次々と失敗しました。そして私はWP 4.1.1をすべての良いインストールと問題のあるインストールに使っています。

これまでの質問の大部分は、単純な行で答えられています。

メッセージが示すように、あなたは関数add_action()を定義しましたが、まだそれを使用しようとしています。

しかし、

  • どうやって来る (WordPressによってすでに定義されていませんか?)そして
  • なぜ同じ環境で投影するのが異なるプロジェクトなのか (今では特定のプロジェクトだけで範囲外になっているのはどうしてですか?)
1
Mayeenul Islam

get_stylesheet_directory_uri()はURLを返します。要求されたファイルは、他の公的に利用可能なリソースのようにincludeステートメントのコンテキストなしで呼び出されます。これはPHPファイルをブラウザで直接開くのと同じです。 WordPressのコンテキストはなく、関数add_action()またはadd_filter()は定義されていません。

親テーマではget_template_directory()を使用し、子テーマではget_stylesheet_directory()を使用してください。

開発環境で allow_url_fopenallow_url_include を無効にして、このようなエラーを早期にキャッチし、より良いエラーメッセージを表示します。

3
fuxia