Коли я повинен використовувати 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 );
}

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

Відповіді:


50

Сторінка wp_register_script()Codex буквально говорить:

Безпечний спосіб реєстрації javascripts в WordPress для подальшого використання wp_enqueue_script().

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

Наприклад:

У вас є оператор перемикача, який завантажує певну функціональність, але для двох з трьох випадків потрібен певний файл 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викликати її на стороні адміністратора.

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


Дякую. Це багато чого очистило. Отже, ти вважаєш, що TwentyTwelve не намагається реєструватися спочатку, оскільки збирається їх точно завантажити?
akTed

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

2
У цьому сенсі я не погоджуюсь з тим, що "Ви можете привласнити сценарій кожен раз, який коштує більше ресурсів, або просто передати сценарій, коли вам це потрібно". У вашому прикладі коду ви можете видалити регістровий виклик і натомість мати кілька еквівалентних повноцінних (з $ src arg) викликів wp_enqueue_style(). Це просто більше зусиль для введення тексту, але не призведе до більших потреб у ресурсах. Правильно?
Ян-Філіп Геррк

7
Один момент, який покинутий усіма поясненнями, - це те, що ви можете wp_register_script()просто зареєструвати скрипт, щоб він міг використовуватися як залежність від інших сценаріїв і завантажуватись лише ними, без жодного разу не залучатися безпосередньо.
JHoffmann

1
Хоча це добре пояснює, я б рекомендував прочитати цю відповідь .
lowtechsun

8

Основна перевага використання IMHO wp_register_scriptраніше wp_enqueue_scriptsпоказана у наступному параграфі Codex :

Сценарії, які були попередньо зареєстровані за допомогою 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().

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

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

Зауважимо, що зроблений тут висновок відображає мою власну дедукцію. Якщо я помиляюся, будь ласка, виправте мене. І ви могли б дійти до іншого і набагато кращого висновку. Якщо все так, то, будь ласка, повідомте нас про це. Хто знає? Можливо, ваш найкращий. Як говориться, "Скільки принципів, стільки способів спасіння". :)

https://sxbook.blogspot.com/2018/12/wpregisterscript-when-to-use.html


Ваше пояснення - найкраще, що я прочитав. Тепер я розумію, чому важливо зареєструвати сценарії. Дякую!
Jee

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