Forzare l'ordine di caricamento degli script in WordPress

13 giu 2012, 11:38:48
Visualizzazioni: 28.7K
Voti: 9

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;
}
0
Tutte le risposte alla domanda 2
3
16

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.

13 giu 2012 11:48:22
Commenti

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?

Alex Alex
13 giu 2012 11:51:21

@Alex ho aggiornato la mia risposta, dai un'occhiata.

Eugene Manuilov Eugene Manuilov
13 giu 2012 12:01:29
0

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');
4 dic 2019 19:32:38