如何定义在REST控制器中使用的Wordpress全局变量?

如何定义在REST控制器中使用的Wordpress全局变量?,wordpress,wordpress-rest-api,Wordpress,Wordpress Rest Api,我通过编写一个 我正在尝试从文件中读取此类的配置,例如: { "base-namespace": "myapi", "version": "v1", "resource": "things" } 这将允许我保持服务器和客户端同步,因为它们都使用相同的配置文件 然而,我不想WP停留在阅读此文件的每一个请求,它服务。。。目前,如果我从插件文件中的任何地方读取这个文件或它所需的任何文件,包括控制器定义,如果我也从读取的位置回显,我看到它总是通过代码位,包括每个请求的读取 我想

我通过编写一个

我正在尝试从文件中读取此类的配置,例如:

{
    "base-namespace": "myapi",
    "version": "v1",
    "resource": "things"
}
这将允许我保持服务器和客户端同步,因为它们都使用相同的配置文件

然而,我不想WP停留在阅读此文件的每一个请求,它服务。。。目前,如果我从插件文件中的任何地方读取这个文件或它所需的任何文件,包括控制器定义,如果我也从读取的位置回显,我看到它总是通过代码位,包括每个请求的读取

我想我需要在插件本身之外的某个地方读取这个文件——将其设置为全局文件,然后在实例化控制器时访问它

我是WP的新手-这是我第一次涉足它。这个全局变量定义应该放在哪里,以便只执行一次

注:

我曾经尝试在插件中使用require_来要求一个配置文件来读取文件。我在那里放了一个echo语句,它显示,尽管有一次require_,但每个请求都会执行该文件。 我还尝试过用if包装文件读取!isset$my_global_var语句。但是在if语句中添加一个echo语句表明这个全局变量总是在每个请求被服务时都是未设置的。。。显然,这需要放入某种只执行一次的WP启动文件中。
谢谢。

将配置数据作为PHP数组存储在.PHP文件中,然后使用PHP include语句将其包括在内。高级PHP引擎只需解析一次PHP源代码,并缓存脚本的编译表示,这样就不必每次都重新解析PHP源代码。因此,如果您的数据位于PHP源文件中,它将保存在PHP的引擎编译脚本缓存中


当然,如果您的客户端不是PHP,则需要有代码来解析PHP数组。

每个HTTP请求都会导致新的WordPress负载。我不知道重写规则的具体内容,但我在WordPress中了解的缓存是,计算成本很高的数据是从基础数据计算出来的,结果存储在数据库中。因此,每次WordPress加载时,它都会从数据库中读取以前计算的结果,而不是从头开始重新计算。当然,当基础数据发生更改时,您需要使此数据库缓存无效。我认为重写规则是这样做的,但我不确定。现在没有时间,但会阅读源代码并让您知道。与您正在尝试的相比,WordPress的启动成本是巨大的。我认为你不应该为一百万美元的成本担心一分钱。仅供参考:当PHP进程开始时,它只读取一次ini文件PHP.ini。此流程持续运行,并为多个请求提供服务。因此,php.ini中的参数是有效的只读参数。但是,这些参数是特定于PHP的。我想您可以构建一个定制的PHP实现,并将值存储在其进程内存中,但我认为与其他所有操作的成本相比,节省的成本微不足道。重写规则缓存如我所述——计算规则的计算开销保存在wp_options sql表中,并在每次加载WordPress时读取只有当缓存失效,即数据库行被删除时,才会重新计算。这与我目前正在做的类似。我正在读取所需的PHP文件中的一个文件,因此我不确定它是否可以缓存—在该文件中的回音显示它会针对每个HTTP请求重新执行。我的客户机是Node.js代理服务器,所以我无法读取PHP,除非我使用类似于我将使用PHP硬编码的方法,然后以某种方式从PHP获取关于节点启动选项请求或某些第三方库的信息。谢谢你的帮助!如果配置数据在一个非.php文件中,那么它将在每个HTTP请求中被读取和解析。如果它在一个包含的PHP文件中,它将只被读取和解析一次。编译后的代码保存在PHP引擎的编译脚本缓存中。编译后的代码会在每个HTTP请求上执行,但由于代码已经编译,因此不会重复进行解析。如果客户机是非PHP的,我认为PHP服务器端的节省不值得为客户机增加额外的负担。这里的关键不是执行它,而是执行它需要多少时间。PHP的时间分辨率很高,精确到微秒。我将调用$t0=microtime TRUE,稍后调用$t1=microtime TRUE,并计算$exposed_time=$t1-$t0。当我使用它的时候,我已经多次惊讶于到底是什么在占用大部分时间。Xdebug还支持一个分析工具。看见