I del 1 og del 2 i vår tilpassede meta-boks mal-opplæringsserie lærte vi hvordan du lager et feltfelt for å løse gjennom og lage en tilpasset meta-boks med standardfeltene dine. La oss nå kaste inn litt JavaScript for noen fancy, men svært nyttige felt.
Hvert av feltene vi dekker i denne opplæringen vil kreve jQuery og jQuery UI. Heldigvis gjør WordPress det super enkelt å bruke disse med wp_enqueue_script
, og fra og med 3.3, er alle jQuery UI-interaksjonene og widgene buntet med WordPress.
Siden vi jobber på en side som allerede erkjenner jQuery, kan vi hoppe over det, men vi må få jQuery UI Datepicker. Vi må også lage vårt eget stilark siden det nødvendige CSS ikke kommer med i WordPress enda, selv om de jobber det ut.
hvis (is_admin ()) wp_enqueue_script ('jquery-ui-datepicker'); wp_enqueue_style ('jquery-ui-custom', get_template_directory_uri (). '/ css / jquery-ui-custom.css');
Vi trenger bare å laste disse inn i administrasjonen, og ikke på forsiden av nettstedet, så pakk funksjonene på en betinget måte. Den første funksjonen kaller datepicker og vil også laste jQuery UI Core. Den andre funksjonen vil ringe vår jquery-ui-custom.css stilark fra temaets css-mappe. Eksempler stilarket inkludert i nedlastingen i begynnelsen av denne opplæringen krever ikke bilder. Du kan også lage ditt eget jQuery UI-tema.
La oss nå se på elementet som vi må legge til i vår $ custom_meta_fields
array vi startet i del 1.
array ('label' => 'Date', 'desc' => 'En beskrivelse for feltet.', 'id' => $ prefix.'date ',' type '=>' date ')
Dette arrayet er nesten identisk med vårt tekstelement. Den har en hovedetikett, en beskrivelse, et unikt id, og datatypen er definert. Vi skal bare gå med en grunnleggende implementering av datovelgeren i vårt eksempel her, men hvis du trenger å spice opp bruken av dataplukkeren, kan du også legge til annen informasjon i arrayet, for eksempel det foretrukne formatet, lokalisering , og datoperiode for å nevne noen få. Deretter kan du bruke denne informasjonen i følgende skriptoppringer vi må legge til i hodet på siden:
ADD_ACTION ( 'admin_head', 'add_custom_scripts'); funksjon add_custom_scripts () global $ custom_meta_fields, $ post; $ output = ''Denne biten må legges utenfor
$ custom_meta_fields
array og utenfor avshow_custom_meta_box
tilbakeringingsfunksjon for å initialisere datovelgeren på alle felt med klassen "datepicker".// date case 'date': ekko '
'$ Feltet [ 'desc'].''; gå i stykker;Denne koden vil bli lagt til etter den siste "pause" i vår meta boks bryter.
Noen ganger må du samle et tall som er satt til et eksakt område eller må være multipler av 5. JQuery UI-glidebryteren er flott for dette fordi det gjør det enkelt å dra og skyve til nummeret du vil skrive inn.
wp_enqueue_script ( 'jquery-ui-skyve');
Pass på å ringe til js-filen ved å legge til denne til is_admin () innpakket enqueues.
array ('label' => 'Slider', 'desc' => 'En beskrivelse for feltet.', 'id' => $ prefix.'slider ',' type '=>' skyvekontroll ',' min '= > '0', 'max' => '100', 'step' => '5')
Igjen legger vi dette til vår $ custom_meta_fields
array og det er noen spesielle tillegg.
hvis ($ field ['type'] == 'skyvekontroll') $ value = get_post_meta ($ post-> ID, $ field ['id'], true); hvis ($ verdi == ") $ verdi = $ felt ['min']; $ output. = 'jQuery (" # ". $ felt [' id '] .'- skyveknapp") .slider (verdi:' . $ verdi. ', min:'. $ felt ['min']. ', max:'. $ felt ['max']. ', trinn:'. $ felt ['trinn']. ' funksjon (hendelse, ui) jQuery ("#". $ felt ['id']. '") .val (ui.value);;;;
Legg denne biten av kode til sløyfen i add_custom_scripts
funksjonen vi opprettet i siste felttype. Dette vil legge til den egendefinerte jQuery vi trenger for å sette opp glideren.
// slider case 'slider': $ value = $ meta! = "? $ meta: '0'; ekko '
'$ Feltet [ 'desc'].''; gå i stykker;
Igjen bruker vi bare et tekstfelt for å motta glidebryterens verdi.
Siden innføringen av Post Miniatyrer, er det ikke noe vi gjør mye å sette inn et bilde med et tilpasset metafelt, men hver gang en gang kommer det en tid når du må sette et bilde annet enn innleggsminiaturen, spesielt når du bygger en plugin som tar hensyn til at brukerens tema kanskje ikke støtter etter miniatyrbilder.
Dette feltet vil legge til muligheten til å laste opp et bilde eller velge en fra mediaopplastingen, vise en forhåndsvisning av bildet og lagre IDen for maksimale bruksalternativer.
For å få vår knapp for å utløse medieopplasteren, må vi knytte den inn med litt javascript.
jQuery (funksjon (jQuery) jQuery ('. custom_upload_image_button'). klikk (funksjon () formfield = jQuery (dette) .siblings ('. custom_upload_image'); forhåndsvisning = jQuery (dette) .siblings ('. custom_preview_image') ; tb_show ("," media-upload.php? type = bilde & TB_iframe = true '); window.send_to_editor = funksjon (html) imgurl = jQuery (' img ', html) .attr (' src '); classes = jQuery ('img', html) .attr ('class'); id = classes.replace (/(.*?) wp-image- /, "); formfield.val (id); preview.attr , imgurl); tb_remove (); return false;); jQuery ('. custom_clear_image_button'). klikk (funksjon () var defaultImage = jQuery (this) .parent (). søsken ('. custom_default_image'). (); jQuery (dette) .parent (). søsken ('. custom_upload_image') .val ("); jQuery (dette) .parent (). søsken ('. custom_preview_image'). Attr ('src', defaultImage) ; return false;););
Sett disse i en egendefinert js-fil, og legg inn det i din is_admin () innpakket enqueues.
wp_enqueue_script ('custom-js', get_template_directory_uri (). '/ js / custom-js.js');
Den første funksjonen finner knappen vi skal lage snart med klassen "custom_upload_image_button" "og preforms noen få forskjellige ting på klikk.
Den andre funksjonen forteller linken vi vil klassere som "custom_clear_image_button" for å fjerne både verdien av skjemafeltet og tilbakestille forhåndsvisningen til standardbildet vårt.
array ('name' => 'Image', 'desc' => 'En beskrivelse for feltet.', 'id' => $ prefix.'image ',' type '=>' bilde ')
Vi trenger bare grunnleggende informasjon for dette feltet.
// image case 'bilde': $ image = get_template_directory_uri (). '/ images / image.png'; ekko ''. $ Image.'; hvis ($ meta) $ image = wp_get_attachment_image_src ($ meta, 'medium'); $ image = $ image [0]; ekko '
Fjern bilde
'$ Feltet [ 'desc'].''; gå i stykker;
Vi har noen ting på gang her, men med måten vi har skrevet javascript, bør dette fungere ganske bra uansett hvor mange bildefelt du legger til.
Når du virkelig går inn i bruk av tilpassede metafelt for å lagre ulike typer data for et innlegg, vil du til slutt trenge inn i behovet for å ha flere forekomster av samme felt. Ved hjelp av litt javascript kan du enkelt duplisere et felt så mange ganger du trenger det, og til og med sortere dem med dra og slipp. Det er mange måter vi kan bruke denne funksjonaliteten på, men for vårt eksempel skal vi bare bruke en grunnleggende tekstinngang.
jQuery ('. repeatable-add'). Klikk (funksjon () field = jQuery (dette) .closest ('td'). finn ('custom_repeatable li: last'). klon (sann); fieldLocation = jQuery denne ()) .closest ('td'). Finn ('. custom_repeatable li: last'); jQuery ('input' .replace (/ (\ d +) /, funksjon (fullMatch, n) returnummer (n) + 1;);)) field.insertAfter (fieldLocation, jQuery (dette) .closest ('td')) returnere falsk ;); jQuery ('. repeatable-remove'). Klikk (funksjon () jQuery (dette) .parent (). fjern (); return false;); jQuery ('. custom_repeatable'). opacity: 0.6, tilbake: true, cursor: 'move', håndtere: '.sort');
Du kan legge til dette javascript til de egendefinerte jsene du allerede har opprettet i det siste trinnet.
Den første funksjonen ser etter add-knappen og legger til en ny tom feltrad til slutten av listen over felt. Dette settes opp generisk, slik at du kan ha så mange av disse repeterbare feltene som du trenger.
Den neste funksjonen gir hver fjernkontroll muligheten til å fjerne den raden når den klikkes.
Til slutt bestemmer vi listene som skal sorteres og definere et håndtak slik at du kan dra og slippe radene. Det er ikke nødvendig å enqueue jQuery UI-sorteringsinteraksjonen fordi den allerede brukes på redigeringsposten.
array ('label' => 'Repeatable', 'desc' => 'En beskrivelse for feltet.', 'id' => $ prefix.'repeatable ',' type '=>' repeatable ')
Det er ikke noe spesielt med dette feltet i arrayet for vårt eksempel. Du kan imidlertid bli ganske gal her og legge til alternativer for hvilke typer felt som brukes i listen som kan repeteres.
// repeatable case 'repeatable': ekko '+
Dette feltet krever en sløyfe hvis det er en meta-verdi lagret, og ingen sløyfe hvis det ikke er det.
.$ i
heltall for å sikre at et nytt nummer legges til navnet array.Hvis du har fulgt sammen med alle tre deler av denne serien så langt, må den endelige boksen ligne den som er vist her:
Vi har virkelig bare riper overflaten av hva som kan gjøres med denne metoden for å bygge en gjenbrukbar tilpasset meta-boksmal. Jo mer du legger til i malen din, desto lettere er det å slippe det inn i hvilket prosjekt du arbeider for, for å gjøre tiden du bruker koding raskere og for å strømline prosessen med ren, konsistent kode.