Подключить динамическую смену языка Яндекс.Карт на мультиязычном 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 );
}