我正在编写一个插件,我刚刚添加了一个PHP最低版本的检查。我尝试输入错误消息,但无效。我翻译了插件中的每一个字符串,除了那一个之外,所有的东西都正常工作,所以错误总是用英语显示。这是我的代码:
/**
* Plugin Name: plugintest
* Description: test
* Version: 1.0
* Author: me
* Text Domain: plugintest
* Domain Path: /languages/
*/
add_action(\'plugins_loaded\', \'plugintest_load_plugin_textdomain\');
// Languages
function plugintest_load_plugin_textdomain() {
load_plugin_textdomain( \'plugintest\', false, dirname( plugin_basename( __FILE__ ) ) . \'/languages/\' );
}
// Check for required PHP version
if (version_compare(PHP_VERSION, \'5.4\', \'<\'))
{
$phpoldmsg = __(\'This plugin requires PHP 5.4 or higher. Please upgrade the version of PHP installed on your server\', \'plugintest\');
$phpoldmsg .= " (".PHP_VERSION.")";
exit($phpoldmsg);
}
else{
include \'plugintest.php\';//INCLUDE REST OF PLUGIN
}
我想这是因为当消息显示时插件textdomain还没有加载,但我不知道如何解决这个问题。我在某个地方读到,通过在插件头中添加“文本域”和“域路径”,WP甚至可以在激活之前翻译字符串,但它似乎对我没有帮助。或者我应该使用比“plugins\\u loaded”更早的钩子吗?提前谢谢你
最合适的回答,由SO网友:bueltge 整理而成
您对php版本的检查不在单独的函数中。这就是你不能控制这个函数流的顺序的要点。
下面的示例源代码应该更清楚地了解堆栈。顺序取决于plugintest_init
作用您还可以使用相同的挂钩和不同的优先级,第三个参数add_action
.
add_action( \'plugins_loaded\', \'plugintest_init\' );
function plugintest_init() {
add_action( \'init\', \'plugintest_load_plugin_textdomain\' );
add_action( \'admin_init\', \'plugintest_check_php_version\' );
}
function plugintest_load_plugin_textdomain() {
// ...
}
function plugintest_check_php_version() {
// ...
}
另一个提示是,源代码非常简单。一个类,OOP代码的结构和使用都要好得多。但在你的问题背景下,这可能更容易理解。