La ce prioritate suprascrie add_filter funcțiile de bază?

23 sept. 2010, 07:16:36
Vizualizări: 22.2K
Voturi: 7

Scriu un plugin care adaugă câteva miniaturi suplimentare, checkbox-uri etc. la sfârșitul unei postări.

Încerc să înțeleg cum să folosesc add_filter în mod corect.

Practic, am următorul cod:

add_filter('the_content', 'do_some_magic_at_the_end');

Și există o funcție corespunzătoare do_some_magic_at_the_end care preia $content și adaugă câteva elemente la acesta.

Vreau ca acest filtru să fie adăugat după toate celelalte filtre. Nu vreau să suprascrie niciun alt filtru. Documentația spune că prioritatea implicită este 10, așa că presupun că este pur și simplu adăugat într-un lanț de filtre care sunt executate pe the_content.

Dacă setez prioritatea la 1, va suprascrie funcțiile de bază?

0
Toate răspunsurile la întrebare 2
2
22

Nu există un răspuns definitiv la această întrebare deoarece nu există o limită pentru prioritățile mari/mici. De asemenea, pluginurile pot fi mult mai puțin atente decât nucleul WordPress în ceea ce privește acest aspect.

  • 11 este un număr bun pentru a fi după prioritatea implicită;
  • 20 pentru a fi mai târziu;
  • mii de ori este bun pentru a fi după oricine nu a adăugat mai multe zerouri la numărul său;
  • 9 este un număr bun pentru a fi puțin mai devreme decât prioritatea implicită;
  • 1 pentru a fi foarte devreme;
  • -1 pentru a fi aproape sigur primul, deoarece foarte puțini oameni își amintesc că prioritățile pot fi negative.

În general, dacă doriți să vă asigurați că sunteți înaintea altor funcții, va trebui să analizați tot ce este adăugat la hook în configurația dvs. specifică și să depanați prin aceasta. S-ar putea să fie nevoie să creați o funcție wrapper pentru a adăuga filtrele dumneavoastră la o anumită etapă de încărcare sau chiar să mutați alte filtre.

Și dacă creați un plugin pentru distribuție, puteți ghici, dar nu puteți fi sigur.

23 sept. 2010 08:16:16
Comentarii

O modalitate (foarte ineficientă) de a vă asigura că filtrul dvs. rulează ultimul, este să vă conectați la acțiunea all, unde puteți examina matricea $wp_filter și să adăugați filtrul dvs. cu cea mai mare prioritate. Deci, tehnic puteți fi sigur, dar nu merită. Puteți folosi și PHP_INT_MAX ca prioritate.

Jan Fabry Jan Fabry
23 sept. 2010 11:04:22

Bun punct despre all, dar nu aș folosi-o în acest fel. Într-adevăr, teribil de ineficient. Cât despre maxim, nici eu nu aș merge în extreme... Prioritatea este stocată ca cheie de matrice, care poate fi interpretată atât ca întreg, cât și ca șir de caractere de către PHP. A merge spre cazuri limită ar putea provoca probleme.

Rarst Rarst
23 sept. 2010 11:20:39
2

Nu vei suprascrie nimic. Fiecare nivel de prioritate este de fapt o listă de filtre de utilizat. Dacă ai mai multe lucruri diferite care se conectează la același filtru cu aceeași prioritate, toate acestea vor fi rulate.

18 dec. 2012 22:06:56
Comentarii

ai greșit în legătură cu asta

User User
13 sept. 2019 02:11:48

Doar pentru a adăuga o clarificare suplimentară, acest lucru este parțial corect și parțial greșit. Într-adevăr, nu suprascrii comportamentul de bază; fie îl modifici înainte, fie după. Oricum, toate filtrele sunt prin definiție rulate secvențial, așa că, mai devreme sau mai târziu, toate filtrele sunt executate exact o dată și unul câte unul, inclusiv cele de bază, dacă există. Din: Sursa pe care o citesc: funcțiile cu aceeași prioritate sunt executate în ordinea în care au fost adăugate la acțiune.

GigiSan GigiSan
30 oct. 2020 16:11:49