В WordPress подключение JavaScript файлов осуществляется с помощью функции wp_enqueue_script()
. Эта функция предоставляет удобный и безопасный способ добавить скрипты на страницы вашего сайта. В данной статье мы подробно рассмотрим, как правильно использовать эту функцию, ее параметры и приведем практические примеры.
Зачем использовать wp_enqueue_script?
Использование функции wp_enqueue_script()
имеет несколько преимуществ:
- Избежание конфликтов: При правильном подключении скриптов можно избежать конфликтов, связанных с зависимостями. Например, если скрипт зависит от библиотеки jQuery,
wp_enqueue_script()
гарантирует, что jQuery будет загружен перед вашим скриптом. - Оптимизация загрузки: Функция позволяет объединять и оптимизировать скрипты для улучшения производительности.
- Контроль версии: Вы можете управлять версиями подключаемых файлов, что поможет избежать проблем с кешированием в браузерах.
- Управление зависимостями: Скрипты будут загружаться в правильном порядке, что исключает ошибки из-за несоответствующих версий.
Основные параметры функции
Функция wp_enqueue_script()
принимает несколько параметров:
wp_enqueue_script(
$handle, // Название скрипта
$src, // URL файла скрипта
$deps, // Массив зависимостей
$ver, // Версия скрипта
$in_footer // Загружать в подвале
);
- $handle (обязательный) — строка, которая служит уникальным идентификатором для вашего скрипта. Название должно быть в нижнем регистре.
- $src — URL-адрес файла скрипта. Если файл не зарегистрирован, необходимо указать этот параметр.
- $deps — массив идентификаторов скриптов, от которых зависит ваш скрипт.
- $ver — версия скрипта. Если параметр не указан, будет использована версия WordPress.
- $in_footer — логическое значение, указывающее, следует ли загружать скрипт перед закрывающим тегом
</body>
(true) или в<head>
(false). По умолчанию — false.
Шаблон использования
Чтобы подключить JavaScript файл, необходимо добавить следующий код в файл functions.php
вашей темы:
add_action('wp_enqueue_scripts', 'my_scripts_method');
function my_scripts_method() {
wp_enqueue_script('newscript', get_template_directory_uri() . '/js/custom_script.js');
}
В этом примере мы добавляем скрипт custom_script.js
, который находится в папке js
вашей темы.
Примеры использования
1. Подключение jQuery
WordPress по умолчанию включает библиотеку jQuery, поэтому для её подключения достаточно использовать:
wp_enqueue_script('jquery');
2. Подключение собственного скрипта с зависимостью от jQuery
Если ваш скрипт зависит от 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'));
}
3. Динамическое определение версии файла
Чтобы при изменении файла его версия обновлялась, можно использовать filemtime()
:
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')));
}
Чтобы избежать проблем с кэшированием, можно использовать дату последнего изменения файла как версию. Это гарантирует, что пользователи всегда будут получать последнюю версию скрипта:
/**
* Never worry about cache again!
*/
function my_load_scripts() {
$my_js_ver = date("ymd-Gis", filemtime( plugin_dir_path( __FILE__ ) . 'js/custom.js' ));
$my_css_ver = date("ymd-Gis", filemtime( plugin_dir_path( __FILE__ ) . 'style.css' ));
wp_enqueue_script( 'custom_js', plugins_url( 'js/custom.js', __FILE__ ), array(), $my_js_ver, true );
wp_register_style( 'my_css', plugins_url( 'style.css', __FILE__ ), false, $my_css_ver );
wp_enqueue_style( 'my_css' );
}
add_action( 'wp_enqueue_scripts', 'my_load_scripts' );
4. Подключение скрипта только на определённых страницах
Если нужно подключать скрипты только на определённых страницах, используйте условные теги:
add_action('wp', 'add_my_script_where_it_needed');
function add_my_script_where_it_needed() {
if (is_single()) {
add_action('wp_enqueue_scripts', 'my_scripts_method');
}
}
function my_scripts_method() {
wp_enqueue_script('newscript', get_template_directory_uri() . '/js/newscript.js', array('jquery'));
}
5. Удаление версии из URL скриптов
Если вам нужно удалить версию из URL, используйте следующий код:
add_filter('script_loader_src', 'remove_script_version');
function remove_script_version($src) {
$parts = explode('?', $src);
return $parts[0];
}
6. Загрузка скриптов плагина только на его страницах
Для того чтобы загружать скрипты только на страницах вашего плагина, выполните следующее:
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() {
// Код для отображения страницы плагина
}
7. Подключение скрипта с условиями
Вы также можете подключать скрипты с условиями, проверяя тип страницы или другие условия:
add_action('wp', 'conditional_script_enqueue');
function conditional_script_enqueue() {
if (is_page('contact')) {
wp_enqueue_script('contact-script', get_template_directory_uri() . '/js/contact.js');
}
}
Скрипты в коробке WordPress
Название | ИД | Зависимость * | Версия | Лицензия |
---|---|---|---|---|
Image Cropper | Image cropper (not used in core, see jcrop) | |||
Jcrop | jcrop | 0.9.12 | MIT | |
SWFObject | swfobject | 2.2-20120417 | MIT | |
SWFUpload | swfupload | 2201-20110113 | MIT | |
SWFUpload Degrade | swfupload-degrade | 2201 | MIT | |
SWFUpload Queue | swfupload-queue | 2201 | MIT | |
SWFUpload Handlers | swfupload-handlers | 2201-20110524 | MIT | |
jQuery | jquery | json2 (for AJAX calls) | 3.6.0 | MIT + (MIT OR BSD) |
jQuery Form | jquery-form | jquery | 4.3.0 | MIT OR LGPLv3 |
jQuery Color | jquery-color | jquery | 2.2.0 | MIT+CC0 + (MIT OR GPLv2) |
jQuery Masonry | jquery-masonry | jquery | 3.1.2b | MIT |
Masonry (native Javascript) | masonry | imagesloaded | 4.2.2 | MIT |
jQuery UI Core | jquery-ui-core | jquery | 1.13.1 | MIT + CC0 + (MIT OR GPLv2) |
jQuery UI Widget | Now part of `jquery-ui-core` | jquery | 1.13.1 | MIT + CC0 + (MIT OR GPLv2) |
jQuery UI Accordion | jquery-ui-accordion | jquery | 1.13.1 | MIT + CC0 + (MIT OR GPLv2) |
jQuery UI Autocomplete | jquery-ui-autocomplete | jquery | 1.13.1 | MIT + CC0 + (MIT OR GPLv2) |
jQuery UI Button | jquery-ui-button | jquery | 1.13.1 | MIT + CC0 + (MIT OR GPLv2) |
jQuery UI Datepicker | jquery-ui-datepicker | jquery | 1.13.1 | MIT + CC0 + (MIT OR GPLv2) |
jQuery UI Dialog | jquery-ui-dialog | jquery | 1.13.1 | MIT + CC0 + (MIT OR GPLv2) |
jQuery UI Draggable | jquery-ui-draggable | jquery | 1.13.1 | MIT + CC0 + (MIT OR GPLv2) |
jQuery UI Droppable | jquery-ui-droppable | jquery | 1.13.1 | MIT + CC0 + (MIT OR GPLv2) |
jQuery UI Menu | jquery-ui-menu | jquery | 1.13.1 | MIT + CC0 + (MIT OR GPLv2) |
jQuery UI Mouse | jquery-ui-mouse | jquery | 1.13.1 | MIT + CC0 + (MIT OR GPLv2) |
jQuery UI Position | Now part of `jquery-ui-core` | jquery | 1.13.1 | MIT + CC0 + (MIT OR GPLv2) |
jQuery UI Progressbar | jquery-ui-progressbar | jquery | 1.13.1 | MIT + CC0 + (MIT OR GPLv2) |
jQuery UI Selectable | jquery-ui-selectable | jquery | 1.13.1 | MIT + CC0 + (MIT OR GPLv2) |
jQuery UI Resizable | jquery-ui-resizable | jquery | 1.13.1 | MIT + CC0 + (MIT OR GPLv2) |
jQuery UI Selectmenu | jquery-ui-selectmenu | jquery | 1.13.1 | MIT + CC0 + (MIT OR GPLv2) |
jQuery UI Sortable | jquery-ui-sortable | jquery | 1.13.1 | MIT + CC0 + (MIT OR GPLv2) |
jQuery UI Slider | jquery-ui-slider | jquery | 1.13.1 | MIT + CC0 + (MIT OR GPLv2) |
jQuery UI Spinner | jquery-ui-spinner | jquery | 1.13.1 | MIT + CC0 + (MIT OR GPLv2) |
jQuery UI Tooltips | jquery-ui-tooltip | jquery | 1.13.1 | MIT + CC0 + (MIT OR GPLv2) |
jQuery UI Tabs | jquery-ui-tabs | jquery | 1.13.1 | MIT + CC0 + (MIT OR GPLv2) |
jQuery UI Effects | jquery-effects-core | jquery | 1.13.1 | MIT + CC0 + (MIT OR GPLv2) |
jQuery UI Effects – Blind | jquery-effects-blind | jquery-effects-core | 1.13.1 | MIT + CC0 + (MIT OR GPLv2) |
jQuery UI Effects – Bounce | jquery-effects-bounce | jquery-effects-core | 1.13.1 | MIT + CC0 + (MIT OR GPLv2) |
jQuery UI Effects – Clip | jquery-effects-clip | jquery-effects-core | 1.13.1 | MIT + CC0 + (MIT OR GPLv2) |
jQuery UI Effects – Drop | jquery-effects-drop | jquery-effects-core | 1.13.1 | MIT + CC0 + (MIT OR GPLv2) |
jQuery UI Effects – Explode | jquery-effects-explode | jquery-effects-core | 1.13.1 | MIT + CC0 + (MIT OR GPLv2) |
jQuery UI Effects – Fade | jquery-effects-fade | jquery-effects-core | 1.13.1 | MIT + CC0 + (MIT OR GPLv2) |
jQuery UI Effects – Fold | jquery-effects-fold | jquery-effects-core | 1.13.1 | MIT + CC0 + (MIT OR GPLv2) |
jQuery UI Effects – Highlight | jquery-effects-highlight | jquery-effects-core | 1.13.1 | MIT + CC0 + (MIT OR GPLv2) |
jQuery UI Effects – Pulsate | jquery-effects-pulsate | jquery-effects-core | 1.13.1 | MIT + CC0 + (MIT OR GPLv2) |
jQuery UI Effects – Scale | jquery-effects-scale | jquery-effects-core | 1.13.1 | MIT + CC0 + (MIT OR GPLv2) |
jQuery UI Effects – Shake | jquery-effects-shake | jquery-effects-core | 1.13.1 | MIT + CC0 + (MIT OR GPLv2) |
jQuery UI Effects – Slide | jquery-effects-slide | jquery-effects-core | 1.13.1 | MIT + CC0 + (MIT OR GPLv2) |
jQuery UI Effects – Transfer | jquery-effects-transfer | jquery-effects-core | 1.13.1 | MIT + CC0 + (MIT OR GPLv2) |
MediaElement.js (WP 3.6+) | wp-mediaelement | jquery | 4.2.16 | MIT |
jQuery Schedule | schedule | jquery | 20m/1.0.1 | MIT |
jQuery Suggest | suggest | jquery | 1.1-20110113 | Public domain |
ThickBox | thickbox | 3.1-20121105 | MIT OR GPLv3 | |
jQuery HoverIntent | hoverIntent | jquery | 1.10.1 | MIT |
jQuery Hotkeys | jquery-hotkeys | jquery | 0.2.0 | MIT OR GPLv2 |
Simple AJAX Code-Kit | sack | 1.6.1 | X11 License | |
QuickTags | quicktags | 1.3 | LGPL2.1 | |
Iris (Colour picker) | iris | jquery | 1.1.1 | GPLv2 |
Farbtastic (deprecated) | farbtastic | jquery | 1.2 | GPLv3 |
ColorPicker (deprecated) | colorpicker | jquery | v2 | Author’s own copyright |
Tiny MCE | wp-tinymce | 4.9.4 | LGPL2.1 | |
Autosave | autosave | |||
WordPress AJAX Response | wp-ajax-response | |||
List Manipulation | wp-lists | |||
WP Common | common | |||
WP Editor | editorremov | |||
WP Editor Functions | editor-functions | |||
AJAX Cat | ajaxcat | |||
Admin Categories | admin-categories | |||
Admin Tags | admin-tags | |||
Admin custom fields | admin-custom-fields | |||
Password Strength Meter | password-strength-meter | |||
Admin Comments | admin-comments | |||
Admin Users | admin-users | |||
Admin Forms | admin-forms | |||
XFN | xfn | |||
Upload | upload | |||
PostBox | postbox | |||
Slug | slug | |||
Post | post | |||
Page | page | |||
Link | link | |||
Comment | comment | |||
Threaded Comments | comment-reply | |||
Admin Gallery | admin-gallery | |||
Media Upload | media-upload | |||
Admin widgets | admin-widgets | |||
Word Count | word-count | |||
Theme Preview | theme-preview | |||
JSON for JS | json2 | 2015-05-03 | Public domain | |
Plupload Core | plupload | 2.1.9 | GPLv2 | |
Plupload All Runtimes | plupload-all | 2.1.1 | GPLv2 | |
Plupload HTML4 | plupload-html4 | 2.1.1 | GPLv2 | |
Plupload HTML5 | plupload-html5 | 2.1.1 | GPLv2 | |
Plupload Flash | plupload-flash | 2.1.1 | GPLv2 | |
Plupload Silverlight | plupload-silverlight | 2.1.1 | GPLv2 | |
Underscore js | underscore | 1.13.1 | MIT | |
Backbone js | backbone | jquery, underscore | 1.4.0 | MIT |
imagesLoaded | imagesloaded | 4.1.4 | MIT | |
CodeMirror | wp-codemirror | 5.29.1-alpha-ee20357 | MIT | |
imgAreaSelect | imgareaselect | jquery | 0.9.8 | MIT AND GPL |
Удалены | |||
---|---|---|---|
Имя | ИД | Удалено с версии | Заменено на |
Scriptaculous Root | scriptaculous-root | WP 3.5 | Google Version |
Scriptaculous Builder | scriptaculous-builder | WP 3.5 | Google Version |
Scriptaculous Drag & Drop | scriptaculous-dragdrop | WP 3.5 | Google Version |
Scriptaculous Effects | scriptaculous-effects | WP 3.5 | Google Version |
Scriptaculous Slider | scriptaculous-slider | WP 3.5 | Google Version |
Scriptaculous Sound | scriptaculous-sound | WP 3.5 | Google Version |
Scriptaculous Controls | scriptaculous-controls | WP 3.5 | Google Version |
Scriptaculous | scriptaculous | WP 3.5 | Google Version |
Prototype Framework | prototype | WP 3.5 | Google Version |
Заключение
Функция wp_enqueue_script() — мощный инструмент для управления загрузкой JavaScript файлов в WordPress. Правильное использование этой функции помогает избежать конфликтов, оптимизирует производительность и обеспечивает гибкость при работе с зависимостями. С помощью примеров, приведенных выше, вы можете эффективно подключать скрипты к вашей теме или плагину, учитывая все необходимые детали.