#jquery #wordpress #wpml
#jquery #wordpress #wpml
Вопрос:
Я пытаюсь отобразить ссылку условно в файле .JS в WordPress, используя WPML. Я пробовал следующее, но теперь работает;
var getLangCode = <?php echo '"' . ICL_LANGUAGE_CODE . '"' ; ?>; //WPML code to detect site's language. Getting error on this line
if (getLangCode === 'en-US') {
var imagesPath = 'https://website-domain.com/file-name.jpg';
}else if (getLangCode === 'fr-FR') {
var imagesPath = 'https://website-domain.com/fr/file-name.jpg';
}
Я получаю следующую ошибку в приведенной выше строке Uncaught SyntaxError: Unexpected token <
Я использую ссылку для добавления изображения и текста в контейнер… текст работает нормально, так как я использовал wp_localize_script
для перевода строки, но когда я переключаюсь на французский, изображение больше не отображается, потому что ссылка теперь содержит fr
Любая помощь по исправлению этого была бы высоко оценена
Комментарии:
1. Первая строка кода включает PHP, который не обрабатывается внутри js-файла. Есть обходные пути, но именно поэтому вы получаете эту ошибку.
2. спасибо за разъяснение, не могли бы вы, пожалуйста, указать правильное направление для исправления ошибки?
3. Еще бы. Смотрите эту статью: wordpress.stackexchange.com/questions/96370 /…
4. Перешел по ссылке и до сих пор не знаю, как я могу использовать wp_localize_script для решения моего вопроса… Я уже использую функцию для локализации содержимого в файле JS (как указано в моем вопросе), но понятия не имею, как сделать эту условную ссылку тем же методом
Ответ №1:
Поскольку вы уже используете wp_localize_script, я бы использовал это для передачи не только переводов, но и вашего языкового кода, как указано в некоторых комментариях и руководстве. Вот так:
В WordPress
wp_enqueue_script( 'some_handler', get_template_directory_uri() . '/js/your_javascript.js' );
$dataToBePassedtoJS = array(
'language_code' => ICL_LANGUAGE_CODE,
'translate_string' => __( 'Translate me!', 'default' )
);
wp_localize_script( 'some_handler', 'php_vars_for_js', $dataToBePassedtoJS );
// the 'php_vars_for_js' will be an object in JS,
// it's properties will be the content of the dataToBePassedtoJS array.
В вашем javascript
(function($) {
"use strict";
// get the ICL_LANGUAGE_CODE passed by wp_localize_script's 'php_vars_for_js' to your JS:
var getLangCode = php_vars_for_js.language_code;
// show it in the console, just for fun
console.log ('ICL_LANGUAGE_CODE passed from WordPress: ' getLangCode);
// so now you have the getLangCode, you can use it for your conditional
if (getLangCode === 'en') {
var imagesPath = 'https://website-domain.com/file-name.jpg';
} else if (getLangCode === 'fr') {
var imagesPath = 'https://website-domain.com/fr/file-name.jpg';
}
}
}(jQuery));
Таким образом, вы можете получить любые необходимые переменные из WordPress PHP для передачи в ваш JS.
Комментарии:
1. Сработало, я рад, что сегодня узнал что-то новое. Я обновил ваш ответ до того, который работает. Код языка должен быть
en
,fr
а неen-US
,fr-FR
. Большое спасибо за то, что пролили свет на это
Ответ №2:
Попробуйте: 1) Удалить эту строку:
var getLangCode = <?php echo '"' . ICL_LANGUAGE_CODE . '"' ; ?>; //WPML code to detect site's language. Getting error on this line
2) Добавьте этот код в свой functions.php
add_action('wp_head', 'change_this_name');
function change_this_name() {
?>
<script type="text/javascript">
var getLangCode = <?php echo '"' . ICL_LANGUAGE_CODE . '"' ; ?>; //WPML code to detect site's language. Getting error on this line
</script>
<?php
};
Комментарии:
1. Ооо. Это, хотя и будет работать, не является способом WordPress…. смотрите code.tutsplus.com/tutorials /…
2. Протестировал этот метод, и он также работает, но перейдя на версию El Ackabar, поскольку она больше подходит для WordPress, как указано cale_b. Спасибо @Sergej