override_load_textdomainхук-фильтрWP 2.9.0

Позволяет переопределить загрузку .mo-файла перевода для указанного текстового домена.

Этот фильтр позволяет разработчикам полностью заменить стандартную процедуру загрузки переводов. Если фильтр возвращает true, WordPress не будет загружать файл перевода самостоятельно, предполагая, что это уже сделано.

Фильтр полезен для реализации кастомной логики загрузки переводов, например, для использования кэшированных версий файлов перевода или полной отмены загрузки переводов для определённых доменов.

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

add_filter( 'override_load_textdomain', 'wp_kama_override_load_textdomain_filter', 10, 4 );

/**
 * Function for `override_load_textdomain` filter-hook.
 * 
 * @param bool        $override Whether to override the .mo file loading.
 * @param string      $domain   Text domain. Unique identifier for retrieving translated strings.
 * @param string      $mofile   Path to the MO file.
 * @param string|null $locale   Locale.
 *
 * @return bool
 */
function wp_kama_override_load_textdomain_filter( $override, $domain, $mofile, $locale ){

	// filter...
	return $override;
}
$override(bool)
Нужно ли переопределить загрузку .mo - файла.
По умолчанию: false
$domain(string)
Текстовый домен, для которого загружается перевод.
$mofile(string)
Полный путь к .mo-файлу.
$locale(string|null)
Локаль, для которой загружается перевод. С версии 6.2.0.

Примеры

1

#1 Загрузка кастомного .mo-файла из альтернативного пути

Заменяем стандартный путь к .mo-файлу на собственный:

add_filter( 'override_load_textdomain', 'load_custom_mo_file', 10, 4 );

function load_custom_mo_file( $override, $domain, $mofile, $locale ) {
	if ( 'my-plugin' === $domain ) {
		$custom_mofile = WP_CONTENT_DIR . "/custom-languages/{$domain}-{$locale}.mo";

		if ( file_exists( $custom_mofile ) ) {
			load_textdomain( $domain, $custom_mofile );

			return true;
		}
	}

	return $override;
}
1

#2 Использование кэшированных переводов для повышения производительности

Загружаем переводы из кэша, если они доступны:

add_filter( 'override_load_textdomain', 'load_cached_translations', 10, 4 );

function load_cached_translations( $override, $domain, $mofile, $locale ) {
	$cache_key = "translations_{$domain}_{$locale}";
	$cached_translations = get_transient( $cache_key );

	if ( false !== $cached_translations ) {
		$mo = new MO();
		$mo->import_from_reader( new POMO_StringReader( $cached_translations ) );
		$GLOBALS['l10n'][ $domain ] = & $mo;

		return true;
	}

	return $override;
}

В этом примере предполагается, что переводы были ранее сохранены в кэш с помощью set_transient().

Смотрите также код проекта https://github.com/pressjitsu/pomodoro/ который кэширует переводы в PHP файлы.

0

#3 Отключение загрузки переводов для определённых доменов

В этом примере мы полностью отключаем загрузку переводов для указанных доменов:

add_filter( 'override_load_textdomain', 'disable_translations_for_domains', 10, 4 );
function disable_translations_for_domains( $override, $domain, $mofile, $locale ) {
	$disabled_domains = [ 'my-plugin', 'my-theme' ];

	if ( in_array( $domain, $disabled_domains, true ) ) {
		return true;
	}

	return $override;
}

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

С версии 2.9.0 Введена.
С версии 6.2.0 Added the $locale parameter.

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

load_textdomain()
override_load_textdomain
wp-includes/l10n.php 769
$plugin_override = apply_filters( 'override_load_textdomain', false, $domain, $mofile, $locale );

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

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