web-dev-qa-db-fra.com

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

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 mettre en file d'attente. Par exemple, j'ai remarqué TwentyTwelve / n'enregistre pas de styles ou de scripts, il les met simplement en file d'attente.

51
akTed

La page wp_register_script() 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 fournir une certaine logique à votre code si vous enregistrez tous les scripts dont vous avez besoin quelque part dans votre functions.php et non pas partout dans votre code.

Le Codex dit également ce qui suit:

Utilisez l'action wp_enqueue_scripts pour appeler cette fonction ou admin_enqueue_scripts pour 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_script et à l'arrière. -end avec admin_enqueue_script.
Ainsi, vous n’auriez pas le même recours en file d’attente deux fois dans un même thème, plug-in, widget ou autre.

46
Mike Madern

IMHO le principal avantage d'utiliser wp_register_script avant wp_enqueue_scripts est illustré dans le paragraphe suivant de Codex :

Les scripts 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 utiliser directement wp_enqueue_scripts, sans un wp_register_script préliminaire.

6
Franco

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

  1. Enregistrer des scripts à l'aide de wp_register_script () ne fait que s'enregistrer; ne pas le charger. Le script enregistré ne sera pas chargé tant qu'il n'aura pas été mis en file d'attente à l'aide de 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 fonction wp_enqueue_script () 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). Nous pouvons maintenant 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. Enregistrer ne signifie pas charger. 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 avec 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 avec 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.

N.B. 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://sxbook.blogspot.com/2018/12/wpregisterscript-when-to-use.html

0