Quand devrais-je utiliser wp_register_script () avec wp_enqueue_script () et seulement wp_enqueue_script ()?


55

J'ai du mal à comprendre quand vous devez utiliser wp_register_script(). Actuellement, j'utilise quelque chose comme:

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 );
}

J'ai beaucoup lu (Codex, blogs, etc.), mais je ne comprends pas très bien quand je devrais m'inscrire en premier ou quand je devrais simplement mettre en file d'attente. Par exemple, j'ai remarqué que TwentyTwelve n'enregistre pas de styles ou de scripts, mais les met en file d'attente.

Réponses:


50

La wp_register_script()page du Codex dit littéralement:

Un moyen sûr d’enregistrer les javascripts dans WordPress pour une utilisation ultérieure avec wp_enqueue_script().

Cela signifie que si vous souhaitez enregistrer vos scripts sans les charger directement dans vos pages, vous pouvez enregistrer les fichiers une fois, puis les charger lorsque vous en avez besoin.

Par exemple:

Vous avez une instruction switch qui charge certaines fonctionnalités, mais deux cas sur trois nécessitent un fichier javascript particulier, et un non. Vous pouvez mettre le script en file d'attente à tout moment, ce qui coûte plus de ressources, ou simplement le faire quand vous en avez besoin:

...
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;
}

Il n'est pas nécessaire d'enregistrer un script, puis de le mettre en file d'attente, mais cela peut apporter une certaine logique à votre code si vous enregistrez tous les scripts dont vous avez besoin quelque part functions.phpdans votre code plutôt que partout ailleurs.

Le Codex dit également ce qui suit:

Utilisez l' wp_enqueue_scriptsaction pour appeler cette fonction ou admin_enqueue_scriptspour l'appeler du côté de l'administrateur.

Cela signifie que si vous souhaitez mettre votre script en file d'attente sur le frond-end et dans le back-end, vous pouvez enregistrer un script une fois, puis le charger sur le front-end avec wp_enqueue_scriptet dans le back-end avec admin_enqueue_script.
De cette façon, vous n'aurez pas le même recours en file d'attente deux fois dans un thème, un plugin, un widget ou autre.


Je vous remercie. Cela éclaircit beaucoup. Alors, pensez-vous que TwentyTwelve ne se donne pas la peine de s’inscrire d’abord car il va les charger à coup sûr?
akTed

Cela pourrait être une possibilité. Je ne sais pas comment le thème Twenty Twelve est construit depuis que je ne l' utilise jamais, mais ils vous auront leurs raisons enqueueau lieu de register.
Mike Madern

2
En ce sens, je ne suis pas d'accord avec "Vous pouvez mettre le script en file d'attente à chaque fois, ce qui coûte plus de ressources, ou simplement le mettre en file d'attente lorsque vous en avez besoin". Dans votre exemple de code, vous pouvez supprimer l'appel du registre et avoir à la place plusieurs appels équivalents à part entière (avec $ src arg) wp_enqueue_style(). Cela représenterait simplement un effort supplémentaire de frappe, mais n'entraînerait pas de ressources plus importantes. Correct?
Jan-Philip Gehrcke le

7
Un point qui a été laissé de côté par toutes les explications jusqu’à présent, est que vous pouvez wp_register_script()simplement enregistrer un script afin qu’il puisse être utilisé comme dépendance pour d’autres scripts et ne soit chargé qu’avec ceux-ci, sans jamais être mis directement en file d’alarme.
JHoffmann

1
Même si cela explique bien cela, je vous recommande de lire également cette réponse .
lowtechsun

8

IMHO le principal avantage d'utiliser wp_register_scriptavant wp_enqueue_scriptsest illustré dans le paragraphe suivant du Codex :

Les scripts qui ont été pré-enregistrés à l'aide de wp_register_script () n'ont pas besoin d'être mis en file d'attente manuellement à l'aide de wp_enqueue_script () s'ils sont répertoriés en tant que dépendance d'un autre script mis en file d'attente. WordPress inclura automatiquement le script enregistré avant d'inclure le script en file d'attente qui répertorie le descripteur du script enregistré en tant que dépendance.

Si vous pensez ne pas en avoir besoin (par exemple, parce que vous êtes sûr à 100% que votre script ne sera impliqué dans aucune dépendance), vous pouvez probablement y aller directement wp_enqueue_scripts, sans préalable wp_register_script.


2

J'ai parcouru quelques articles et je tire la conclusion suivante. Je pense que ça aide.

  1. Enregistrer des scripts à l'aide, wp_register_script()c'est simplement enregistrer; ne pas le charger. Le script enregistré ne sera pas chargé tant qu'il n'aura pas été mis en file d'attente wp_enqueue_script().
  2. Nous n'avons pas besoin de vous inscrire et de mettre en file d'attente chacun des scripts simultanément. Nous devrions juste faire une file d'attente. L'enregistrement n'est pas obligatoire car la wp_enqueue_script()fonction enregistre automatiquement le script.
  3. Mais nous devons nous inscrire lorsque nous sommes dans l'une des situations suivantes:

    une. Supposons que nous ayons besoin d’un script à charger dans plus d’un endroit, une fois en front-end et une fois en back-end (page admin). Maintenant, nous pouvons enregistrer le script une seule fois. Et ensuite, mettez-le en file d'attente individuellement et séparément. Regardez, mettre en file d'attente signifie charger. L'enregistrement ne signifie pas le chargement. Si nous ne l'enregistrons pas, il sera automatiquement enregistré autant de fois que nous le ferons en file d'attente. D'un autre côté, si nous l'enregistrons une fois, il sera enregistré une fois, peu importe le nombre de fois que nous l'enregistrons.

    b. Si nous voulons utiliser un script en tant que dépendance d'autres scripts, nous n'avons pas besoin de le mettre en file d'attente wp_enqueue_script(). Il suffit de l'enregistrer avec wp_register_script(). Et il sera automatiquement mis en file d'attente lorsque nous utiliserons son nom de descripteur comme dépendance d'autres scripts mis en file d'attente wp_enqueue_script().

    c. Si nous voulons que le script soit chargé lorsque cela est nécessaire plutôt que d'être chargé en une fois, nous pouvons simplement l'enregistrer pour une utilisation ultérieure. Le cas d'utilisation a été présenté ci-dessus.

NB: Pour autant que je sois convaincu, la même conclusion peut être tirée pour les feuilles de style CSS. Je veux dire que nous pouvons utiliser wp_register_style()et wp_enqueue_style()de la même manière.

Notez que la conclusion tirée ici reflète ma propre déduction. Si je me trompe, corrigez-moi s'il vous plaît. Et vous pourriez avoir atteint une conclusion différente et bien meilleure. Si tel est le cas, merci de nous le faire savoir. Qui sait? Peut-être que le vôtre est le meilleur. Comme dit le proverbe, «autant de principes, autant de manières de sauver.» :)

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


Votre explication est la meilleure que j'ai lue. Maintenant, je comprends pourquoi il est important d’enregistrer des scripts. Je vous remercie!
Jee

Merci beaucoup @Jee
Mohammad Shohel Rana
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.