wp_enqueue_script() WP 2.1.0

Правильно підключає скрипт (JavaScript файл) на сторінку.

Використовувати цю функцію для підключення js файлів важливо, тому що так ви зможете без зайвих проблем об’єднувати JS файли в один. Також у деяких випадках позбавтеся конфліктів скриптів, коли залежний скрипт підключається до основного (того від якого він залежить).

Функція додає скрипт, тільки якщо він ще не був доданий та інші скрипти, від яких він залежить, зареєстровані. Залежні скрипти додаються автоматично.

ВАЖЛИВО! Це помилка розробників-початківців. Функція нічого не виведе, якщо тема не використовує wp_footer() . Саме під час виклику цих функцій спрацьовує хук, який додає скрипти.

Якщо скрипт уже зареєстрований за допомогою wp_register_script() , то для його підключення в цій функції потрібно вказати лише ідентифікатор скрипта (у першому параметрі).

// jquery реєструється в WP за промовчанням.
// Тому для його підключення достатньо одного рядка:
wp_enqueue_script('jquery');

Якщо скрипт не зареєстрований, його можна зареєструвати і підключити однією функцією – wp_enqueue_script() :

wp_enqueue_script('newscript', get_template_directory_uri() . '/js/custom_script.js');

З версії 3.3. wp_enqueue_script() можна викликати під час створення сторінки. В цьому випадку скрипт буде підключений в підвалі, в момент спрацювання події wp_footer .

Функція зазвичай викликається під час наступних подій (вішатися на хуки):

  • wp_script_add_data() — використовуйте цю функцію, коли потрібно підключити скрипт із умовою, наприклад, <!--[if lt IE 9]>...<![endif]-->.
  • wp_add_inline_script() — використовуйте цю функцію, коли потрібно додати JS код із PHP.

У версії 3.5 WordPress змінив положення про мінімізацію скриптів та CSS стилів. До цього мінімізовані файли мали розширення: .jsі .css, відповідно, а чи не мінімізовані .dev.jsі .dev.css. Тепер мінімізовані файли мають розширення: .min.jsі .min.css, а звичайні .jsі .css.


Повертає

null. Нічого не вертає.


Використання

wp_enqueue_script($handle, $src, $deps, $ver, $in_footer);

Шаблон використання

//add_action( 'admin_enqueue_scripts', 'my_scripts_method');
//add_action( 'login_enqueue_scripts', 'my_scripts_method');
add_action( 'wp_enqueue_scripts', 'my_scripts_method' );
function my_scripts_method(){
	wp_enqueue_script( 'newscript', get_template_directory_uri() . '/js/custom_script.js');
}
$handle
(рядок) (обов’язковий)

Назва скрипта (робоча назва). Рядок у нижньому регістрі.

Якщо рядок містить знак запитання (?): scriptaculous?v=1.2 , то попередня частина буде назвою скрипта, а все, що потім буде додано в УРЛ як параметри запиту. Так можна вказувати версію скрипта, що підключається.

$src
(рядок)

УРЛ файл скрипт. Наприклад: http://example.com/wp-content/themes/my-theme/my-theme-script.js .

Цей параметр необхідний лише тоді, коли скрипт не зареєстрований та WordPress ще не знає про цей скрипт, дивіться функцію wp_register_script() .

Не потрібно писати УРЛ жорстко, він має визначатися динамічно. Для цього використовуйте функції отримання URL:

Посилання на зовнішні скрипти можна вказувати без зазначення протоколу: //otherdomain.com/js/their-script.js .

Вже зареєстровані у WP скрипти дивіться нижче у цій статті.

За замовчуванням: ”

$deps
(масив)
Масив назв скриптів яких залежить цей скрипт; скрипти, які повинні бути завантажені перед цим скриптом. Цей параметр необхідний лише у випадку, якщо WordPress ще не знає про цей скрипт.


За замовчуванням: array()
$ver
(рядок)

Рядок вказує версію скрипта, якщо вона має. Цей параметр використовується для того, щоб переконатися, що клієнт отримав вірну версію скрипту, а не кеш.

Якщо параметр не вказано, то як версія скрипта буде використана версія WordPress.

Якщо вказати null , то жодна версія не буде додана.

Типово: false

$in_footer
(логічний)

Підключити скрипт до підвалу?

Зазвичай скрипт підключається до <head> документа, якщо вказати true, то скрипт буде підключений перед тегом </body> , точніше там де викликається тег шаблону wp_footer() .

Якщо через залежність від інших скриптів немає можливості підключити поточний скрипт у підвалі, то ця зміна буде проігнарована.

Для зрозумілого читання коду замість true можна вказати будь-який рядок, наприклад ‘in_footer’.

Типово: false


Приклади

2

#1 Завантажуємо базовий скрипт WordPress із нестандартної адреси.

Допустимо, ви хочете замість бібліотеки jQuery зі складу WordPress підключити її CDN-копію. Додати цей код до файлу functions.php активної теми:

add_action( 'wp_enqueue_scripts', 'my_scripts_method', 11);
function my_scripts_method() {
	wp_deregister_script('jquery');
	wp_register_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js');
	wp_enqueue_script('jquery');
}

Використовуючи фільтр wp_enqueue_scripts (замість фільтру init, на який посилаються деякі статті на сторонніх сайтах), ми уникаємо реєстрації альтернативної версії jQuery на сторінках адмінки, що, серед іншого, знижує ризик порушення роботи редактора записів.

2

#2 Динамічне визначення версії файлу

Щоб змінити файл, URL файлу відрізнявся і він завантажився в браузер як новий, а не брався з кешу, можна вказати версію файлу динамічно на основі часу зміни файлу:

add_action('wp_enqueue_scripts', 'my_scripts_method');
function my_scripts_method() {
	wp_enqueue_script('custom-script',
		get_template_directory_uri() . '/js/custom_script.js',
		array('jquery'),
		filemtime( get_theme_file_path('js/custom_script.js') )
	);
}

Продуктивність filemtime() дуже висока – на SSD диску 0,5 с на 50к ітерацій – це дуже швидко!

0

#3 Завантажуємо штатний скрипт scriptaculous.

// На зовнішній частині сайту (у темі оформлення)
add_action( 'wp_enqueue_scripts', 'my_scripts_method' );
function my_scripts_method() {
	wp_enqueue_script('scriptaculous');
}
0

#4 Реєструємо та підключаємо свій скрипт, що залежить від jQuery

Зареєструємо та додамо новий скрипт, який залежить від jquery (це також викликає завантаження jquery на сторінці):

add_action( 'wp_enqueue_scripts', 'my_scripts_method' );
function my_scripts_method() {
	$script_url = plugins_url( '/js/newscript.js', __FILE__ );
	wp_enqueue_script('custom-script', $script_url, array('jquery') );
}
0

#5 Підвантажуємо скрипт тільки для потрібних типів сторінок

Допустимо нам потрібно використовувати умовні теги, щоб підвантажити свій скрипт scriptaculous. Тоді ми можемо підключитися на хук wp , в момент його спрацьовування ми вже можемо використовувати умовні теги, тому через нього ми можемо визначити для яких типів сторінок підключити скрипт, а для яких немає:

add_action('wp', 'add_my_script_where_it_necessery');
function add_my_script_where_it_necessery(){
	if( is_single() )
		add_action( 'wp_enqueue_scripts', 'my_scripts_method' );
}
function my_scripts_method() {
	$script_url = plugins_url( '/js/newscript.js', __FILE__ );
	wp_enqueue_script('newscript', $script_url, array('scriptaculous'));
}
0

#6 Завантажуємо в темі скрипт, який залежить від скрипту WordPress

Часто потрібно, щоб перед JavaScript-файлами, що постачаються з темою оформлення, був завантажений інший JavaScript-файл. WordPress надає API, що дозволяє під час реєстрації скрипта вказати його залежності. Наприклад, тема з наведеним нижче кодом вимагає, щоб перед скриптом custom_script.js була завантажена бібліотека jQuery:

add_action('wp_enqueue_scripts', 'my_scripts_method');
function my_scripts_method() {
	wp_enqueue_script('custom-script',
		get_template_directory_uri() . '/js/custom_script.js',
		array('jquery')
	);
}
0

#7 Завантажуємо скрипти плагіна тільки на його сторінках

add_action( 'admin_menu', 'my_plugin_admin_menu');
function my_plugin_admin_menu() {
	// Реєструємо сторінку плагіна
	$page = add_submenu_page(
		'edit.php', // Батьківська сторінка меню
		__( 'Мій плагін', 'myPlugin' ), // Назва пункту меню
		__( 'Мій плагін', 'myPlugin' ), // Заголовок сторінки
		'manage_options' // Можливість, що визначає рівень доступу до пункту
		'my_plugin-options', // Ярлик (частина адреси) сторінки плагіна
		'my_plugin_manage_menu' // Функція, яка виводить сторінку
	);

	// Використовуємо зареєстровану сторінку для завантаження скрипту
	add_action( 'load-' . $page, 'my_plugin_admin_scripts' );
}

## Ця функція буде викликана тільки на сторінці плагіна, підключаємо скрипт
function my_plugin_admin_scripts() {
	wp_enqueue_script( 'my-plugin-script', plugins_url('/script.js', __FILE__) );
}

function my_plugin_manage_menu() {
	// Виводимо сторінку плагіна
}
0

#8 Як підключити jquery з Google

Читайте в окремій статті .

0

#9 Видалення версії скрипта або файлу стилів з URL

При реєстрації скрипта йому вказується версія (поточна версія вордпресу, за замовчуванням): /wp-includes/css/dashicons.min.css?ver=4.9 . Таку версію можна вирізати із посилання на скрипт або файл стилів:

Видалення всіх версій у всіх скриптів (і стилів):

// Видаляємо версію скриптів
add_filter( 'script_loader_src', '_remove_script_version' );
// Видаляємо версію стилів
add_filter( 'style_loader_src', '_remove_script_version' );
function _remove_script_version( $src ){
	$parts = explode('?', $src);
	return $parts[0];
}

Видалення лише версій WordPress:

## видаляє версію WP з відданого URL у скриптів та стилів
add_filter( 'script_loader_src', 'hb_remove_wp_version_from_src');
add_filter( 'style_loader_src', 'hb_remove_wp_version_from_src');
function hb_remove_wp_version_from_src( $src ) {
	 Global $wp_version;
	 parse_str (parse_url ($ src, PHP_URL_QUERY), $ query);
	 if ( ! empty($query['ver']) && $query['ver'] === $wp_version ) {
		  $src = remove_query_arg('ver', $src);
	 }
	 return $src;
}


Скрипти, що йдуть у комплекті з WP 5.2.2

НазваIDЗалежність
 utils 
WP Commoncommonjquery , hoverIntent , utils
 wp-a11yjquery
Simple AJAX Code-Kitsack 
QuickTagsquicktags 
ColorPicker (deprecated)colorpickerprototype
 editorutils , jquery
clipboard.jsclipboard 
 wp-fullscreen-stub 
WordPress AJAX Responsewp-ajax-responsejquery
 wp-api-requestjquery
 wp-pointerjquery-ui-widget , jquery-ui-position
Autosaveautosaveheartbeat
Heartbeatheartbeatjquery , wp-hooks
 wp-auth-checkheartbeat
List Manipulationwp-listswp-ajax-response , jquery-color
 prototype 
 scriptaculous-rootprototype
 scriptaculous-builderscriptaculous-root
 scriptaculous-dragdropscriptaculous-builder , scriptaculous-effects
 scriptaculous-effectsscriptaculous-root
 scriptaculous-sliderscriptaculous-effects
 scriptaculous-soundscriptaculous-root
 scriptaculous-controlsscriptaculous-root
 scriptaculousscriptaculous-dragdrop , scriptaculous-slider , scriptaculous-controls
 cropperscriptaculous-dragdrop
jQueryjqueryjquery-core , jquery-migrate
 jquery-core 
 jquery-migrate 
jQuery UI Corejquery-ui-corejquery
jQuery UI Effectsjquery-effects-corejquery
jQuery UI Effects – Blindjquery-effects-blindjquery-effects-core
jQuery UI Effects – Bouncejquery-effects-bouncejquery-effects-core
jQuery UI Effects – Clipjquery-effects-clipjquery-effects-core
jQuery UI Effects – Dropjquery-effects-dropjquery-effects-core
jQuery UI Effects – Explodejquery-effects-explodejquery-effects-core
jQuery UI Effects – Fadejquery-effects-fadejquery-effects-core
jQuery UI Effects – Foldjquery-effects-foldjquery-effects-core
jQuery UI Effects – Highlightjquery-effects-highlightjquery-effects-core
 jquery-effects-puffjquery-effects-core , jquery-effects-scale
jQuery UI Effects – Pulsatejquery-effects-pulsatejquery-effects-core
jQuery UI Effects – Scalejquery-effects-scalejquery-effects-core , jquery-effects-size
jQuery UI Effects – Shakejquery-effects-shakejquery-effects-core
 jquery-effects-sizejquery-effects-core
jQuery UI Effects – Slidejquery-effects-slidejquery-effects-core
jQuery UI Effects – Transferjquery-effects-transferjquery-effects-core
jQuery UI Accordionjquery-ui-accordionjquery-ui-core , jquery-ui-widget
jQuery UI Autocompletejquery-ui-autocompletejquery-ui-menu , wp-a11y
jQuery UI Buttonjquery-ui-buttonjquery-ui-core , jquery-ui-widget
jQuery UI Datepickerjquery-ui-datepickerjquery-ui-core
jQuery UI Dialogjquery-ui-dialogjquery-ui-resizable , jquery-ui-draggable , jquery-ui-button , jquery-ui-position
jQuery UI Draggablejquery-ui-draggablejquery-ui-mouse
jQuery UI Droppablejquery-ui-droppablejquery-ui-draggable
jQuery UI Menujquery-ui-menujquery-ui-core , jquery-ui-widget , jquery-ui-position
jQuery UI Mousejquery-ui-mousejquery-ui-core , jquery-ui-widget
jQuery UI Positionjquery-ui-positionjquery
jQuery UI Progressbarjquery-ui-progressbarjquery-ui-core , jquery-ui-widget
jQuery UI Resizablejquery-ui-resizablejquery-ui-mouse
jQuery UI Selectablejquery-ui-selectablejquery-ui-mouse
jQuery UI Selectmenujquery-ui-selectmenujquery-ui-menu
jQuery UI Sliderjquery-ui-sliderjquery-ui-mouse
jQuery UI Sortablejquery-ui-sortablejquery-ui-mouse
jQuery UI Spinnerjquery-ui-spinnerjquery-ui-button
jQuery UI Tabsjquery-ui-tabsjquery-ui-core , jquery-ui-widget
jQuery UI Tooltipsjquery-ui-tooltipjquery-ui-core , jquery-ui-widget , jquery-ui-position
jQuery UI Widgetjquery-ui-widgetjquery
jQuery Formjquery-formjquery
jQuery Colorjquery-colorjquery
jQuery Scheduleschedulejquery
 jquery-queryjquery
 jquery-serialize-objectjquery
jQuery Hotkeysjquery-hotkeysjquery
 jquery-table-hotkeysjquery , jquery-hotkeys
 jquery-touch-punchjquery-ui-widget , jquery-ui-mouse
jQuery Suggestsuggestjquery
 imagesloaded 
Masonry (native Javascript)masonryimagesloaded
jQuery Masonryjquery-masonryjquery , masonry
ThickBoxthickboxjquery
Jcropjcropjquery
SWFObjectswfobject 
 moxiejs 
Plupload Corepluploadmoxiejs
Plupload All Runtimesplupload-allplupload
Plupload HTML5plupload-html5plupload
Plupload Flashplupload-flashplupload
Plupload Silverlightplupload-silverlightplupload
Plupload HTML4plupload-html4plupload
 plupload-handlersplupload , jquery
 wp-pluploadplupload , jquery , json2 , media-models
SWFUploadswfupload 
 swfupload-allswfupload
SWFUpload Handlersswfupload-handlersswfupload-all , jquery
Threaded Commentscomment-reply 
JSON for JSjson2 
Underscore jsunderscore 
Backbone jsbackboneunderscore , jquery
 wp-utilunderscore , jquery
 wp-sanitizejquery
 wp-backbonebackbone , wp-util
 revisionswp-backbone , jquery-ui-slider , hoverIntent
 imgareaselectjquery
 mediaelementjquery , mediaelement-core , mediaelement-migrate
 mediaelement-core 
 mediaelement-migrate 
 mediaelement-vimeomediaelement
MediaElement.js (WP 3.6+)wp-mediaelementmediaelement
 wp-codemirror 
 csslint 
 esprima 
 jshintesprima
 jsonlint 
 htmlhint 
 htmlhint-kseshtmlhint
 code-editorjquery , wp-codemirror , underscore
 wp-theme-plugin-editorwp-util , wp-sanitize , jquery , jquery-ui-core , wp-a11y , underscore
 wp-playlistwp-util , backbone , mediaelement
 zxcvbn-async 
Password Strength Meterpassword-strength-meterjquery , zxcvbn-async
 user-profilejquery , password-strength-meter , wp-util
 language-chooserjquery
 user-suggestjquery-ui-autocomplete
 admin-bar 
 wplinkjquery , wp-a11y
 wpdialogsjquery-ui-dialog
Word Countword-count 
Media Uploadmedia-uploadthickbox , shortcode
jQuery HoverIntenthoverIntentjquery
 customize-basejquery , json2 , underscore
 customize-loadercustomize-base
 customize-previewwp-a11y , customize-base
 customize-modelsunderscore , backbone
 customize-viewsjquery , underscore , imgareaselect , customize-models , media-editor , media-views
 customize-controlscustomize-base , wp-a11y , wp-util , jquery-ui-core
 customize-selective-refreshjquery , wp-util , customize-preview
 customize-widgetsjquery , jquery-ui-sortable , jquery-ui-droppable , wp-backbone , customize-controls
 customize-preview-widgetsjquery , wp-util , customize-preview , customize-selective-refresh
 customize-nav-menusjquery , wp-backbone , customize-controls , accordion , nav-menu
 customize-preview-nav-menusjquery , wp-util , customize-preview , customize-selective-refresh
 wp-custom-headerwp-a11y
 accordionjquery
 shortcodeunderscore
 media-modelswp-backbone
 wp-embed 
 media-viewsutils , media-models , wp-plupload , jquery-ui-sortable , wp-mediaelement , wp-api-request
 media-editorshortcode , media-views
 media-audiovideomedia-editor
 mce-viewshortcode , jquery , media-views , media-audiovideo
 wp-apijquery , backbone , underscore , wp-api-request
 reactwp-polyfill
 react-domreact
 moment 
 lodash 
 wp-polyfill-fetch 
 wp-polyfill-formdata 
 wp-polyfill-node-contains 
 wp-polyfill-element-closest 
 wp-polyfill 
 wp-tinymce-root 
 wp-tinymcewp-tinymce-root
 wp-tinymce-listswp-tinymce
 wp-api-fetchwp-polyfill , wp-i18n , wp-url , wp-hooks
 wp-annotationswp-data , wp-hooks , wp-i18n , wp-polyfill , wp-rich-text
 wp-autopwp-polyfill
 wp-blobwp-polyfill
 wp-blockswp-autop , wp-blob , wp-block-serialization-default-parser , wp-data , wp-dom , wp-element , wp-hooks , wp-html-entities , wp-i18n , wp-is-shallow- equal , wp-polyfill , wp-shortcode , lodash
 wp-block-libraryeditor , lodash , wp-api-fetch , wp-autop , wp-blob , wp-block-editor , wp-blocks , wp-components , wp-compose , wp-core-data , wp-data , wp-date , wp-editor , wp-element , wp-html-entities , wp-i18n , wp-keycodes , wp-polyfill , wp-url , wp-viewport , wp-rich-text
 wp-block-serialization-default-parser 
 wp-block-editorlodash , wp-a11y , wp-blob , wp-blocks , wp-components , wp-compose , wp-core-data , wp-data , wp-dom , wp-element , wp-hooks , wp-html-entities , wp-i18n , wp-is-shallow-equal , wp-keycodes , wp-rich-text , wp-token-list , wp-url , wp-viewport , wp-wordcount
 wp-componentslodash , moment , wp-a11y , wp-api-fetch , wp-compose , wp-dom , wp-element , wp-hooks , wp-html-entities , wp-i18n , wp-is-shallow-equal , wp- keycodes , wp-polyfill , wp-rich-text , wp-url
 wp-composelodash , wp-element , wp-is-shallow-equal , wp-polyfill
 wp-core-datalodash , wp-api-fetch , wp-data , wp-deprecated , wp-polyfill , wp-url
 wp-datalodash , wp-compose , wp-element , wp-is-shallow-equal , wp-polyfill , wp-priority-queue , wp-redux-routine
 wp-datemoment , wp-polyfill
 wp-deprecatedwp-polyfill , wp-hooks
 wp-domlodash , wp-polyfill
 wp-dom-readywp-polyfill
 wp-edit-postjquery , lodash , postbox , media-models , media-views , wp-a11y , wp-api-fetch , wp-block-editor , wp-block-library , wp-blocks , wp-components , wp-compose , wp- core-data , wp-data , wp-dom-ready , wp-editor , wp-element , wp-embed , wp-i18n , wp-keycodes , wp-notices , wp-nux , wp-plugins, wp-polyfill , wp-url , wp-viewport
 wp-editorlodash , wp-api-fetch , wp-blob , wp-block-editor , wp-blocks , wp-components , wp-compose , wp-core-data , wp-data , wp-date , wp-deprecated , wp- element , wp-hooks , wp-html-entities , wp-i18n , wp-keycodes , wp-notices , wp-nux , wp-polyfill , wp-url , wp-viewport , wp-wordcount
 wp-elementwp-polyfill , react , react-dom , lodash , wp-escape-html
 wp-escape-htmlwp-polyfill
 wp-format-librarywp-block-editor , wp-components , wp-editor , wp-element , wp-i18n , wp-keycodes , wp-polyfill , wp-rich-text , wp-url
 wp-hookswp-polyfill
 wp-html-entitieswp-polyfill
 wp-i18nwp-polyfill
 wp-is-shallow-equalwp-polyfill
 wp-keycodeslodash , wp-polyfill , wp-i18n
 wp-list-reusable-blockslodash , wp-api-fetch , wp-components , wp-compose , wp-element , wp-i18n , wp-polyfill
 wp-noticeslodash , wp-a11y , wp-data , wp-polyfill
 wp-nuxwp-element , lodash , wp-components , wp-compose , wp-data , wp-i18n , wp-polyfill , lodash
 wp-pluginslodash , wp-compose , wp-element , wp-hooks , wp-polyfill
 wp-priority-queue 
 wp-redux-routinewp-polyfill
 wp-rich-textlodash , wp-data , wp-escape-html , wp-polyfill
 wp-shortcodewp-polyfill , lodash
 wp-token-listlodash , wp-polyfill
 wp-urlwp-polyfill
 wp-viewportwp-polyfill , wp-element , wp-data , wp-compose , lodash
 wp-wordcountwp-polyfill

Список отриманий із глобальної змінної $GLOBALS['wp_scripts']. Зареєстровані скрипти можуть змінюватись в залежності від сторінки, на якій ви знаходитесь. В адмінці список буде більшим.

Докладніше дивіться у коді функції wp_default_scripts()

нотатки

список змін

З версії 2.1.0Введено.

wp enqueue script WP 6.0.2

function wp_enqueue_script( $handle, $src = '', $deps = array(), $ver = false, $in_footer = false ) {
	_wp_scripts_maybe_doing_it_wrong( __FUNCTION__, $handle );

	$wp_scripts = wp_scripts();

	if ( $src | | $ in_footer ) {
		$_handle = explode('?', $handle);

		if ($ src) {
			$wp_scripts->add( $_handle[0], $src, $deps, $ver);
		}

		if ($in_footer) {
			$wp_scripts->add_data( $_handle[0], 'group', 1 );
		}
	}

	$wp_scripts->enqueue($handle);
}

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

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