我在看TwentyEleven
编码并找到以下内容:
esc_attr__( \'Permalink to %s\', \'twentyeleven\' )
这是一些来自帖子标题标签的代码;标题标签中的完整代码为:
printf( esc_attr__( \'Permalink to %s\', \'twentyeleven\' ), the_title_attribute( \'echo=0\' ) );
我查看了
esc_attr
函数(看起来与
esc_attr__
功能?)它只需要一个参数,那么这是如何传递两个参数的呢?
最合适的回答,由SO网友:kaiser 整理而成
之间的一般差异esc_attr
和esc_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\' )
避免其他三种版本。