Vi vil bygge et plugin for å se på bruk av tilgjengelige filtre og kroker for å endre administrasjonspanelets innleggskolonner. Legg til, slett og fyll dem med innhold.
Når du tenker på WordPress-utvikling, er de vanligste tingene jeg finner som kommer til å tenke på tema og plugin-funksjonalitet og implementering for å lage en enkel ide, og se hvordan du vil. Med en backend-side og noen eller mange innstillinger her og der.
WordPress API-fleksibilitet går langt utover de tingene du kanskje har vært kjent med.
Før vi til og med begynner å gjøre noe, må vi forstå hva vi skal gjøre, hva vårt endelige resultat skal være. Vi skal bygge et plugin som skal administrere admin panelpostkolonner og deres innhold. For å bygge et plugin trenger vi en ide som passer til våre behov, så for denne opplæringen vår plugin kommer til å svinge innleggene funksjonaliteten til et veldig enkelt pris- og valutaadministrasjonsgrensesnitt. For å være enda mer spesifikt, skal vi:
Og det er det, i et nøtteskall, alt som denne opplæringen handler om. Igjen snakker vi om å implementere dette bare på administrasjonspanelets innleggsføringssider. Som en del av planen er det underforstått at du vet hvordan en grunnleggende WordPress-plugin er opprettet og fungerer, men likevel skal jeg nevne at vi skal lage en katalog i plugins-mappen til WordPress med navnet på produkts og en fil i det heter productA.php. Jeg antar at det er åpenbart nå at vårt plugin er oppkalt Produkt A
, Jeg tror det er et godt navn for en enkel plugin med de ovennevnte funksjonene i forbindelse med denne opplæringen.
Dette er en morsom, enkel del, og skaper de første mest nødvendige delene av plugin, nemlig de ting som identifiserer den til WordPress som et plugin og kjører filen for at pluginet skal fungere skikkelig. Så vi går videre og lager vår Plugin Name
, plugg inn Beskrivelse
, Forfatter
navn og plugin Versjon
topptekstverdier som kommenteres øverst på plugin-filkilden, akkurat som i følgende eksempel:
Trinn 3 Implementere nødvendige tiltak og filtre
Det første vi skal gjøre er å legge til meta-box-funksjonaliteten i plugin-modulen. Vi vil legge til en skreddersydd metaboks på siden for redigering av innlegg, et sted øverst på høyre sidefelt. For å gjøre dette må vi skape en handling (eller krok) funksjonaliteten som vi skal ta vare på litt senere, men la oss se hvordan kroken kalles og implementeres i dette trinnet først:
Meta Box Hook
funksjon pA_admin_init () add_meta_box ('pA_metaid', __ ('kvantitet / pris', 'pA_textdomain'), 'pA_inner_custom_box', 'innlegg', 'side', 'høy'); add_action ('admin_init', 'pA_admin_init');Først legger vi til en ny handling nederst i filen vår, som vi skal bruke til en første parameter, handlingsmerket til
admin_init
for å ringe denne funksjonen når en bruker får tilgang til administrasjonsområdet. Den andre parameteren er tilbakeringingsfunksjonsnavnet som skal implementeres når kroken er aktivert. Vi skal ringe denne funksjonenpA_admin_init
og det ser ut som ovenfor.De
pA_admin_init
funksjonen inneholder metoden som skaper meta-boksen vi trenger, generert av funksjonenadd_meta_box
med følgende variabler:
pA_metaid
- for en unik identifikator av meta-boksen__ ('kvantitet / pris', 'pA_textdomain')
- en streng som representerer tittelen på meta-boksen'PA_inner_custom_box'
- tilbakeringingsfunksjonen'post'
- en streng som representerer innleggstypen (fordi vi jobber med innlegg, skal vi sette strengverdien til "post
''side'
- en streng som representerer skjermposisjonen der vi vil at meta-boksen skal være på, kan vi bruke 'normal
','avansert
'eller'side
'. Vi bruker 'side
'som vi vil at den skal vises på høyre side av innholdet vårt'høy'
- posisjonen blant de andre meta-bokselementene på sidenes innholdssideDette ville være ganske mye det for det første trinnet i meta-box-handlingen.
På et tidspunkt må dataene som er introdusert i meta-boksen, bli lagret, for å lagre det må vi legge til en annen krok på listen, denne gangen med en annen spesifikk kode som en første parameter.
add_action ('save_post', 'pA_save_postdata');
Eksemplet ovenfor implementerer den trengte kroken. Som du kan se, er merkeparameteren som brukes i dette tilfellet lagre post
For å komme til det punktet der innlegget er sendt, sendes alle formelementene til PHP og lagres i databasen, slik at vi kan lagre dataene nøyaktig når skjemaet sendes inn og WordPress behandler det. Tilbakeringingsfunksjonen som gjør alt arbeidet heter pA_save_postdata
, Vi vil lage denne funksjonen litt senere i opplæringen når vi skal ta vare på alle aspekter av meta-boksen.
Fordi vi prøver å lage ekstra kolonner i vår innleggsside, må vi fylle ut radene med dataene til de nye kolonnene. For å gjøre dette skal vi bruke følgende kode:
add_action ('manage_posts_custom_column', 'pA_manage_posts_custom_column', 10, 2);
Koden som brukes er manage_posts_custom_column
og tilbakeringingsfunksjonen pA_manage_posts_custom_column
, funksjon som vi skal bygge om noen få øyeblikk.
Sist men ikke minst, vi vil legge til og fjerne noen få kolonner fra listen over innleggssider. For å gjøre dette må vi filtrere de eksisterende og fjerne eller legge til som vi ønsker ved å ringe et filter som i neste eksempel:
add_filter ('manage_posts_columns', 'pA_manage_posts_columns');
Filteret, akkurat som handlingene, har hovedparametere som vi bruker, en er taggen, i dette tilfellet en streng med navnet på 'manage_posts_columns'
og en tilbakeringingsfunksjon, også som en streng, men med navnet på 'pA_manage_posts_columns'
. Vi bygger og bruker denne funksjonen i ett av de neste trinnene.
Som vi vil lage en meta-boks, og vi allerede setter kroker og funksjoner for å komme til en tilbakeringingsmetode som genererer den, må vi skrive koden for den.
Først skal vi ta en titt på pA_inner_custom_box
funksjon. Denne funksjonen har veldig grunnleggende kode inne i det som genererer og styrer et skjema med data. For det første er det 3 variabler $ pA_price
, $ pA_quantity
, og $ pA_currency
å holde verdiene av våre 3 elementer vi vil sette inn i metakoden og innleggslisten. For å gjøre dette, skal vi få dem fra de tilpassede feltene hvor vi skal lagre dem neste i lagre post
handling. Deretter lager vi HTML-skjemafelene som vi skal bruke til å legge inn dataene når innlegget er oppdatert eller publisert, igjen, ved hjelp av lagre post
tilbakeringingsfunksjon Alt denne koden er tilgjengelig her fullt ut:
funksjon pA_inner_custom_box () global $ post; $ pA_price = get_post_meta ($ post-> ID, 'pA_price', true); $ pA_quantity = get_post_meta ($ post-> ID, 'pA_quantity', true); $ pA_currency = get_post_meta ($ post-> ID, 'pA_currency', true); ?>
| |
valuta: | type = "radio" name = "pA-valuta" verdi = "USD" /> USD / type = "radio" name = "pA-valuta" verdi = "GBP" /> GBP / type = "radio" name = "pA-valuta" verdi = "EUR" /> EUR |
Nå, for det første, hvorfor bruker vi tilpassede felt? For enkel administrasjon og for fremtidig enkel sortering, filtrering i innleggsprosessen. For det andre bruker vi to tekstbokser for hver av pris- og mengdeverdiene og radioknappene med USD, GBP og EURO-alternativer for valutaverdiene. Hver av disse formelementene er gitt verdiene til variablene som vi tidligere har fylt med verdier fra bestemte tilpassede felt.
Det er det for denne delen, når brukeren oppdaterer eller publiserer et innlegg, blir disse verdiene sendt til neste tilbakeringingsfunksjon av opplæringen vår.
Den andre og svært avgjørende delen av meta-boksens funksjonalitet er å lagre dataene vi sender inn. I begynnelsen av opplæringen implementerte vi en funksjon som styrer de innsendte dataene. Nå skal vi se på hvordan dens tilbakeringingsfunksjon fungerer.
For det første fordi vi trenger en måte å identifisere innlegget må vi inkludere den globale variabelen $ post
for å få ID-verdien til det nåværende innlegget. Deretter vil vi sjekke om en skjult variabel som vi opprettet som et skjemaelement ble sendt inn eller ikke. Hvis det ble sendt inn, begynner vi å trekke ut verdiene til egendefinerte felt fra databasen for hvert element vi er interessert i: pris, mengde og valuta. Vi vil bruke get_post_meta
funksjon for å få de tilpassede feltmeta-nøkkelverdiene ved hjelp av $ Post-> ID
variabel verdi som en identifikator og meta-nøkkelnavnet som vi er interessert i. Vi trenger disse verdiene til å angi den forrige verdiparameteren i vårt neste kodestykke fra denne funksjonen som håndterer datopdateringen.
Dataene lagres som egendefinerte felt under et bestemt metakey navn pA_quantity
for kvantitet, pA_price
for pris og pAcurrency
for valutaverdier. De nye dataene hentes fra $ _POST
variabel som inneholder innleverte data.
funksjon pA_save_postdata () global $ post; hvis ($ _POST ['pA-hidd'] == 'true') $ pA_price = get_post_meta ($ post-> ID, 'pA_price', true); $ pA_quantity = get_post_meta ($ post-> ID, 'pA_quantity', true); $ pA_currency = get_post_meta ($ post-> ID, 'pA_currency', true); update_post_meta ($ post-> ID, 'pA_quantity', $ _POST ['pA-kvantitet'], $ pA_quantity); update_post_meta ($ post-> ID, 'pA_price', $ _POST ['pA-pris'], $ pA_price); update_post_meta ($ post-> ID, 'pA_currency', $ _POST ['pA-valuta'], $ pA_valuta);
Dette avsluttes meta-boks-implementeringen i plugin-modulen.
Endelig har vi kommet til hoveddelen av denne opplæringen, vel, minst en av hoveddelene. Jeg sier hoveddelene fordi denne neste tingen er hva opplæringen handler om, fortsatt, det kan ikke fungere uten alle de andre delene som tidligere er gjort. Vi skal ta en titt nå på hvordan du fjerner og legger til nye innleggskolonner på innleggssiden i administrasjonspanelet.
Fordi vi har ekstra verdier spesielt lagt til innlegget, vil ting som pris, valuta og kvantitet i denne delen ha ekstra kolonner i innleggssiden med disse navnene og de tilhørende verdiene. La oss rense ting litt, først, vi vil fjerne forfatter, tagger og kommentarer fra kolonnene som for formålet med denne opplæringen vi vil lære å gjøre dette, og vi trenger ikke disse kolonnene siden vi prøver å opptre som Innleggssiden håndterer et produkt med ting som pris og kvantitet.
funksjon pA_manage_posts_columns ($ kolonner) global $ wp_query; unset ($ kolonner ['author'], $ kolonner ['tags'], $ kolonner ['kommentarer']); $ totalt = 0; foreach ($ wp_query-> innlegg som $ post) $ total + = get_post_meta ($ post-> ID, 'pA_price', sant) * get_post_meta ($ post-> ID, 'pA_quantity', true); $ kolonner = array_merge ($ kolonner, array ('price' => __ ('pris'), 'valuta' => __ ('valuta'), 'kvantitet' => __ ('kvantitet'), 'featured_image' => __ ('Bilde'), 'totalt' => __ ('Totalt:'. $ Totalt))); returnere $ kolonner;
Ser enkelt ut, ikke sant? Jeg snakker selvsagt om tilbakekallingsfunksjonen ovenfor for manage_posts_columns
Filter-tag som håndterer styringen av postkolonner, akkurat som navnet sier. Det er bare noen få linjer med kode der, men denne delen er faktisk mer komplisert enn noen tidligere del i denne opplæringen (og de delene er ikke så harde, så dette bør ikke være så vanskelig å forstå heller).
For det første har tilbakekallingsfunksjonen til det tidligere nevnte filteret en parameter som holder alle kolonnene inne i det som en matrise. Vi setter denne parameteren under navnet $ kolonner
slik at vi kan bruke det om noen få øyeblikk. Deretter må vi integrere en global variabel i funksjonen, nemlig $ wp_query
. Vi skal også bruke dette snart.
Siden $ kolonner
parameter er en arrray som inneholder alle kolonnene på innleggssiden, alt vi må gjøre i dette tilfellet, er å fjerne matriseparametrene vi ønsker. For å gjøre dette bruker vi bare unset
PHP-funksjonen, og vi skiller de arraynavnene vi vil fjerne med kommaer. Lett.
Fordi vi bruker pris og kvantitet som verdier som vi jobber med dynamisk, ønsker vi å lage totalt disse verdiene i en spesiell ekstra rad som vi legger til i et øyeblikk. For å beregne dette må vi trekke verdiene av alle priser og mengder av hvert innlegg, multiplisere dem og legge resultatene opp. Resultatet vil være totalt antall innleggsverdier multiplisert med mengden. Summen av dette vi vil legge inn i tittelen på kolonnen når vi legger til kolonnen på neste del. Så vi henter verdiene til pris og antall tilpassede felt i hvert innlegg ved hjelp av get_post_meta
funksjon, og gjør totalt med en økt $ total
variabel. For å lage loop med våre nødvendige data vil vi bruke den integrerte $ wp_query
global variabel.
For å legge til kolonner skal vi bruke tilnærmingen vi brukte til å fjerne dem bare på en annen måte, nemlig ikke unset
funksjon for fjerning men array_merge
PHP-funksjon for å legge til de nye kolonnene. Kolonnene legges til som arrays i denne rekkefølgen og med disse navnene: pris, valuta, antall, kjennetegnet bilde og totalt.
Alt som er igjen å gjøre nå er å returnere $ kolonner
variabel og tilbakeringingsfunksjonen vil gjøre sin magi. Sluttresultatet er noe som burde gjøre innleggssiden, se tittelene på hodetabellen ser slik ut:
Det siste trinnet i denne opplæringen handler om de tilpassede kolonneverdiene. Etter å ha opprettet kolonnene tidligere må vi vise verdiene til disse prisene, valutaene og så videre. I postlisten må vi legge til de tilsvarende verdiene av de egendefinerte verdiene til listen riktig. For å gjøre dette skal vi bruke en tidligere implementert krok som har tilbakekallingsfunksjonen med navnet på pA_manage_posts_custom_column
. Funksjonen har to parametere, en kolonneparameter som inneholder navnetiketten til kolonnen vi er inne, brukt av oss til å identifisere hvor vi er, og post-ID som en andre parameter.
Først trenger vi en brytertilstand for å sjekke $ kolonne
variabel for hvilken type post vi er i. Selvfølgelig er vi bare interessert i våre skreddersydde kolonner, så vi vil bare sette saken til de verdiene.
Disse tre kolonnetyper som vi opprettet, har en felles metatyktatatype, en enkel streng som er en tilpasset kolonne som vi kan få ved å bruke get_post_meta
Fungerer med de riktige variablene, mer presist $ POST_ID
for å identifisere posten, metatasten for å identifisere det egendefinerte feltet og en boolsk variabel satt til sann for å få dataene som en ekko-streng eller som en matrise.
Det er en ekstra kolonne som vi la til som er litt annerledes og egentlig ikke nevnt tidligere. Jeg snakker om featured_image
kolonne som vil vise det kjente bildeens HTML-kode fra innlegget inne i raden av gjeldende innlegg. For å få det kjente bildet bruker vi get_post_thumbnail
fungere med post-ID som en identifikator og en størrelsestreng.
En siste kolonneverdi er summen. Summen av hvert innlegg beregnes ved å trekke ut de egendefinerte feltene med samme metode som før (get_post_meta
funksjon) av pris og kvantitet og multiplisere dem. Totalt er resultatet det vi leter etter.
funksjon pA_manage_posts_custom_column ($ kolonne, $ post_id) switch ($ kolonne) case 'price': $ pA_val = get_post_meta ($ post_id, 'pA_price', true); gå i stykker; case 'valuta': $ pA_val = get_post_meta ($ post_id, 'pA_currency', true); gå i stykker; case 'quantity': $ pA_val = get_post_meta ($ post_id, 'pA_quantity', sant); gå i stykker; case 'featured_image': hvis (has_post_thumbnail ()) $ pA_val = get_the_post_thumbnail ($ post_id, 'miniatyrbilde'); gå i stykker; sak 'total': $ pA_price = get_post_meta ($ post_id, 'pA_price', true); $ pA_quantity = get_post_meta ($ post_id, 'pA_quantity', true); $ pA_val = $ pA_price * $ pA_quantity; gå i stykker;
Eksemplet ovenfor er måten funksjonen vi diskuterte tidligere skulle bli implementert for å fungere skikkelig, du kan sjekke koden ovenfor for å forstå denne delen av opplæringen. Som et visuelt resultat ble hello verdensposten gitt noen verdier for pris, valuta og kvantitet, og en tilfeldig utskriftsskjerm ble lastet opp som et kjennetegnet bilde. Med vårt plugin installert, ser innleggets administrasjonsside ut slik:
WordPress blir mer og mer kraftig og fleksibel med mange nye funksjoner og muligheter som ikke bare vi ikke har, men vi kan ikke engang innse hvor nyttige de er. Denne opplæringen har som mål å hjelpe deg med å forstå hvordan du enkelt kan administrere kolonner for innlegg i administrasjonsområdet. Du kan velge å bruke denne informasjonen hvordan du ønsker for et prosjekt du kanskje tror på som ville gjøre det nyttig. Tenk bare på mulighetene du kan lage med disse enkle trinnene!
Hva er noen andre undervurderte WordPress-funksjoner du tror folk ofte overser? Gi oss beskjed i kommentarene!