我没有使用Polylang插件的经验,但我认为可以安全地假设这与Polylang插件的加载顺序和主题的functions.php
. 在全局范围内调用函数时(即不是从另一个函数中调用)index.php
或任何其他模板文件,它将在页面加载过程的后期阶段,在WordPress完全初始化之后,甚至在服务器开始向客户端发送响应之后执行。
从的全局范围调用的函数functions.php
然而,文件将在更早的时候执行。在典型的页面加载过程中,基本上首先WordPress会自行设置,然后加载插件,最后加载主题。然而,这个过程并不像你想象的那样是线性的,因为一些插件可能依赖于功能,而这些功能在WordPress完全初始化、加载主题或页面服务器响应开始之前可能不可用。WordPress通过使用hooks, 它允许插件或主题在加载过程中的特定阶段执行代码。
要做更长的回答,你需要做的是确保你不打电话pll_e()
或pll__()
直到您确定Polylang插件已准备就绪。这可以通过查看其源代码(或者其文档)来确定,但我想init
钩子就足够了。在的全局范围内调用的函数functions.php
将在init
钩子,但通过添加init
钩子可以使函数在以后的阶段运行。方法如下:
function my_setup() {
global $some_var;
$some_var = pll__(\'A string in need of localization\', \'localization_domain\'); // This is assuming that this function behaves analogous to __()
pll_e("We\'ll just echo this, somewhere", \'localization_domain\');
}
add_action(\'init\', \'my_setup\');