A quale priorità add_filter sovrascrive le funzioni core?

23 set 2010, 07:16:36
Visualizzazioni: 22.2K
Voti: 7

Sto scrivendo un plugin che aggiunge alcune miniature extra, checkbox, ecc. alla fine di un post.

Sto cercando di capire come utilizzare correttamente add_filter.

In pratica, ho:

add_filter('the_content', 'do_some_magic_at_the_end');

E c'è una corrispondente funzione do_some_magic_at_the_end che prende $content e vi aggiunge alcuni elementi.

Voglio che questo filtro venga aggiunto dopo tutti gli altri filtri. Non voglio che sovrascriva nessun altro filtro. La documentazione dice che la priorità predefinita è 10, quindi presumo che venga semplicemente aggiunto a una catena di filtri che vengono eseguiti su the_content.

Se imposto la priorità a 1, andrà a sovrascrivere qualche funzione core?

0
Tutte le risposte alla domanda 2
2
22

Non esiste una risposta definitiva a questa domanda perché non c'è un limite predefinito per le priorità alte/basse. Inoltre, i plugin potrebbero essere molto meno attenti del core riguardo a questo aspetto.

  • 11 è un buon numero per essere subito dopo la priorità di default;
  • 20 per essere in ritardo;
  • migliaia è un buon valore per essere più in ritardo di chiunque non abbia aggiunto più zeri alle proprie migliaia;
  • 9 è un buon numero per essere leggermente prima della priorità di default;
  • 1 per essere veramente in anticipo;
  • -1 per essere quasi sicuramente primi, perché pochissime persone ricordano che le priorità possono essere negative.

In generale, se vuoi essere sicuro di essere prima di altre funzioni, dovrai esaminare tutto ciò che viene aggiunto all'hook nel tuo setup specifico e fare debug. Potresti aver bisogno di creare una funzione wrapper per aggiungere i tuoi filtri in uno specifico stadio di caricamento o persino spostare altri filtri.

E se stai sviluppando un plugin per la distribuzione, puoi fare delle supposizioni, ma non puoi esserne certo.

23 set 2010 08:16:16
Commenti

Un modo (molto inefficiente) per assicurarsi che il tuo filtro venga eseguito per ultimo, è agganciarsi all'azione all, dove puoi esaminare l'array $wp_filter e aggiungere il tuo filtro con la priorità più alta. Quindi tecnicamente puoi esserne sicuro, ma non ne vale la pena. Potresti anche usare PHP_INT_MAX come priorità.

Jan Fabry Jan Fabry
23 set 2010 11:04:22

Ottimo punto riguardo a all ma non lo userei in quel modo. Estremamente inefficiente infatti. Per quanto riguarda il massimo, eviterei anche gli estremi... La priorità è memorizzata come chiave di array, che PHP può interpretare sia come intero che come stringa. Spingersi verso casi limite potrebbe causare problemi.

Rarst Rarst
23 set 2010 11:20:39
2

Non sovrascriverai nulla. Ogni livello di priorità è in realtà un elenco di filtri da utilizzare. Se hai diverse cose che si agganciano allo stesso filtro con la stessa priorità, tutte verranno eseguite.

18 dic 2012 22:06:56
Commenti

ti sbagli su questo

User User
13 set 2019 02:11:48

Solo per aggiungere ulteriore chiarezza, questo è parzialmente corretto e parzialmente sbagliato. Infatti non sovrascrivi il comportamento di base; lo modifichi prima o dopo. In ogni caso tutti i filtri sono per definizione eseguiti in sequenza, quindi, prima o poi, tutti i filtri vengono eseguiti esattamente una volta e uno alla volta, inclusi quelli di base, se presenti. Da: Fonte che cito: le funzioni con la stessa priorità vengono eseguite nell'ordine in cui sono state aggiunte all'azione.

GigiSan GigiSan
30 ott 2020 16:11:49