Подключить динамическую смену языка Яндекс.Карт на мультиязычном Wordpress сайте

Есть мультиязычный Wordpress сайт с кастомной темой, где одна из страниц со встроенной Яндекс картой. Как динамически менять язык карты в зависимости от языка сайта в данный момент? Пробовал несколько вариантов, например:

var script;
var body = document.getElementsByTagName('body')[0];
var language = window.icl_lang;

    script = document.createElement('script');
    script.type = 'text/javascript';
    script.charset = 'utf-8';
    script.src = 'https://api-maps.yandex.ru/2.1/?lang=' + language + '_RU';
    body.appendChild(script);
    window['ready'] = function () {
        init(window['ymaps']);
    }

Или

var head = document.getElementsByTagName('head')[0];
var script;
var language = document.getElementsByTagName('html')[0].getAttribute('lang');

if (language === "ru"){
  script = document.createElement('script');
  script.type = 'text/javascript';
  script.charset = 'utf-8';
  script.src = 'https://api-maps.yandex.ru/2.1/?lang=ru_RU';
  head.appendChild(script);
} else {
  script = document.createElement('script');
  script.type = 'text/javascript';
  script.charset = 'utf-8';
  script.src = 'https://api-maps.yandex.ru/2.1/?lang=en_RU';
  head.appendChild(script);
}

И так:

var language = document.getElementsByTagName('html')[0].getAttribute('lang');

if (language === "ru"){
  $("#ymap-lang").attr("src","https://api-maps.yandex.ru/2.1/?lang=ru_RU");
} else {
  $("#ymap-lang").attr("src","https://api-maps.yandex.ru/2.1/?lang=en_RU");
}

При этом сам скрипт работает, но по итогу карту не загружает и выдает Uncaught ReferenceError: ymaps is not defined. Если декларировать просто:

<script src="https://api-maps.yandex.ru/2.1/?lang=en_RU" type="text/javascript"></script>

или ru_RU – то все работает.

Подскажите в чем может быть проблема и как ее исправить?


Ответы (1 шт):

Автор решения: WP Punk

При подключении скрипта яндекс карт просто определяйте текущую версию сайта на стороне php. Примерно так:

add_action( 'wp_enqueue_scripts', 'my_wp_enqueue_scripts' );
function my_wp_enqueue_scripts() {
    $lang = get_current_language(); //Или другую ф-цию, которая зависит от того, какой плагин вы используете
    wp_enqueue_script( 'yandex-maps-api', 'https://api-maps.yandex.ru/2.1/?lang=' . $lang, [], '1.0.0', true );
}
→ Ссылка