Wordpress Ajax调用,可以运行php函数,但不能运行该文件之外的函数

时间:2018-10-22 07:51:26

标签: php ajax wordpress

我有一个Ajax调用,它运行来自file1.php的函数,并且运行良好。但是,当我从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不会重新运行包含主题-> functions.php中所有代码的代码吗?这具有重要的调用代码。

3 个答案:

答案 0 :(得分:0)

是的,您应该在实际需要该资源的文件中调用require。当包含php1中的functions时,它将拉出依赖关系。

但是,由于您使用的是wordpress,因此您应该使用wp_ajax注册ajax函数,而不要直接直接调用该文件。

答案 1 :(得分:0)

如果您正在使用wordpress ajax(wp_ajax),那么这是合乎逻辑的。

您的第一个代码:

您正在通过浏览器链接发出请求,因此文件 DIR路径是正确的。 从当前文件目录到您需要的文件。

您的第二个代码:

您通过ajax(wp-admin / admin-ajax.php)发出请求,那么目录将不同。原因是,wordpress只是触发了此 admin-ajax.php 文件中的功能,并从该目录中搜索文件。

因此,我建议将完整目录路径与path / to / file一起放置。 要求(完整/目录/路径/到/文件)。

答案 2 :(得分:0)

这就是我最终要做的。

在main functions.php上,我需要一个名为includes.php的外部文件。从此文件中,我需要我通常需要的所有文件(不仅仅是func1())。每当我进行Ajax调用时,我都会先处理include.php。这将重新运行所有需求。我确实要注意它们必须是require_once(),否则它将找到您正在从中调用它的文件并崩溃。它将尝试重新声明它已经具有的功能。

我觉得这不是最干净的方法。但是,当我有更多时间查看WP如何实际处理Ajax时,我将不得不稍后进行检查。