WordPress как на ладони
rgbcode is looking for WordPress developers.

gettextхук-фильтрWP 2.0.11

Позволяет изменить строку (текст) перевода.

Использование

add_filter( 'gettext', 'wp_kama_gettext_filter', 10, 3 );

/**
 * Function for `gettext` filter-hook.
 * 
 * @param string $translation Translated text.
 * @param string $text        Text to translate.
 * @param string $domain      Text domain. Unique identifier for retrieving translated strings.
 *
 * @return string
 */
function wp_kama_gettext_filter( $translation, $text, $domain ){

	// filter...
	return $translation;
}
$translation(строка)
Переведённый текст. В файлах *.po помечен как msgstr.
$text(строка)
Текст для перевода. В файлах *.po помечен как msgid.
$domain(строка)
Текстовый домен. Уникальный идентификатор для получения переведенных строк. Указывается при подключении MO файла перевода в функции load_textdomain().

Примеры

0

#1 Заменим "Комментарии" на "Отзывы"

Заменим в админке на странице управления комментариями заголовок с "Комментарии" на "Отзывы".

На странице управления комментариями (edit-comments.php) слово "Комментарии" выводится с помощью этого кода:

_e( 'Comments' );

Функция _e() и некоторые другие работают на основе функции translate(), в которой срабатывает описываемый хук.

Так как через фильтр проходит огромное количество переводов, а нам необходимо перевести определенную фразу и только в нужном месте, то используем условие:

  • Запрашивается перевод слова "Comments"
  • Запрашивается домен default (перевод самого WordPress)
add_filter( 'gettext', 'filter_gettext', 10, 3 );

function filter_gettext( $translation, $text, $domain ) {
	if ( $text === 'Comments' && $domain === 'default' ) {
		$translation = 'Отзывы';
	}

	return $translation;
}

После применения фильтра
После применения фильтра

Возникает вопрос, почему на скриншотах слово "Комментарии" не изменились в правом меню? В файле wp-admin/menu.php мы можем найти код этого пункта меню:

$menu[25] = array(
	/* translators: %s: Number of comments. */
	sprintf( __( 'Comments %s' ), '<span class="awaiting-mod count-' . absint( $awaiting_mod ) . '"><span class="pending-count" aria-hidden="true">' . $awaiting_mod_i18n . '</span><span class="comments-in-moderation-text screen-reader-text">' . $awaiting_mod_text . '</span></span>' ),
	'edit_posts',
	'edit-comments.php',
	'',
	'menu-top menu-icon-comments',
	'menu-comments',
	'dashicons-admin-comments',
);

То есть, фраза для переводов здесь уже Comments %s, а значит наш код должен быть таким:

add_filter( 'gettext', 'filter_gettext', 10, 3 );

function filter_gettext( $translation, $text, $domain ) {
	if ( $text === 'Comments %s' && $domain === 'default' ) {
		$translation = 'Отзывы %s';
	}

	return $translation;
}

Список изменений

С версии 2.0.11 Введена.

Где вызывается хук

translate()
gettext
wp-includes/l10n.php 197
$translation = apply_filters( 'gettext', $translation, $text, $domain );

Где используется хук в WordPress

Использование не найдено.
campusboy 4736youtube.com/c/wpplus
Создатель YouTube канала wp-plus, на котором делюсь своим опытом. Активный пользователь wp-kama.ru. WordPress-разработчик. Разработка сайтов и лендингов. Доработка существующих проектов. Сопровождение ресурсов.
Редакторы: Kama 9598
4 комментария
    Войти