主题中已翻译、转义的字符串(Esc_Attr)是如何工作的?

时间:2012-09-26 作者:Brett

我在看TwentyEleven 编码并找到以下内容:

esc_attr__( \'Permalink to %s\', \'twentyeleven\' )
这是一些来自帖子标题标签的代码;标题标签中的完整代码为:

printf( esc_attr__( \'Permalink to %s\', \'twentyeleven\' ), the_title_attribute( \'echo=0\' ) );
我查看了esc_attr 函数(看起来与esc_attr__ 功能?)它只需要一个参数,那么这是如何传递两个参数的呢?

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

之间的一般差异esc_attresc_attr_*

之间的差异esc_attr()esc_attr__(), esc_attr_e(), esc_attr_x() 后三个只是“包装器”,或者换句话说,是更高级别的API函数。

当您查看后三个的源代码时,您将看到,那些放在单个参数中的translate() (或translate_with_gettext_context() 对于esc_attr_x().

这意味着您只需输入两个参数:要翻译的字符串和帮助WP确定要翻译的语言文件的textdomain。

你看到的其他一切都是sprintf() 围绕它,这是默认的php函数%s-零件和%d-字符串中的部分(字符串/数字)。

地雷陷阱!请注意

如果未将第二个参数传递给esc_attr(), 然后您将遇到以下问题:WP现在认为您的字符串是core的一部分,并尝试翻译它们。这可能会导致非常奇怪的结果。

另一件可能发生的事情是,翻译字符串(第二个参数)已经被插件或主题使用。在这种情况下,稍后加载的翻译文件将赢得比赛,并取代您的文件。再次:非常奇怪的结果。修复:为textdomain添加前缀,就像使用自定义全局变量或函数名一样。

结论

如果你想避免第二个论点,那么只需esc_attr( \'your string\' ) 避免其他三种版本。

结束

相关推荐

Disable escaping html

我在用SyntaxHighlighter Evolved 突出显示代码示例。E、 g。[csharp] string s = \"text\"; List<int> numbers = new List<int>(); [/csharp] 当我第一次保存它时,没关系,但编辑wordpress时,文本会更改为[csharp] string s = &quot;text&quot;; List&lt;int&am