wp_localize_script()
Додає додаткові дані перед вказаним скриптом, який знаходиться у черзі на висновок.
Функція створена для додавання даних локалізації JS скрипту. Ця функція реєструє дані для зазначеного скрипта, потім перед виведенням (підключенням) самого скрипту вказані в цій функції дані виводяться в тезі <script> у вигляді JS об’єкта.
Цю функцію потрібно викликати:
- після того, як скрипт був зареєстрований. wp_register_script () .
- або після того, як скрипт був доданий у чергу на висновок. wp_enqueue_script () .
- або якщо скрипт вже існує в WordPress.
Якщо скрипт вже виведено на екран і лише потім використовується ця функція, нічого не станеться.
Іншими словами, скрипт, до якого підключається ця функція обов’язково має бути:
- вже зареєстровано за допомогою функції wp_register_script()
- та/або має бути доданий у чергу на виведення за допомогою wp_enqueue_script() .
При цьому на момент використання цієї функції скрипт до якого ця функція підключається, ще не повинен бути виведений. У коді це має виглядати так:
// реєструємо скрипт wp_register_script( $id, ... ) // додаємо дані до зареєстрованого скрипту wp_localize_script( $id, ... ) // плануємо скрипт висновку wp_enqueue_script( $id )
Або якщо так, коли скрипт одразу планується на висновок (без попередньої реєстрації):
// реєструємо та плануємо скрипт на висновок wp_enqueue_script( $id, ... ) // додаємо дані до зареєстрованого скрипту wp_localize_script( $id, ... )
Цю функцію потрібно викликати через хуки, тому що на момент спрацьовування цих хуків зазвичай усі скрипти зареєстровані, але ще не виведені в HTML:
wp_enqueue_scripts , якщо потрібно викликати функцію в передній частині сайту (фронт-енде).
admin_enqueue_scripts , щоб викликати в адміністративній частині.
- login_enqueue_scripts – для сторінки авторизації.
Цю функцію часто використовують для додавання додаткових даних до скрипту , а не для підключення даних локалізації. Наприклад, при підключенні слайдера перед ним підключаються його налаштування.
Так робити не рекомендується! Використовуйте цю функцію лише для локалізації, а для додавання додаткових даних використовуйте Приклад . _
Дані у підсумковому Javascript будуть передані як текст.
Якщо потрібно обробити числа, ви повинні використовувати функцію parseInt() у скрипті:
<script> FinalZoom = map.getBoundsZoomLevel( bounds ) - parseInt( data.a_value ); </script>
ВИКЛЮЧЕННЯ. Якщо $handle вказати jquery то локалізація буде підключатися до скрипту jquery-core .
Але якщо ви перевизначили підключення jquery (вказали, що підключати його потрібно із зовнішнього ресурсу, тобто видалили базовий варіант підключення в WordPress і вказали свій), то скрипт jquery-core буде відключений, а це означає, що локалізація не спрацює, тому що вона підключається до jquery-core , якого вже немає.
Щоб однозначно уникнути обох цих нестиковок, треба зробити так
add_action( 'wp_enqueue_scripts', 'front_scripts'); function front_scripts(){ $jquery_url = 'https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js'; wp_deregister_script( 'jquery-core'); wp_deregister_script('jquery'); wp_register_script( 'jquery-core', $jquery_url, false, null, true ); wp_register_script( 'jquery', false, [ 'jquery-core' ], null, true ); }
WP_Scripts::localize()
Хуків немає.
Повертає
true|false
.
Використання
wp_localize_script( $handle, $object_name, $l10n );
-
$handle
(рядок) (обов’язковий) - Назва скрипта, перед яким буде додано дані. Скрипт має бути зареєстрований заздалегідь.
-
$object_name
(рядок) (обов’язковий) -
Назва Javascript об’єкта, який міститиме дані. Назва має бути унікальною, щоб не викликати конфліктів з іншими скриптами! У назві не можна використовувати тире
-
, тільки латиницю
a-zA-Z
, підкреслення
_
, а також можна приміряти метод “верблюжого реєстру” (CamelCase). -
$l10n
(масив) (обов’язковий) - Дані перекладу. Дані можуть бути як в одновимірному, так і багатовимірному масиві.
Приклади
#1 Вставка глобальних даних
Приклад вставки глобальних JavaScript даних перед робочим скриптом (у прикладі робочий скрипт це jquery). Вставляємо цей код у functions.php:
add_action( 'wp_enqueue_scripts', 'action_function_name_7714', 99); function action_function_name_7714(){ wp_localize_script( 'jquery', 'object_name', array( 'some_string' => __( 'Some string to translate' ), 'some_num' => '10' ))); }
Отримаємо в head частини сайту:
<script type='text/javascript'> /* <![CDATA[ */ var object_name = {"some_string":"Some string to translate","some_num":"10"}; /* ]]> */ </script> <script type='text/javascript' src='http://example.com/wp-includes/js/jquery/jquery.js?ver=1.8.3'></script>
#2 Не використовуйте для даних {#datapass-eg}
wp_localize_script() рекомендується використовувати тільки для передачі рядків локалізації, а не для передачі даних – об’єкта, який використовуватиме ваш скрипт. Для передачі краще використовувати wp_add_inline_script() .
Розглянемо з прикладу:
Раніше ви могли (і досі можете) зробити наступне:
wp_enqueue_script( 'my-script', 'https://url-to/my-script.js' ); wp_localize_script( 'my-script', 'MYSCRIPT', array( 'ajaxUrl' => admin_url( 'admin-ajax.php' ), 'otherParam' => 'some value', )));
Але краще робити це так, тому що в цьому випадку ми зберігаємо типи переданих даних і, наприклад, числа залишаться числами, а не перетворяться на рядки:
wp_enqueue_script( 'my-script', 'https://url-to/my-script.js' ); $ data = [ 'ajaxUrl' => admin_url( 'admin-ajax.php' ), 'param_one' => 'some value', 'param_two' => 25, ]; wp_add_inline_script( 'my-script', 'const myScriptData = ' . wp_json_encode( $data ), 'before' );
Зверніть увагу, що потрібно додати ‘before’ як третій параметр.
Тепер у JS-скрипті ці дані можна отримати так:
console.log(myScriptData.ajaxUrl); // "https://site.com/wp-admin/admin-ajax.php" console.log(myScriptData.param_one); // "some value" console.log(myScriptData.param_two); // 25
#3 Визначимо файл обробник AJAX запитів
Додамо скрипт, а потім глобальні дані до нього. Тут ми додаємо Javascript файл з AJAX запитом. У файлі використовується змінна MyAjax.ajaxurl, як URL для направлення запиту AJAX. Цей URL ми визначимо через wp_localize_script():
add_action( 'wp_enqueue_scripts', 'action_function_name_7714'); function action_function_name_7714(){ wp_enqueue_script( 'my-ajax', get_template_directory_uri() . '/js/custom_script.js' ); wp_localize_script( 'my-ajax', 'MyAjax', [ 'ajaxurl' => admin_url( 'admin-ajax.php' ) ] )); }
отримаємо:
<script type='text/javascript'> /* <![CDATA[ */ var MyAjax = {"ajaxurl":"http://example.com/wp-admin/admin-ajax.php"}; /* ]]> */ </script> <script type='text/javascript' src='http://example.com/wp-content/themes/twentyeleven/js/custom_script.js?ver=3.5'></script>
Доступ до змінних Javascript здійснюється так (для прикладу 2):
<script> // у файлі custom_script.js ми можемо використовувати змінну: MyAjax.ajaxurl alert (MyAjax.ajaxurl); // виведе http://example.com/wp-admin/admin-ajax.php </script>
нотатки
- Дивіться: WP_Scripts::localize()
- Global. WP_Scripts. $wp_scripts WP_Scripts object for printing scripts.
список змін
З версії 2.2.0 | Введено. |
Код wp_localize_script() wp localize script WP 6.0.2
function wp_localize_script( $handle, $object_name, $l10n ) { global $wp_scripts; if ( ! ( $wp_scripts instanceof WP_Scripts ) ) { _wp_scripts_maybe_doing_it_wrong( __FUNCTION__, $handle ); return false; } return $wp_scripts->localize( $handle, $object_name, $l10n ); }