WordPress Hooks: Begyndervejledning til tilføjelse af dine egne kroge

WordPress Hooks: Begyndervejledning til tilføjelse af dine egne kroge

WordPress Hooks: Begyndervejledning til tilføjelse af dine egne kroge
СОДЕРЖАНИЕ
02 июня 2020

Plugins er det måde at udvide WordPress. Årsagen til at det er så let at få WordPress til at gøre dit bud, har at gøre med kroge, der er spredt på tværs af kildekoden.


Vil du gøre noget, så snart et indlæg er offentliggjort? Vil du ændre uddragets længde? Vil du oprette din egen sidevisningsstatistik? At finde den rigtige krog er alt hvad du skal gøre.

Men hvad med at gøre det samme med plugins? Kroge er ikke kun til brug i WordPress, de er i det væsentlige et designmønster, du kan implementere i dit eget arbejde.

I denne artikel viser jeg dig, hvordan du kan oprette dine egne kroge for at gøre det nemt for dig eller andre at bygge videre på dit arbejde.

Hvorfor vi har brug for kroge

For at vise dig, hvordan fantastiske kroge kan være, lad os se på et eksempel fra den virkelige verden: Avancerede brugerdefinerede felter. Dette plugin giver dig mulighed for at tilføje fleksible brugerdefinerede datafelter til indlæg; vi taler om Google Maps, talefelter, multiple choice og mere.

Alt dette gøres via en dejlig brugergrænseflade, alt hvad du skal gøre er at bruge funktioner som get_field () eller the_field () i forenden. Så langt så godt.

Lad os antage, at du bygger et værktøj, der giver folk mulighed for at sælge ting, der tilbyder et felt til prisen og et for valutaen. Internt vil du dog altid gemme priser i dollars, uanset hvilken valuta brugeren vælger at vise i.

Hvis ACF (Advanced Custom Fields) ikke har nogen kroge, ville dette være vanskeligt at gøre, skal du muligvis bruge en mekanisme uden for ACF for at gemme dette felt. Heldigvis er vi dækket af ACF / save_post handling. Du kan bruge denne handling til at ændre $ _POST-data, før de gemmes – et perfekt tidspunkt at konvertere prisen til Dollars.

Dette er et meget praktisk eksempel på kroge, men der er en anden grund: fremtidssikring og udvidbarhed. Kroge ligner en API, de giver dig retning; en ramme så at sige. Hvis du gemmer vigtige data, skal du automatisk oprette en krog, så andre kan manipulere dataene, hvis det er nødvendigt. Hvis du viser noget, der er kritisk for din applikation, skal du f.eks. Bruge et filter, der tillader brug for at definere antallet af viste billeder.

Sådan fungerer kroge internt

For at oprette vores egne kroge, skal vi gøre nøjagtigt, hvad WordPress gør internt – bruge do_action () og Apply_filters () -funktionerne til at udføre alle hooked-funktioner. Lad os vende os til WordPress-kildekoden for at se, hvordan disse fungerer.

WordPress bruger funktionen wp_trim_excerpt () internt til at oprette et uddrag. I WordPress 4.1 er denne funktion defineret i wp-inkluderer / formatering.php, startende på linje 2542. Hvis du vender din opmærksomhed mod linje 2560, skal du se følgende:

$ excerpt_length = Apply_filters (‘excerpt_length’, 55);

Hvad dette betyder er følgende: Kør hver eneste funktion, der er tilsluttet krokene til uddrag_længde, og returner den endelige værdi. Lad os sige, at du bruger 3 plugins, der ændrer uddragets længde, hvad sker der så? Lad os samle disse funktioner ét sted og se på:

add_filter (‘uddrag_længde’, ‘plugin_a_excerpt_modify’, 20);
plugin_a_excerpt_modify ($ længde) {
returnere $ længde – 10;
}

add_filter (‘uddrag_længde’, ‘plugin_b_excerpt_modify’, 32);
plugin_b_excerpt_modify ($ længde) {
retur 104;
}

add_filter (‘uddrag_længde’, ‘plugin_c_excerpt_modify’, 16);
plugin_c_excerpt_modify ($ længde) {
retur 20;
}

I sidste ende vil uddragslængden være 104 ord lang. Filtre udføres i deres prioriterede rækkefølge. Derfor udføres funktionen af ​​plugin C først. Hvis der ikke blev tilsluttet nogen anden funktion, ville længden nu være 20 ord. Dernæst sparker plugin A ind, og længden bliver 10. Endelig vejer plugin B ind, hvilket gør længden 104.

do_action () bruger nøjagtig den samme mekanisme, der udfører alle funktioner, der er bundet til krogen defineret som den første parameter.

Bemærk, at dette mønster er helt lukket, det er ikke afhængigt af nogen specielle definitioner. Du kan bruge do_action (‘lol_hook’) overalt, hvor du vil, i værste fald er der ingen funktioner, der er knyttet til lol_hook. Med andre ord, vi har allerede infrastrukturen til at skabe vores egne kroge!

Oprettelse af vores egne kroge

Som jeg nævnte ovenfor, er alt, hvad vi skal gøre, at sørge for at bruge do_action () og / eller add_filter og sørge for at dokumentere det. På denne måde vil kodere og brugere faktisk vide, at de er der.

Lad os formode, at vi opretter et galleri med de seneste uploadede billeder trukket direkte fra databasen, noget i denne retning:

$ args = matrix (
‘post_type’ => ‘vedhæftet fil’,
‘post_status’ => ‘nogen’,
‘orderby’ => ‘dato’,
‘orden’ => ‘DESC’,
‘posts_per_page’ => 10,
‘felter’ => ‘Id’er’
);
$ images = new WP_Query ($ args);
$ gallery = ‘[‘ .’gallery ids ="’. implode (‘,’, $ billeder). ‘"] ”.’;
echo do_shortcode ($ galleri);

I dette eksempel opretter vi en forespørgsel, der sikrer, at vi kun henter billeder, sorteret efter dato og begrænset til 10 resultater. Ved hjælp af feltparameteren sørgede jeg for, at en række id’er returneres. Derefter byggede jeg en regelmæssig WordPress-galleri-shortcode ud af disse oplysninger.

Der er to tilgange, du kan tage for at tilføje kroge her. Du kan tilføje det simpelthen inden definitionen af ​​$ args-matrixen som denne:

$ posts_per_page = Apply_filters (‘my_gallery / posts_per_page’, 10);

I dette tilfælde skal du bruge variablen $ posts_per_page i matrixen. En bedre løsning ville måske være at lade hele matrixen ændres. Dette giver andre plugins (eller du i fremtiden) mulighed for at tilføje kategori, tag og andre begrænsninger på gallerierne – her er den fulde kode:

$ args = matrix (
‘post_type’ => ‘vedhæftet fil’,
‘post_status’ => ‘nogen’,
‘orderby’ => ‘dato’,
‘orden’ => ‘DESC’,
‘posts_per_page’ => 10,
‘felter’ => ‘Id’er’
);

$ args = Apply_filters (‘my_gallery / query_args’, $ args);

$ images = new WP_Query ($ args);
$ gallery = ‘[‘ .’gallery ids ="’. implode (‘,’, $ billeder). ‘"] ”.’;
echo do_shortcode ($ galleri);

Det er alt, hvad der er der til det. Andre plugins kan nu bruge krogen my_gallery / query_args til at ændre funktionaliteten i de oprettede gallerier.

En note om navngivningen: den forreste skråstreg er overhovedet ikke nødvendig. Du kan bruge ‘my_plugin_query_args’ eller et hvilket som helst andet format, du ønsker. Jeg foretrækker den skråstreg, fordi den tydeligt angiver, hvilket plugin der opretter det og den funktionalitet, det giver.

Konklusion

Hooks er ekstremt kraftfulde og kan ikke kun bruges til at udvide WordPress, men også til at udvide dine egne plugins eller endda temaer. Du skal passe på ikke at gå over bord og tilføje kroge i hver eneste krik og knold i din ansøgning.

I stedet for at tilføje en krog til rækkefølgen, poststatus, post_type og posts_per_page hver for sig, tilføjede jeg et filter, der kan ændre hele matrixen på én gang. Andre bit af data er muligvis ikke fornuftigt at tilføje kroge til, det er i sidste ende op til dig.

Held og lykke med at skabe flere modulære og udvidelige applikationer, lad os vide, om du har brugt dine egne kroge et sted, der er køligt før!

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Это интересно
    Adblock
    detector