Wordpress Ajax呼び出し、php関数を実行できますが、そのファイルの外部で関数を実行することはできません
たとえばfile1.phpから関数を実行し、正常に機能するAjax呼び出しがあります。しかし、たとえばfile2.phpファイルから別の関数を呼び出すと、その関数は実行されず、エラーが返されます。
簡単な設定:
//functions.php
require('dir1/php1.php');
require('dir2/php2.php');
//php1.php
function func1(){
echo 'Hello world';
echo func2();
}
//php2.php
function func2(){
return 'Hello again';
}
これで、func1()は最初のページロードですでに実行されています。したがって、func1()とfunc2()が正常に機能することはわかっています。しかし、Ajax呼び出しはすべてのrequire()を忘れているようです。 func1()をこれに変更し、requireを追加すると、正常に機能するためです。
//php1.php
function func1(){
require('dir2/php2.php');
echo 'Hello world';
echo func2();
}
最初は、うまくいけば、この通話でもうまくいくと思いました。しかし今、私はより多くのファイルからより多くの異なる関数を呼び出したいと思うようになりました。これらすべてのファイルを常に再要求する必要がありますか?これは間違ったアプローチのように感じます。さらに、パスがわからないプラグインから関数を呼び出したいと思います。 (私は知ることができましたが、それは重要ではありません)
-編集- ajax呼び出しを実行すると、必要なファイルが再ロードされないことがわかりました。 Ajaxはtheme->functions.phpからのすべてのコードを含むコードを再実行しませんか?これには、通話に不可欠なコードが含まれています。
答え :
解決策:
はい、実際にそのリソースを必要とするファイルで require
を呼び出す必要があります。 functions
からphp1
を含めると、依存関係がプルされます。
ただし、wordpressを使用しているため、ファイルを直接呼び出すのではなく、 wp_ajax
を使用してajaxfunctionsを登録する必要があります。
答え :
解決策:
ワードプレスのajax(wp_ajax)を使用している場合、これは論理的です。
最初のコード:
ブラウザリンクからリクエストを行っているため、ファイルのDIRパスは正しいです。 現在のファイルディレクトリから必要なファイルへ。
2番目のコード:
ajax(wp-admin / admin-ajax.php)を介してリクエストを行っている場合、ディレクトリは同じではありません。原因、wordpressはこの admin-ajax.php ファイルで関数を起動し、そのディレクトリからファイルを検索しています。
したがって、path / to/fileを使用して完全なdirパスを配置することをお勧めします。 require(full / dir / path / to / file)。
答え :
解決策:
これが私がやったことです。
メインのfunctions.phpには、includes.phpという外部ファイルが必要です。このファイルから、(func1()だけでなく)一般的に必要なすべてのファイルが必要です。 Ajax呼び出しを行うときはいつでも、最初にincludes.phpに対処します。これにより、必要なものがすべて再実行されます。 require_once()でなければならないことに注意する必要があります。そうしないと、呼び出し元のファイルが検出されてクラッシュします。すでに持っている機能を再宣言しようとします。
これは最もクリーンな方法ではないと感じています。ただし、WPが実際にAjaxをどのように処理するかを確認する時間ができたら、後でこれを確認する必要があります。
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。