Forzare l'ordine di caricamento degli script in WordPress
Ho alcuni script che vengono messi in coda,
il problema è che voglio forzare l'ordine di priorità con cui questi script vengono caricati. C'è uno script in particolare che viene caricato da un plugin prima di quelli del tema e che richiede jQuery, tuttavia il plugin non richiede jQuery (cattiva programmazione del plugin, ma preferirei non toccare codice di terze parti per motivi di compatibilità futura)
c'è un modo per modificare l'ordine di caricamento degli script durante l'esecuzione?
Grazie mille
Ecco una soluzione possibile utilizzando i ganci di WordPress:
// Rimuovi lo script problematico
wp_dequeue_script('plugin-script-handle');
wp_deregister_script('plugin-script-handle');
// Registra nuovamente lo script con la dipendenza jQuery
wp_register_script('plugin-script-handle', 'path/to/script.js', array('jquery'), '1.0', true);
wp_enqueue_script('plugin-script-handle');
Oppure puoi utilizzare il filtro script_loader_tag
per modificare l'ordine:
add_filter('script_loader_tag', 'modify_script_priority', 10, 3);
function modify_script_priority($tag, $handle, $src) {
// Modifica la priorità per uno script specifico
if ('plugin-script-handle' === $handle) {
// Aggiungi attributi o modifica il tag script
return str_replace('src', 'defer src', $tag);
}
return $tag;
}

Devi semplicemente accodare i tuoi script prima che il plugin lo faccia. Puoi farlo impostando la priorità a 0 per il tuo hook. Ad esempio, fai come segue:
add_filter( 'wp_enqueue_scripts', 'wpse8170_enqueue_my_scripts', 0 );
// oppure se accodi i tuoi script sull'azione init
// add_action( 'init', 'wpse8170_enqueue_my_scripts', 0 );
function wpse8170_enqueue_my_scripts() {
wp_enqueue_script( 'myscript', 'http://percorso/del/mio/script.js', array( 'jquery' ) );
// altri miei script qui...
}
Impostando la priorità per i tuoi hook li posizionerai all'inizio della coda di chiamata e i tuoi script verranno aggiunti per primi.

scusate l'ingenuità ma immagino che wpse8170_enqueue_my_scripts_on_init sia una funzione personalizzata con una chiamata standard enqueue_scripts al suo interno?

Questo non funziona sempre: http://wordpress.stackexchange.com/questions/91961/hook-wp-enqueue-scripts-priority-has-no-effect

Per aggiungere uno script prima di altri script, usa wp_register_script()
invece di wp_enqueue_script()
, e poi aggiungi manualmente il tuo script come primo nella coda:
wp_register_script('handle', get_template_directory_uri()."/custom.js");
array_unshift(wp_scripts()->queue, 'handle');
