web-dev-qa-db-fra.com

Quand est-il trop tard pour appeler l'action wp_enqueue_scripts?

Je crée un plugin qui met toujours un script en file d'attente dans le pied de page. J'ai aussi une fonction qui, si appelée, mettrait en file d'attente un script supplémentaire qui dépend de l'autre. Voici le format de base de mon plugin ...

<?php
class MyPlugin {
    public function __construct() {
        add_action('wp_enqueue_scripts', array($this, 'enqueue_scripts'));
    }

    public function enqueue_scripts() {
        wp_enqueue_script('myscript', plugins_url('js/myscript.js', __FILE__), array('jquery'), null, true);
    }

    public function api() {
        add_action('wp_enqueue_scripts', array($this, 'api_scripts'));
    }

    public function api_scripts() {
        wp_enqueue_script('api', plugins_url('js/api.js', __FILE__), array('myscript'), null, true);
    }
}
$_GLOBALS['myplugin'] = new MyPlugin();

Dans le fichier functions.php de mon thème, je voudrais savoir quand je peux faire un appel pour mettre le script en file d'attente. J'ai essayé de joindre à plugins_loaded, mais le script n'est pas appelé.

<?php
function myfunction() {
    global $myplugin;
    $myplugin->api();
}
add_action('plugins_loaded', 'myfunction');
1
livearoha

La fonction wp_enqueue_scripts-- avec un 's' - est utilisée comme rappel à wp_head . Tout ce que la fonction wp_enqueue_scripts fait déclenche l'action wp_enqueue_scripts . Donc, la dernière fois que vous seriez capable d'utiliser l'action wp_enqueue_scripts est antérieure au rappel wp_enqueue_scripts sur le hook wp_head.

En termes de modèles de thème, cela signifie que vous devez le brancher avant get_header ou sur un crochet suffisamment tôt dans la séquence de hook déclenchée en tant que conséquence.

Couple de notes:

  1. C'est $GLOBAL pas $_GLOBALS-- incohérent, je sais.
  2. Cela fonctionne parfaitement si n'est pas accroché à plugins_loaded. C'est-à-dire que cela se trouve dans le functions.php: global $myplugin; $myplugin->api(); du thème. Je ne peux pas dire que je sais pourquoi la version avec crochet ne fonctionne pas. Je suppose que c'est tout simplement trop tôt, mais que je devrais faire des recherches pour mettre au point la mécanique. after_setup_theme fonctionne et donc wp_loaded
2
s_ha_dum