web-dev-qa-db-fra.com

la file d'attente ne fonctionne pas

j'utilise un plugin qui contient ce code et je veux changer l'emplacement de js pour qu'il soit situé dans le répertoire de mon modèle plutôt que du plugin sans modifier les fichiers du plugin.

class jqueryTimelinrLoad  {

  public function registerScripts()

    {

        if (!wp_script_is( 'jquery', 'registered' )) wp_register_script( 'jquery' );



        wp_deregister_script('jquery.timelinr');

        wp_register_script('jquery.timelinr', JQTL_BASE_URL . '/assets/js/jquery.timelinr-1.0.js', array( 'jquery' ));

    }
     public function loadScripts() {

            if (!is_admin()) {

                if (!wp_script_is( 'jquery', 'queue' )) wp_enqueue_script( 'jquery' );



                wp_enqueue_script('jquery.timelinr', JQTL_BASE_URL . '/assets/js/jquery.timelinr-1.0.js', array( 'jquery' ));

            }

        }
}

j'essaie cela et il ajoute le nouveau lien, mais l'ancien lien aussi toujours

function drw_timeline_js () {

        $result = $GLOBALS["jqueryTimelinrLoad"]->loadScripts();


        wp_dequeue_script('jquery.timelinr');
        wp_deregister_script( 'jquery.timelinr');


        wp_enqueue_script('jquery.timelinr2', get_template_directory_uri() . '/js/jquery.timelinr-1.0.js', array( 'jquery' ));

        return $result;
    }
add_action('init', 'drw_timeline_js', 1);
1
Amro Shalaby

Les scripts doivent être mis en file d'attente sur le hook d'action wp_enqueue_scripts, qui s'exécute après l'action init. Donc, retirer de la file d'attente sur init ne fonctionnera pas, car les fichiers sripts ne sont pas encore mis en file d'attente. Avant que les scripts mis en file d'attente ne soient imprimés, l'action wp_print_scripts est déclenchée pour vous permettre de retirer de la file d'attente ou de désenregistrer les scripts en toute sécurité à ce moment:

add_action( 'wp_print_scripts', 'drw_timelinr_dequeue' );
function drw_timelinr_dequeue () {

     wp_dequeue_script('jquery.timelinr');

}

add_action('wp_enqueue_scripts', 'drw_timeline_js');
function drw_timeline_js () {

    wp_enqueue_script('jquery.timelinr2', get_template_directory_uri() . '/js/jquery.timelinr-1.0.js', array( 'jquery' ));


}
3
cybmeta

Si loadScripts() est correctement enregistré/mis en file d'attente (le code posté ne montre pas le crochet utilisé), il est mis en file d'attente wp_enqueue_scripts QUI FONCTIONNE BIEN APRÈS LA init vous essayez d’effacer quelque chose qui n’a pas encore été ajouté et qui sera ajouté plus tard. En admettant que:

add_action('wp_enqueue_scripts', 'drw_timeline_js', PHP_INT_MAX);

PHP_INT_MAX garantira que votre code sera exécuté en dernier sur ce raccordement.

Je ne vois pas non plus la raison ou la nécessité de la ligne $result = $GLOBALS["jqueryTimelinrLoad"]->loadScripts(); ou de la ligne return dans votre fonction.

0
s_ha_dum