覆盖子主题上的父主题转换

时间:2015-05-01 作者:d79

我有一个正确使用的父主题load_theme_textdomain() 加载多种语言的所有已翻译字符串。

然后我创建了一个子主题load_child_theme_textdomain() 为其字符串实现相同的操作。

父主题上有特定语言的特定翻译字符串,我想在子主题中替换/覆盖这些字符串。

我知道如果它们在模板文件中,我可以替换该文件并简单地更改这些字符串的textdomain,但不幸的是,我所说的那些字符串在许多地方以及仪表板中都有使用(因此在一些过滤器/操作函数中)。

所以我的问题是:is there a way to replace those translated strings inside the child theme without having to replace parent template files or functions?

我不知道,可能会添加一个父主题。mo子主题的languages文件夹中的文件,仅翻译这些字符串或类似的内容。

3 个回复
最合适的回答,由SO网友:d79 整理而成

我想我找到了解决办法

前提条件

load_theme_textdomain()load_child_theme_textdomain() 基本相等,唯一的区别是它们使用的默认路径:

他们获得当前语言(使用get_locale()) 并添加相对.mo 文件到作为参数传递的路径load_textdomain() 将textdomain和结果路径作为参数传递给。mo文件load_textdomain 加载。mo文件转换为全局textdomain变量,但正如我们可以从source:

如果域已存在,则将合并翻译。

如果两个集合具有相同的字符串,则将从原始值进行转换。

因此,为了只覆盖/替换我们想要的主题父级的字符串,我们需要加载一个自定义。父textdomain的mo文件,仅包含已翻译的字符串,before 父主题加载其。mo文件。

最后,我简单地在子主题语言文件夹中创建了一个名为父主题的文件夹(只是为了方便),并将其放入我的自定义文件夹中。父textdomain的mo文件(一个用于语言,在xx_XX.mo 表格,其中xx_XX 是语言代码)。

然后我在我的孩子主题中添加了一行functions.phpafter_setup_theme 操作,靠近加载的操作。我的子主题textdomain的mo文件:

add_action( \'after_setup_theme\', function () {
    // load custom translation file for the parent theme
    load_theme_textdomain( \'parent-textdomain\', get_stylesheet_directory() . \'/languages/parent-theme\' );
    // load translation file for the child theme
    load_child_theme_textdomain( \'my-child-theme\', get_stylesheet_directory() . \'/languages\' );
} );
因为functions.php 子主题的文件在父主题的文件之前加载,这组字符串将优先于父主题转换(或者我可以使用add_action 函数)。

注意:我可以使用load_child_theme_textdomain 而不是load_theme_textdomain, 正如前提中所说的那样,情况也会一样。

SO网友:redelschaap

您可以使用子主题文件夹中的语言文件。首先,您必须知道父主题使用的是哪个文本域。然后创建。采购订单和。仅使用您的语言作为文件名的mo文件(例如de\\u de.po/de\\u de.mo或nl\\u nl.po/nl\\u nl.mo),并将其放入子主题目录中的文件夹中,例如“语言”。

然后可以使用初始化文本域load_child_theme_textdomain():

load_child_theme_textdomain( \'the_text_domain\', get_stylesheet_directory() . \'/languages/\' );
请注意,您可以通过以下函数调用找到文本域__()_e() 在父主题PHP文件中。第二个参数是文本域:__( \'Translated text string\', \'text_domain\' );

SO网友:Cesar

Wordpress 5.0.1的2019年更新。

文件中不得包含父段或子段。例如,提供西班牙语-墨西哥翻译的文件应具有子主题名称/语言/es\\U MX。po和/子主题名称/语言/es\\U MX。mo子主题功能。php应该有以下代码。请注意,函数load\\u child\\u theme\\u textdomain()的第一个参数是父主题slug,而不是子主题slug:

function child_theme_slug_setup() {
    load_child_theme_textdomain( \'parent-theme-slug\', get_stylesheet_directory() . \'/languages\' );
}
add_action( \'after_setup_theme\', \'child_theme_slug_setup\' );

结束

相关推荐

如何在WooThemes画布中为注册用户创建不同的导航?

我正在用wordpress和画布主题(来自WooThemes)构建一个网站。我使用顶部导航在用户登录时显示项目。当用户未登录时,您只能看到“成为成员”和“登录”。当用户登录时,他/她会看到另一个带有其他菜单项的导航。我想到了以下解决方案:注册新导航应用钩子检查用户是否登录根据结果,为注册用户应用导航,否则显示其他我将此代码放在我的函数中。php:add_action( \'init\', \'register_top_menu_myisa\', 10 ); function regist