wp_localize_script() WP 2.2.0

Додає додаткові дані перед вказаним скриптом, який знаходиться у черзі на висновок.

Функція створена для додавання даних локалізації 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
(масив) (обов’язковий)
Дані перекладу. Дані можуть бути як в одновимірному, так і багатовимірному масиві.

Приклади

0

#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>
0

#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
0

#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 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 );
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *