La ce prioritate suprascrie add_filter funcțiile de bază?
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ă?

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.

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.

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.

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.
