Руководство по правильному использованию JavaScript в WordPress

Я помню, как все говорили: «Зачем нам нужен JavaScript, когда у нас есть Flash?», когда мне было четырнадцать. Хотя я все ещё помню, как тогда наслаждался программированием на ActionScript 2.0, я видел, что с помощью JavaScript можно было достичь очень многого, и я любил его. Я не эксперт в JavaScript (пока что), но могу сказать, что очень много времени имел дело с родственной JavaScript технологией — Flash.

Когда появился WordPress — мощнейшая платформа для создания блогов и управления контентом — JavaScript оказался полезен для множества вещей, таких как: слайдеры контента, мультимедийные галереи, красочные корзины товаров, элементы пользовательского интерфейса, например, закладки, «аккордеоны» и другие. Но как правильно использовать JavaScript в сочетании с WordPress?

Подключение скриптов в HTML-текст это один из способов – и он неправильный. В этой статье, мы разберемся, как правильно подключать файлы JavaScript к нашим страницам и как обращаться с интернациональными данными в коде JavaScript.

Две проблемы при использовании JavaScript в проектах WordPress

Есть две важных проблемы, которые возникают при включении JavaScript-сценариев непосредственно HTML-код WordPress:

  • Дупликация кода: Представим, что вы создали WordPress-плагин и вам нужно подключить jQuery. Вы вставляете тег с соответствующими параметрами в раздел и все отлично работает! Но, что если другой плагин также требует для своей работы jQuery? Как он узнает о том, что данная библиотека уже подключена в разделе ? Он не будет об том знать, даже если другой плагин уже подключил jQuery. В итоге, к странице будет подключено две копии jQuery, потому что вы об этом не позаботились;
  • Проблемы с интернационализацией: Скажем, что вы создаете плагин галереи и вам нужно создавать строки, содержащие надписи типа: «Следующее», «Предыдущее» и «Изображение X из Y». Как вы это реализуете без вывода строк внутри кода JavaScript в разделе?

Правильный способ использования JavaScript в WordPress

Ключом к решению первой проблемы является «регистрация» и «постановка в очередь» файлов JS с помощью двух функций ядра WordPress: wp_register_script() и wp_enqueue_script(). Решение второй проблемы еще проще: надо использовать функцию ядра wp_localize_script(), позволяющую вам верно определить языковые строки в вашем JS-коде.

Регистрация скриптов

Перед тем, как вы сможете поставить в очередь ваши JavaScript-файлы, необходимо их сначала зарегистрировать. Делается это простым вызовом функции wp_register_script():

<?php wp_register_script( $name, $url, $dependencies, $version, $load_in_footer ); ?>

Некоторые замечания по параметрам:

  • Name (обязательный, тип string): имя скрипта. Можно выбрать любое имя по своему желанию, при условии, что оно не используется другим скриптом;
  • URL (обязательный, тип string): URL-адрес скрипта;
  • Dependencies (опциональный, тип array): имя (имена) другого скрипта, от которого зависит данный. Например, если ваш скрипт зависит от jQuery, то он должен быть загружен ПОСЛЕ jQuery. В данном случае вам следует указать массив jquery для данного параметра;
  • Version (опциональный, тип string): номер версии вашего скрипта. Вы можете выбрать между несколькими вариантами: строка (string), установка значения в null или оставить пустым. Если выбрать строку, то надо добавить код вида my-script.js?ver=1.2. Если оставить параметр пустым, то значению версии присвоится номер версии WordPress. Если вы установить параметр в null, то, соответственно, ничего не добавится;
  • Load in Footer (опциональный, тип boolean): когда вы ставите в очередь зарегистрированные скрипт, то он загружается в разделе . Но если данный параметр установить в true, то скрипт будет загружаться прямо перед закрывающим тегом .

Вы также можете удалить ранее зарегистрированный ядром или другими плагинами скрипт с помощью функции wp_deregister_script(). Эта функция требует только передачи параметра name, который указывает на имя крипта, который необходимо удалить.

Есть много скриптов на WordPress Codex, которые уже зарегистрированы в ядре. Хотя, вам следует перепроверить список, потому что из-за различия версий WordPress, он может быть другим.

Постановка скриптов в очередь

Вы можете зарегистрировать скрипт, но это не значит, что он будет загружаться автоматически. После регистрации ваших скриптов их следует поставить в очередь с помощью функции wp_enqueue_script():

<?php wp_enqueue_script( $name, $url, $dependencies, $version, $load_in_footer ); ?>

Некоторые пояснения к параметрам:

  • Name (обязательный, тип string): имя скрипта.;
  • URL (опциональный, тип string): URL-адрес скрипта. Как вы можете видеть, в данном случае этот параметр не является обязательным, потому что если вы уже зарегистрировали скрипт, то вы просто указываете имя. Но если скрипт вы не регистрировали, то URL вставить необходимо;
  • Dependencies (опциональный, тип array): имя (имена) других скриптов от которых зависит данный;
  • Version (опциональный, тип string): Номер версии вашего скрипта;
  • Load in footer (опциональный, тип boolean): Если указано значение true, то скрипт будет загружаться прямо перед закрывающим тегом .

Вы также можете убрать скрипт из очереди с помощью функции wp_dequeue_script(). Аналогично wp_deregister_script(), эта функция требует передать в нее только параметр name.

Вы можете проверить состояние скрипта функцией wp_script_is(). Например, если вы хотите проверить, поставлен ли в очередь скрипт с именем my-script, просто используйте функцию wp_script_is( ‘my-script’, ‘queue’ ) в конструкции if.

Использование хуков (hooks) для постановки ваших скриптов в очередь

Правильный способ постановки ваших скриптов (и стилей) в очередь, это использование следующих хуков:

  • wp_enqueue_scripts – устанавливает скрипт в лицевую часть вашего сайта;
  • admin_enqueue_scripts – устанавливает скрипт в административную часть вашего сайта;
  • login_enqueue_scripts – устанавливает скрипт на панель входа.
<?php
function my_scripts_loader() {
wp_enqueue_script( 'my-js', 'filename.js', false );
}
add_action( 'wp_enqueue_scripts', 'my_scripts_loader' );
?>

В целях обеспечения совместимости, не используйте хуки admin_print_scripts или admin_print_styles.

Правильное обращение с интернациональными данными в JavaScript

Когда дело доходит до локализации, всегда возникают проблемы при использовании JavaScript в WordPress, потому что многие люди не знают о существовании маленькой изящной функции под названием wp_localize_script():

<?php
$l10n_data = array(
    'nextItem' => __( 'Next', 'my-script' ),
    'prevItem' => __( 'Previous', 'my-script' ),
    'imageTitle' => __( 'Image %d of %d', 'my-script' )
);
 
wp_localize_script(
    'name-of-the-script', // (обязательный параметр) имя скрипта, например 'my-script'
    'nameOfTheObject', // (обязательный параметр) имя объекта, например 'my-object'
    $l10n_data // (обязательный параметр) данные, которые необходимо перевести на различные языки
);
?>

После регистрации, постановки в очередь и локализации скрипта, вы можете вы можете вызывать переменные, используя имя объекта и имена данных, например: alert( nameOfTheObject.prevItem );

Заключение

Причина, по которой WordPress является одной из самых популярных CMS в мире, заключается в её гибкости. И я надеюсь, что данная статья помогла вам это осознать.

Перевод статьи «The Complete Guide to Proper JavaScript Usage With WordPress» был подготовлен дружной командой проекта Сайтостроение от А до Я.