Хук gettext_with_context
в WordPress используется для изменения перевода текста с учетом контекста. Это важно, когда одно и то же слово может иметь разные значения в зависимости от места использования. Например, слово «Directions» может означать «направления на карте» или «инструкции по рецепту». Контекст помогает переводчикам правильно интерпретировать такие фразы, а фильтр gettext_with_context
дает возможность изменять переводы для конкретных случаев.
apply_filters( ‘gettext_with_context’, string $translation, string $text, string $context, string $domain )
Параметры Хука gettext_with_context
$translation
— строка переведенного текста.$text
— оригинальный текст для перевода.$context
— строка контекста для перевода (например, «post status» или «directions on map»).$domain
— текстовый домен, идентификатор для нахождения нужного перевода.
Пример 1: Замена Текста Статуса Записи
Допустим, вы хотите изменить стандартное слово «Pending» в статусе записи на «Ожидает модерации», но только для статуса записи. Для этого мы можем использовать gettext_with_context
и указать нужный контекст.
add_filter( 'gettext_with_context', 'modify_pending_status_text', 10, 4 );
function modify_pending_status_text( $translation, $text, $context, $domain ) {
if ( 'Pending' === $text && 'post status' === $context && 'default' === $domain ) {
$translation = 'Ожидает модерации';
}
return $translation;
}
Здесь мы проверяем, что текст совпадает с «Pending», контекст — «post status», а домен — default
. Только при этих условиях перевод будет заменен.
Пример 2: Кастомизация Названий Кнопок в Форме Комментариев
Представим, что на вашем сайте используется кнопка с текстом «Reply» и вы хотите изменить его на «Ответить» только в контексте формы комментариев, но не в других местах.
add_filter( 'gettext_with_context', 'change_reply_button_text', 10, 4 );
function change_reply_button_text( $translation, $text, $context, $domain ) {
if ( 'Reply' === $text && 'comment form button' === $context && 'theme_domain' === $domain ) {
$translation = 'Ответить';
}
return $translation;
}
Этот фильтр изменит текст кнопки на «Ответить» только при соблюдении всех условий, включая контекст и текстовый домен темы theme_domain
.
Пример 3: Изменение Надписи на Кнопке в Мобильной Навигации
Предположим, что в мобильной версии вашего сайта для кнопки навигации используется текст «Menu». Для улучшения интерфейса вы хотите изменить текст на «Меню» только в мобильном контексте.
add_filter( 'gettext_with_context', 'customize_mobile_menu_text', 10, 4 );
function customize_mobile_menu_text( $translation, $text, $context, $domain ) {
if ( 'Menu' === $text && 'mobile navigation button' === $context && 'theme_domain' === $domain ) {
$translation = 'Меню';
}
return $translation;
}
Такой подход позволяет менять текст только для мобильной навигации, не затрагивая другие места, где может использоваться слово «Menu».
Советы по Оптимизации Использования gettext_with_context
- Определение Контекста. Обязательно проверяйте контекст, чтобы избежать ненужных изменений и улучшить производительность.
- Ограничение на Определенные Доменные Зоны. Проверка текстового домена помогает фильтру срабатывать только для нужного раздела сайта, не влияя на другие плагины и темы.
- Оптимизация для Админки и Пользовательских Страниц. Используйте условия
is_admin()
или!is_admin()
, если необходимо изменять текст только в панели администратора или только на публичных страницах сайта.
Заключение
Хук gettext_with_context
— это мощный способ изменить переводы с учетом контекста. Это особенно полезно, когда одно и то же слово используется в разных ситуациях, требуя точной настройки для каждого случая.