La priorità dell'hook 'wp_enqueue_scripts' non ha effetto
In un tema su cui sto lavorando ci sono fino a 3 fogli di stile. Sto utilizzando l'hook 'wp_enqueue_scripts'. L'ordine dei fogli di stile è importante per sovrascrivere gli stili. Ho un codice come questo:
add_action('wp_enqueue_scripts', 'add_stylesheet_one', 10);
add_action('wp_enqueue_scripts', 'add_stylesheet_two', 14);
add_action('wp_enqueue_scripts', 'add_stylesheet_three', 12);
Con queste priorità l'ordine dei fogli di stile dovrebbe essere 'stylesheet_one', 'stylesheet_three' e 'stylesheet_two'. Ma la priorità non ha alcun effetto. Ho provato numeri diversi ma l'ordine non cambia. Mi sta sfuggendo qualcosa?
Grazie per l'aiuto!!!

Il problema è che le tue azioni vengono eseguite nell'ordine che percepisci, ma gli stili vengono semplicemente raccolti da WordPress e inclusi in un ordine casuale.
L'ordine dei tuoi add_actions non sarà importante. Farei così:
function add_all_stylesheets() {
// hai omesso questo dalla tua domanda, vedi sotto
}
add_action('wp_enqueue_scripts', 'add_all_stylesheets');
Ora - se vuoi che i tuoi script vengano inclusi in ordine, dovrai farli "dipendere" l'uno dall'altro in modo che si concatenino.
function add_all_stylesheets() {
wp_enqueue_style( 'stylesheet-one', get_template_directory_uri() . '/css/stylesheet-one.css' );
wp_enqueue_style( 'stylesheet-two', get_template_directory_uri() . '/css/stylesheet-two.css', array( 'stylesheet-one' ) );
wp_enqueue_style( 'stylesheet-three', get_template_directory_uri() . '/css/stylesheet-three.css', array( 'stylesheet-two' ) );
}
add_action('wp_enqueue_scripts', 'add_all_stylesheets');
Ora il tuo "stylesheet-two" dipende da "stylesheet-one" e "three" dipende da "two". Questo dovrebbe darti l'effetto desiderato.

Con questo come punto di partenza funziona. Grazie! Ma ad essere onesti, non risponde veramente alla mia domanda: :P Perché la priorità non ha effetto?? Ci sono alcune insidie da tenere a mente? Voglio solo sapere questo. Amo Wordpress e voglio conoscerlo in ogni dettaglio :D

Internamente WordPress attende di raccogliere tutti gli script prima di includerli.
Supponi che WordPress aggiunga 7 dei suoi script e poi tu ne aggiunga tre. Ad un certo punto, molto più tardi, WordPress esamina l'elenco e li include come ritiene opportuno (determinando quali script dipendono l'uno dall'altro).
Non importa in quale ordine aggiungi i tuoi perché l'ordine viene ignorato mentre WordPress esamina le dipendenze.
Ad esempio, aggiungi 3 script che necessitano di jQuery ma jQuery è aggiunto per quarto. jQuery viene spostato nella prima posizione.
Puoi garantire l'ordine solo con "3 dipende da 2", "2 dipende da 1".

Ok, ho capito. Con le dipendenze il parametro di priorità in 'add_action' verrà ignorato. Ma quando rimuovo tutte le dipendenze la priorità viene ancora ignorata. Se uso ad esempio add_action('wp_head', 'my_function', 5);
funziona. Questo comportamento è diverso su alcuni hook?

Cercherò di renderlo chiaro ancora una volta. La tua priorità non viene ignorata. Quell'ordine è quello in cui vengono aggiunti alla lista. Ma la lista viene riorganizzata. Puoi aggiungerli in wp_head, e potrebbe funzionare per ora, per pura fortuna. Ma se fai un upgrade o aggiungi un plugin, potrebbe non funzionare. Solo perché vengono aggiunti in ordine non garantisce che rimarranno in ordine. L'unico modo per garantirlo è usando le dipendenze.

So che è un po' tardi. Ma ora funziona come previsto.
add_action
ha un 3° argomento che rappresenta la priorità. Qui sotto, ho accodato gli script con priorità 10, 12 e 14
. Quindi, carica gli script in frontend con le priorità assegnate.
Di seguito, il mio snippet che funziona correttamente.
add_action( 'wp_enqueue_scripts', 'test_enqueue_styles_1', 10 );
add_action( 'wp_enqueue_scripts', 'test_enqueue_styles_2', 14 );
add_action( 'wp_enqueue_scripts', 'test_enqueue_styles_3', 12 );
function test_enqueue_styles_1() {
wp_enqueue_style( 'font-awesome-1-css', get_template_directory_uri() . 'assets/css/font-awesome.min.css' );
}
function test_enqueue_styles_2() {
wp_enqueue_style( 'font-awesome-2-css', get_template_directory_uri() . 'assets/css/font-awesome.min.css' );
}
function test_enqueue_styles_3() {
wp_enqueue_style( 'font-awesome-3-css', get_template_directory_uri() . 'assets/css/font-awesome.min.css' );
}
Sequenza di accodamento
test_enqueue_styles_1
test_enqueue_styles_3
test_enqueue_styles_2

Hmm, c'è un motivo per cui lo stai facendo in questo modo? Il metodo più convenzionale è il seguente.
(Quanto segue presuppone che i tuoi fogli di stile si trovino nella directory css del tuo tema.)
function my_enqueue_scripts() {
wp_enqueue_style( 'stylesheet_one', get_template_directory_uri() . '/css/stylesheet_one.css' );
wp_enqueue_style( 'stylesheet_three', get_template_directory_uri() . '/css/stylesheet_three.css' );
wp_enqueue_style( 'stylesheet_two', get_template_directory_uri() . '/css/stylesheet_two.css' );
}
add_action( 'wp_enqueue_scripts', 'my_enqueue_scripts' );
Detto questo - non sono sicuro del perché le priorità nel tuo metodo non funzionino. Probabilmente dovremmo vedere il codice nelle funzioni allegate.

inoltre, se specifichi una dipendenza per ogni stile, non importa in quale ordine li inserisci.

Lo so, potrei farlo in una singola funzione come nel tuo esempio. Lo sto facendo in questo modo perché sto usando le opzioni del tema e tutte le funzionalità relative alle opzioni del tema sono in file separati.

Mmh, probabilmente potresti comunque usare wp_enqueue_style nelle tue funzioni - e includere la dipendenza corretta, come suggeriscono Milo e infamouse.

Scusa, una parte del mio ultimo commento è andata persa. Ecco il testo completo :-) Lo so, potrei farlo in una singola funzione come nel tuo esempio. Lo sto facendo in questo modo perché sto utilizzando le opzioni del tema e tutte le operazioni relative alle opzioni del tema sono in file separati. Il foglio di stile principale viene accodato nel functions.php e gli altri fogli di stile vengono accodati in altri file. Quindi ho provato in questo modo.
