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