Dragon主题购买

WordPress 6.7 主题和插件语言翻译加载失效问题解决方法:避免过早调用 load_theme_textdomain()和 load_plugin_textdomain()

今天龙笑天将 WordPress 升级到最新的 6.7 版本,结果各种查看是否有啥 BUG 不兼容的地方,结果发现网站的翻译语言包和问答插件的翻件语言包不加载,会全部丢失显示为英文界面。

网上用 Bing 搜索了一下,发现不是个例,不少盆友都遇到了,或者是主题翻译语言不加载或者是插件翻译文件不加载。PS:在这里龙笑天必须要吐槽一下百度了,自从 2023 年下半年开始,百度不知道搞了啥,中文搜索相关性简直差到离谱,基本搜索不出想要的答案,居然连必应搜索都比不过了,不知道百度是不是要放弃自己这个中文搜索老本行业务了...

究其原因,还是我们的Wordpress偷偷搞事情了,在 WordPress 6.7 引入了更加严格的翻译加载机制。如果主题或插件的代码在 WordPress 初始化时过早地尝试加载翻译文件,WordPress 会发出警告。翻译加载应该等到 WordPress 初始化完毕,才能确保所有的主题和插件文件已正确加载。常见的错误之一就是在 init 钩子之前调用 load_theme_textdomain()或 load_plugin_textdomain(),这会导致 PHP 错误提示,该提示示例如下:

[14-Nov-2024 10:36:09 UTC] PHP Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the your-textdomain domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /wp-includes/functions.php on line 6114

1.解决掉此 PHP Notice 的方法

那么,如何避免并解决掉这个错误提示?下面龙笑天就来为大家讲解下~

1.1 对于主题来说

如果您在开发 WordPress 主题,那么就要确保翻译加载要在after_setup_theme这个钩子中进行,从而避免过早加载翻译文件导致 PHP 报错提示。正确的代码示例如下:

/**
 * WordPress 6.7 主题和插件语言翻译加载失效问题解决方法 - 龙笑天下
 * https://www.ilxtx.com/fix-the-issue-of-translations-not-loading-in-wordpress.html
 */
function lxtx_theme_setup() {
    load_theme_textdomain( 'dragon-theme', get_template_directory().'/languages' );
}
add_action('after_setup_theme', 'lxtx_theme_setup');

注意,此示例讲的是您主题的翻译语言包.mo文件应该放置在您主题根目录的languages目录里。

1.2 对于插件来说

如果您在开发 WordPress 插件,那么就要确保翻译加载要在init这个钩子中进行,从而避免过早加载翻译文件导致 PHP 报错提示。正确的代码示例如下:

/**
 * WordPress 6.7 主题和插件语言翻译加载失效问题解决方法 - 龙笑天下
 * https://www.ilxtx.com/fix-the-issue-of-translations-not-loading-in-wordpress.html
 */
function lxtx_plugin_setup() {
    load_theme_textdomain( 'dragon-plugin', plugin_dir_path( __FILE__ ).'languages' );
}
add_action('init', 'lxtx_plugin_setup');

注意,此示例讲的是您主题的翻译语言包.mo文件应该放置在您插件根目录的languages目录里。

2.解决翻译语言包不加载的方法

龙笑天已经按照上面方法,对代码进行了相关处理,结果发现翻译语言包文件还是没有被 Wordpress 加载... 这让龙笑天百思不得骑姐,还是用 Bing 国际版搜索了下,果真找到了解决方法。

方法很简单,将原有使用的调用翻译语言包的函数load_theme_textdomain()load_plugin_textdomain()改为load_textdomain()即可。示例如下:

以主题翻译为例,将原主题翻译的调用方法:

load_theme_textdomain( 'dragon-theme', get_template_directory().'/languages' );

改为如下就完事了:

load_textdomain( 'dragon-theme', get_template_directory().'/languages/'.get_locale().'.mo' );

如果是插件翻译的话,看着上面示例类似操作下就行。在这里,非常感谢 @Alexander Bigga 提供的上面这个解决方法,详见参考文章 1。

完美方法

如果您想兼容 WP 所有版本的话,也很简单,加个判断,改造下翻译语言包的调用方法就行。

1.主题翻译语言包的调用方法可以改为下面这样:

if ( version_compare( get_bloginfo('version'), '6.7', '<' ) ) {
	load_theme_textdomain( 'dragon-theme', get_template_directory().'/languages' );
} else {
	load_textdomain( 'dragon-theme', get_template_directory().'/languages/'.get_locale().'.mo' );
}

2.如果是插件翻译的话,可以调用方法改为如下:

if ( version_compare( get_bloginfo('version'), '6.7', '<' ) ) {
	load_theme_textdomain( 'dragon-plugin', plugin_dir_path( __FILE__ ).'languages' );
} else {
	load_textdomain( 'dragon-plugin', plugin_dir_path( __FILE__ ).'languages/'.get_locale().'.mo' );
}

对于使用了龙笑天下Dragon 主题的盆友,升级到主题的最新版后,可以放心大胆的食用最新版 Wordpress 6.7~

3.相关参考

Translations and styling gone after WP 6.7 update | WordPress.org
Internationalization improvements in 6.7 – Make WordPress Core
Translations are no longer loading from the theme folder | WordPress.org
WordPress 6.7 翻译加载问题解决教程:避免过早调用 load_plugin_textdomain()-XinTheme

「点点赞赏,手留余香」

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

2017-07-07

2016-10-22

发表评论

表情 格式 贴图 链接 私密 签到
Dragon主题购买阿里云特价云服务器1核2G低至86元,N4共享型服务器3年仅需799元腾讯云特价云服务器1核2G 88元/年 2核4G3M688元/3年,更有千元代金券礼包免费领!
扫一扫二维码分享
×
We use cookies on our website to give you the most relevant experience by remembering your preferences and repeat visits. By clicking “Accept”, you consent to the use of ALL the cookies. Learn more
Dragon