Когда я должен использовать wp_register_script () с wp_enqueue_script () против просто wp_enqueue_script ()?


55

У меня проблемы с пониманием, когда вам нужно использовать wp_register_script(). В настоящее время я просто использую что-то вроде:

add_action( 'admin_enqueue_scripts', array( $this, 'enqueue' ) );
function enqueue() {
    $handle = 'some-handle';
    $js = 'http://example.com/my.js';
    wp_register_script( $handle, $js );
    wp_enqueue_script( $handle );
}

Я много читал (Кодекс, блоги и т. Д.), Но не совсем понимаю, когда мне следует сначала зарегистрироваться или когда мне нужно поставить в очередь. В качестве примера я заметил, что TwentyTwelve не регистрирует никаких стилей или сценариев, а просто ставит их в очередь.

Ответы:


50

Страница wp_register_script()Кодекса буквально говорит:

Безопасный способ регистрации JavaScript в WordPress для последующего использования с wp_enqueue_script().

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

Например:

У вас есть оператор switch, который загружает некоторую функциональность, но в двух из трех случаев требуется определенный файл javascript, а в одном - нет. Вы можете ставить в очередь скрипт каждый раз, который стоит больше ресурсов, или просто ставить скрипт в очередь, когда он вам нужен:

...
wp_register_script( 'my-handy-javascript', ... );
...
switch( $somevar ) {
    case 'value':
        wp_enqueue_script( 'my-handy-javascript' ); // needs the file
        ...
    break;
    case 'value2':
        wp_enqueue_script( 'my-handy-javascript' ); // needs the file
        ...
    break;
    default:
    case 'value3': // doesn't needs the file
        ...
    break;
}

Нет необходимости регистрировать скрипт, а затем ставить его в очередь, но он может обеспечить некоторую логику в вашем коде, если вы зарегистрируете все скрипты, которые вам нужны где-то в вашем, functions.phpа не везде в вашем коде.

Кодекс также говорит следующее:

Используйте wp_enqueue_scriptsдействие, чтобы вызвать эту функцию или admin_enqueue_scriptsвызвать ее на стороне администратора.

Это означает, что если вы хотите поставить в очередь свой скрипт на стороне frond и в бэк- энде , вы можете зарегистрировать скрипт один раз, а затем загрузить его на front-end с помощью wp_enqueue_scriptи в back-end с помощью admin_enqueue_script.
Таким образом, у вас не будет одного и того же обращения в очередь дважды в одной теме, плагине, виджете или чем-то еще.


Спасибо. Это многое прояснило. Итак, вы думаете, что TwentyTwelve не потрудится зарегистрироваться первым, так как он наверняка загрузит их?
Акт

Это наверняка может быть возможностью. Я не знаю, как строится тема «Двадцать двенадцать», так как я никогда не использую ее, но они наверняка найдут свои причины enqueueвместо register.
Майк Мэдерн

2
В этом смысле я не согласен с «Вы можете ставить сценарий в очередь каждый раз, который требует больше ресурсов, или просто ставить сценарий в очередь, когда вам это нужно». В вашем примере кода вы можете удалить вызов регистра и вместо этого иметь несколько эквивалентных полноценных (с $ src arg) вызовов wp_enqueue_style(). Это будет больше усилий при наборе текста, но не приведет к увеличению потребностей в ресурсах. Верный?
Ян-Филипп Герке

7
Один момент, который до сих пор не был учтен во всех объяснениях, заключается в том, что вы можете wp_register_script()просто зарегистрировать сценарий, чтобы его можно было использовать в качестве зависимости для других сценариев и загружать его только без непосредственного наложения в очередь.
JHoffmann

1
Несмотря на то, что это хорошо объясняет, я бы рекомендовал прочитать и этот ответ .
lowtechsun

8

ИМХО главное преимущество использования wp_register_scriptранее wp_enqueue_scriptsпроиллюстрировано в следующем абзаце из Кодекса :

Сценарии, которые были предварительно зарегистрированы с помощью wp_register_script (), не нужно ставить в очередь вручную с помощью wp_enqueue_script (), если они перечислены как зависимость другого сценария, который ставится в очередь. WordPress будет автоматически включать зарегистрированный скрипт, прежде чем он включит в себя сценарий в очереди, который перечисляет дескриптор зарегистрированного скрипта в качестве зависимости.

Если вы считаете, что вам это не нужно (например, потому что вы на 100% уверены, что ваш скрипт не будет вовлечен в какую-либо зависимость), вы, вероятно, можете пойти напрямую wp_enqueue_scripts, без предварительной wp_register_script.


2

Я просмотрел несколько статей и пришел к следующему выводу. Я думаю, что это помогает.

  1. Регистрация любых скриптов с использованием wp_register_script()просто регистрация; не загружается. Зарегистрированный скрипт не будет загружен, пока он не будет поставлен в очередь с помощью wp_enqueue_script().
  2. Нам не нужно регистрировать и ставить в очередь каждый из скриптов одновременно. Мы должны просто поставить в очередь. Регистрация не обязательна, так как wp_enqueue_script()функция автоматически регистрирует скрипт.
  3. Но нам нужно зарегистрироваться, когда мы находимся в любой из следующих ситуаций:

    а. Предположим, нам нужен скрипт для загрузки более чем в одно место, например, один раз во входном и один раз во внутреннем (страница администратора). Теперь мы можем зарегистрировать скрипт только один раз. И затем ставьте в очередь это в переднем конце и заднем конце индивидуально. Смотри, постановка в очередь означает загрузку. Регистрация не означает загрузку. В случае, если мы не зарегистрируем его, он будет автоматически зарегистрирован столько раз, сколько мы поставим в очередь. С другой стороны, если мы зарегистрируем его один раз, он будет зарегистрирован один раз, независимо от того, сколько раз мы ставим его в очередь.

    б. Если мы хотим использовать скрипт как зависимость от других скриптов, нам не нужно ставить его в очередь wp_enqueue_script(). Просто зарегистрируйте это wp_register_script(). И он будет автоматически поставлен в очередь, когда мы будем использовать его имя дескриптора как зависимость от других скриптов, с которыми он связан wp_enqueue_script().

    с. Если мы хотим, чтобы скрипт загружался при необходимости, а не загружался сразу, мы можем просто зарегистрировать его для дальнейшего использования. Вариант использования был показан выше.

NB. Насколько я убежден, такой же вывод можно сделать для таблиц стилей CSS. Я хочу сказать, что мы можем использовать wp_register_style()и wp_enqueue_style()таким же образом.

Обратите внимание, что сделанный здесь вывод отражает мой собственный вывод. Если я не прав, пожалуйста, поправьте меня. И вы могли бы прийти к другому и гораздо лучшему выводу. Если так, то, пожалуйста, дайте нам знать. Кто знает? Возможно, твой лучший. Как говорится, «Как много принципов, так много путей к спасению». :)

https://ansrthemeaction.blogspot.com/2019/11/wpregisterscript-when-to-use.html


Ваше объяснение лучшее, что я прочитал. Теперь я понимаю, почему важно регистрировать скрипты. Спасибо!
Джи

Большое спасибо @Jee
Мохаммад Шохел Рана
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.