Какая разница между esc_html, esc_attr, esc_html_e, _e() и другими?
Уже давно не давал мне покоя вопрос в чем разница между функциями _e() и esc_html_e… Но я везде использовал _e() и не парился, пока не столкнулся с необходимостью использовать в шаблоне esc_html_e(), тогда то и пришлось разбираться что к чему.
Все данные взяты из документации wp-includes/l10.php.
Собственно разберемся как работают функции, которые используются для локализации в CMS WordPress.
Пример использования:
<?php _e('Close menu', 'dc'); ?>
где
_e() — функция локализации для перевода строки,
‘Close menu’ — строка для перевода,
‘dc’ — домен (идентификатор) по которому получаем перевод.
На выходе мы получим фразу Close menu
или ее перевод, если локализация настроена на сайте.
Функция __()
Пример:
<?php echo __('Close menu', 'dc'); ?>
Функция возвращает результат перевода строки.
Если в строке будут html-теги, то в переводе они останутся без изменения.
<?php echo __('<p style="color: red;">Close menu</p>', 'dc'); ?>
Вернет:
<p style="color: red;">Close menu</p>
Результат на фронте:
Close menu
Документация:
// Retrieve the translation of $text.
function __( $text, $domain = 'default' ) {
return translate( $text, $domain );
}
Функция esc_attr__()
Используется для атрибутов html тегов. Переводит указанную строку и обрабатывает её функцией esc_attr()
.
Функция esc_attr()
предназначена для фильтрации строки, которую планируется выводить в значениях html атрибутов.
Кодирует < > & " '
(больше, меньше, амперсанд, кавычки двойные и одинарные). Не создает двойного преобразования.
Можно использовать в качестве фильтра выводимых данных для <input>
полей формы:
<input type="text" value="<?php echo esc_attr__( 'Default value', 'dc' ) ?>">
Если в строке будут символы < > & " '
то они будут преобразованы в:
< > & " '
Например:
<?php echo esc_attr__('You can use <s> <em> <strong>', 'dc'); ?>
В исходном коде получим:
You can use <s> <em> <strong>
А в браузере символы отобразятся в соответствии с кодировкой:
You can use <s> <em> <strong>
Документация:
// Retrieve the translation of $text and escapes it for safe use in an attribute.
function esc_attr__( $text, $domain = 'default' ) {
return esc_attr( translate( $text, $domain ) );
}
Функция esc_html__()
Документация:
// Retrieve the translation of $text and escapes it for safe use in HTML output.
function esc_html__( $text, $domain = 'default' ) {
return esc_html( translate( $text, $domain ) );
}
Функция _e()
Документация:
// Display translated text.
function _e( $text, $domain = 'default' ) {
echo translate( $text, $domain );
}
Функция esc_attr_e()
Документация:
// Display translated text.
function esc_attr_e( $text, $domain = 'default' ) {
echo esc_attr( translate( $text, $domain ) );
}
Функция esc_html_e()
Документация:
// Display translated text that has been escaped for safe use in HTML output.
function esc_html_e( $text, $domain = 'default' ) {
echo esc_html( translate( $text, $domain ) );
}
Функция _x()
Документация:
// Retrieve translated string with gettext context.
function _x( $text, $context, $domain = 'default' ) {
return translate_with_gettext_context( $text, $context, $domain );
}
Функция _ex()
Документация:
// Display translated string with gettext context.
function _ex( $text, $context, $domain = 'default' ) {
echo _x( $text, $context, $domain );
}
Функция esc_attr_x()
Документация:
// Translate string with gettext context, and escapes it for safe use in an attribute.
function esc_attr_x( $text, $context, $domain = 'default' ) {
return esc_attr( translate_with_gettext_context( $text, $context, $domain ) );
}
Функция esc_html_x()
Документация:
// Translate string with gettext context, and escapes it for safe use in HTML output.
function esc_html_x( $text, $context, $domain = 'default' ) {
return esc_html( translate_with_gettext_context( $text, $context, $domain ) );
}
https://wordpress.stackexchange.com/questions/321307/what-s-the-difference-between-esc-html-esc-attr-esc-html-e-and-so-on
https://stackoverflow.com/questions/38662525/when-to-use-and-esc-html-e
https://core.trac.wordpress.org/browser/tags/4.5.3/src/wp-includes/l10n.php#L0
function __( $text, $domain = 'default' ) {
return translate( $text, $domain );
}
function esc_html_e( $text, $domain = 'default' ) {
echo esc_html( translate( $text, $domain ) );
}
Для перевода сайта используем Loco Translate. В файл функций добавляем такой код: В это коде:…
Суть проблемы — при добавлении кода в визуальном редакторе с помощью плагина SyntaxHighlighter символ &…
Задаем отдельный формат для комментариев в дочерней теме. Сами комментарии подключаем стандартным вызовом: В файле…
Выводим список терминов, к которым относится данный кастомный тип записи (custom post type): где my_custom_taxonomy…