Отключение переводов с помощью функции unload_textdomain() в WordPress

UNLOAD_TEXTDOMAIN() │ WP 3.0.0

Функция unload_textdomain() используется для отключения переводов для текстового домена (text domain) в WordPress. Это может быть полезно, когда вы хотите отключить переводы для определенных плагинов или тем.

Хуки функции

  • override_unload_textdomain
  • unload_textdomain

Возвращаемое значение

  • true или false: возвращает, удалось ли отключить текстовый домен.

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

Для вызова функции используется следующий синтаксис:

unload_textdomain( $domain, $reloadable );
  • $domain (строка) (обязательный): текстовый домен. Уникальный идентификатор для получения переведённых строк.
  • $reloadable (логическое) (необязательный): указывает, можно ли загрузить текстовый домен снова. По умолчанию: false.

Примеры

Пример 1: Отключение перевода плагина

Предположим, у вас есть плагин, который включает файл перевода через load_plugin_textdomain('books', ...). Если вы хотите отключить перевод этого плагина, вы можете сделать это следующим образом:

add_action( 'init', 'my_unload_textdomain' );

function my_unload_textdomain() {
    unload_textdomain('books');
}

Пример 2: Отключение перевода WordPress

Если вы не хотите, чтобы админ-панель переводилась, и предпочитаете использовать английский язык, но при этом хотите, чтобы перевод плагинов оставался, вы можете добавить следующий код в файл functions.php вашей темы:

add_action( 'init', 'my_unload_textdomain' );

function my_unload_textdomain() {
    // Отключение стандартного перевода WordPress
    unload_textdomain( 'default' );

    // Отключение перевода темы Twenty Fifteen
    unload_textdomain( 'twentyfifteen' );
}

Пример 3: Предотвращение отключения текстового домена

Если вам нужно предотвратить отключение текстового домена, используйте следующий код:

add_filter( 'override_unload_textdomain', 'myplugin_override_unload_textdomain' );

function myplugin_override_unload_textdomain( $override, $domain ) {
    if ( $domain === 'my-domain' ) {
        // Предотвращает отключение этого текстового домена
        $override = true;
    }

    return $override;
}

С этим кодом вызов unload_textdomain( 'my-domain' ) не сработает — перевод останется на месте.

Хук unload_textdomain

Перед отключением текстового домена вызывается следующий код, чтобы уведомить WordPress об этом действии:

add_action( 'unload_textdomain', 'myplugin_unload_textdomain' );

function myplugin_unload_textdomain( $domain ) {
    // Здесь можно обработать отключение текстового домена
}

Заметки

  • Глобальная переменная $l10n: массив всех загруженных текстовых доменов.
  • Глобальная переменная $l10n_unloaded: массив всех текстовых доменов, которые были отключены.

Изменения

  • С 3.0.0: Функция была введена.
  • С 6.1.0: Добавлен параметр $reloadable.

Исходный код функции unload_textdomain

function unload_textdomain( $domain, $reloadable = false ) {
    global $l10n, $l10n_unloaded;

    $l10n_unloaded = (array) $l10n_unloaded;

    $plugin_override = apply_filters( 'override_unload_textdomain', false, $domain, $reloadable );

    if ( $plugin_override ) {
        if ( ! $reloadable ) {
            $l10n_unloaded[ $domain ] = true;
        }
        return true;
    }

    do_action( 'unload_textdomain', $domain, $reloadable );

    if ( ! $reloadable ) {
        WP_Translation_Controller::get_instance()->unload_textdomain( $domain );
    }

    if ( isset( $l10n[ $domain ] ) ) {
        if ( $l10n[ $domain ] instanceof NOOP_Translations ) {
            unset( $l10n[ $domain ] );
            return false;
        }
        unset( $l10n[ $domain ] );

        if ( ! $reloadable ) {
            $l10n_unloaded[ $domain ] = true;
        }

        return true;
    }

    return false;
}

Теперь вы знаете, как использовать функцию unload_textdomain() для управления переводами в WordPress. Вы можете отключать ненужные переводы и оптимизировать р��боту своего сайта.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *