Хук gettext
в WordPress позволяет перехватывать и изменять переводы текста. Он полезен, если требуется заменить определенные слова или фразы без изменения исходных файлов темы или плагина. Этот фильтр может обрабатывать переводы, добавленные функциями интернационализации, такими как __()
и _e()
. Однако стоит учитывать, что gettext
срабатывает для всех переводов, что может повлиять на производительность, особенно при наличии большого количества строк для перевода.
apply_filters( ‘gettext’, string $translation, string $text, string $domain )
Хук gettext
принимает три параметра:
$translation
— строка с переведенным текстом;$text
— оригинальный текст для перевода;$domain
— текстовый домен, идентификатор для нахождения переведенных строк.
Пример 1: Замена Текста в Формах Входа и Регистрации
Этот пример показывает, как заменить слово «Регистрация» на «Присоединиться» на странице входа в WordPress.
add_filter( 'gettext', 'custom_login_text', 10, 3 );
function custom_login_text( $translation, $text, $domain ) {
if ( 'Register' === $text && 'default' === $domain ) {
$translation = 'Присоединиться';
}
return $translation;
}
Здесь мы проверяем текст и домен, чтобы заменить только конкретное слово и не затрагивать другие переводы.
Пример 2: Кастомизация Полей Формы Комментариев
С помощью gettext
можно изменить названия полей «Имя» и «Электронная почта» в форме комментариев, чтобы они больше подходили для вашего проекта.
add_filter( 'gettext', 'custom_comment_field_labels', 10, 3 );
function custom_comment_field_labels( $translation, $text, $domain ) {
if ( 'theme_text_domain' === $domain && is_singular() ) {
switch ( $text ) {
case 'Name':
$translation = 'Ваше Имя';
break;
case 'Email':
$translation = 'Ваш E-mail';
break;
}
}
return $translation;
}
Фильтр срабатывает только на страницах с отдельными записями (условие is_singular()
), чтобы избежать замены текста в других местах сайта.
Пример 3: Удаление Определенного Текста в Админке
Иногда возникает необходимость убрать стандартный текст из административной панели. В этом примере мы удаляем описание «Дополнительные поля могут быть использованы для добавления метаданных к записи…» в редакторе записей.
add_filter( 'gettext', 'remove_custom_field_text', 10, 3 );
function remove_custom_field_text( $translation, $text, $domain ) {
$target_text = 'Дополнительные поля могут быть использованы для добавления метаданных к записи…';
if ( is_admin() && $text === $target_text ) {
$translation = '';
}
return $translation;
}
Советы по Оптимизации
- Проверка домена. Проверяйте текстовый домен, чтобы избежать лишних замен и ускорить работу сайта.
- Ограничение на определенные страницы. Используйте условия, такие как
is_admin()
илиis_singular()
, чтобы фильтр срабатывал только там, где это необходимо. - Избегайте частых операций. Для высоконагруженных страниц старайтесь минимизировать использование
gettext
, так как это может замедлить загрузку.
Заключение
Хук gettext
— мощный инструмент для точечной кастомизации интерфейса в WordPress. Используйте его осторожно, чтобы избежать влияния на производительность, особенно при работе с популярными плагинами, которые могут добавлять сотни строк для перевода.