I min siste serie av artikler så vi på begrepene objektorientert programmering fra nybegynnerperspektivet. Målet med serien var å ta de som ikke var kjent med objektorientert programmering i PHP, og utforske de grunnleggende aspektene av paradigmet i sammenheng med WordPress.
Hvis du ikke hadde mulighet til å lese serien, kan du lese en kort oppsummering (sammen med linker til hver artikkel i serien) i siste innlegget.
I løpet av serien ble en av de tingene vi gjorde for å hjelpe demonstrere de objektorienterte prinsippene, samt noen av funksjonene i WordPress API, å bygge et plugin.
Spesielt bygget vi et plugin som tillot oss å se alle postdataene knyttet til et gitt innlegg i WordPress dashboard.
Pluggen er tilgjengelig for nedlasting på GitHub, hvor du også kan bla gjennom kildekoden, se kodens kommentarer og generelt se alt som gikk inn i å lage pluginet når vi utviklet det.
Siden det aktuelle innlegget ble skrevet, har jeg mottatt en rekke forskjellige spørsmål, hvorav en har vært hvordan tar vi dataene som vises i dashbordet - det vil si postmetadataene - og viser det på forsiden av nettet nettstedet.
I denne artikkelen skal vi se på å utvide plugin slik at vi kan vise dataene på en enkelt innleggsside. Vi skal snakke om hvordan du gjør dette gitt vår eksisterende kode, hvordan du gjør dette, og vi skal også snakke om hvorfor dette kanskje ikke er en god ide.
Så med det sagt, la oss komme i gang.
Før vi hopper inn i planleggingen av hvordan vi faktisk skal utvide pluginet, synes jeg det er verdt å ha en kort diskusjon om hvorfor å vise denne typen informasjon på fronten - mens det er mulig - kanskje ikke en god ide.
Det vil si at jeg tror dette gjør et tilfelle for hvordan når det gjelder visse typer data, er det viktig å vurdere konsekvensene av hva vi velger å gjøre når du bygger produkter for andre og hvordan vi styrer dataene.
Kort sagt, bare fordi vi kan gjør noe betyr ikke at vi bør gjør det.
Tenk på det på denne måten: Metadataene som er knyttet til et gitt innlegg, lagres i databasen - noen av WordPress, noen av temaer, og noen av plugins - som alle bruker informasjonen til deres egne spesifikke behov.
Hvis du ser på bildet ovenfor, vil du legge merke til at noen rader er identifisert med nøkler prefiks med en understreking. For eksempel har vi _edit_lock og _edit_last og deretter noen numeriske verdier. Dette er et eksempel på data som WordPress bruker til internt å administrere statusen til innleggene.
De andre nøklene som du ser, har å gjøre med plugins som jeg har installert i min lokale WordPress-installasjon, og brukes til å demonstrere hvordan andre verktøy kan lagre data til metatatabellen og deretter forholde seg til det angitte innlegget.
Problemet med å vise all denne informasjonen på forsiden er at du kan vise for mye informasjon til brukeren.
I tilfellet over er det ingenting som er spesielt farlig eller følsomt som kan bidra til å kompromittere installasjonen, men det betyr ikke at det alltid vil være tilfelle. Enda videre er det en stor sjanse for at du kan ende med å vise informasjon som er relatert til et plugin eller tema som aldri ønsket at informasjonen ble vist.
Videre, for mange - eller til og med de fleste - folk som besøker en blogg, ser den informasjonen som vises på forsiden av bloggen, ut som støy. Det er teknisk sjargong som ikke betyr noe. Dette er grunnen til at jeg tror at dette er det beste stedet å gjøre det ved å holde denne informasjonen omgjort til instrumentbrettet.
Kort sagt, ja, men ikke fordi jeg synes å vise denne typen informasjon til brukeren, er en god ide, men fordi det er en praktisk applikasjon som følger med å utvide et eksisterende plugin, fordelene ved å utnytte eksisterende kode, og se negative konsekvenser av gjør slikt.
Så ja - noen ganger kan de beste leksjonene komme fra å implementere ideer som kanskje ikke er gode i ettertid.
Men det er greit. Slik lærer vi riktig?
I tillegg er det fortsatt noen praktiske leksjoner som følger med å lære å utvide en eksisterende kodebase.
Som med alle veiledningene som jeg deler, prøver jeg å planlegge ut nøyaktig hva vi gjør det før vi gjør det slik at vi ikke kodes gjennom mye gjetningsarbeid, og slik at vi har en handlingsplan for hvordan vi skal arkitektere vår løsning.
Så, før du går videre, hvis du ikke har vurdert Single Post Meta Manager, vennligst gjør det nå, og vi fortsetter.
Når det er gjort, er det det vi skal planlegge å gjøre:
offentlig
siden av bloggen, spesielt i sammenheng med enkelt innlegg.Ingenting er for komplisert, ikke sant? Vi må bare være presise i trinnene våre. Så la oss komme i gang.
Forutsatt at du allerede har tjuefemteen allerede aktivert og pluginet installert, la oss komme til å arbeide med å introdusere vår funksjonalitet. Det første vi må gjøre er å
offentlig
katalogSingle_Post_Meta_Manager_Public
klasseEtter at du har lagt til filene, kan ovenstående gjøres ved hjelp av følgende kodelinjer til load_dependencies
fungere i omfatter / enkelt-post-meta-manager.php
.
private funksjon load_dependencies () require_once plugin_dir_path (dirname (__FILE__)). 'Admin / klasse-single-post-meta-leder-admin.php'; require_once plugin_dir_path (dirname (__FILE__)). 'Offentlig / klasse-single-post-meta-leder-public.php'; require_once plugin_dir_path (__FILE__). 'Class-single-post-meta-leder-loader.php'; $ this-> loader = new Single_Post_Meta_Manager_Loader ();
Legg merke til at den eneste nye linjen er den andre require_once
setning som importerer klassefilen.
Etter det, la oss definere egenskapene, konstruktøren og metodene for Single_Post_Meta_Manager_Public
klasse:
versjon = $ versjon; / ** * Bruker den delvise som er plassert i admin-katalogen for å gjøre * post-metadataene til slutt på innleggets innhold. * * @param string $ content Innleggets innhold. * @return string $ content Innleggets innhold inkludert de oppgitte innleggene metadata. * / offentlig funksjon display_post_meta_data ($ content) ob_start (); require_once plugin_dir_path (dirname (__FILE__)). 'Admin / partials / single-post-meta-manager.php'; $ template = ob_get_contents (); $ content. = $ template; ob_end_clean (); returnere $ content;
Deretter må vi opprette Meta Manager for Single Post define_public_hooks
funksjon. Dette burde se slik ut:
get_version ()); $ this-> loader-> add_action ('the_content', $ public, 'display_post_meta_data');
Deretter må vi definere et anrop til denne funksjonen innen konstruktøren. Det er, like under $ Dette-> define_admin_hooks ();
linje, legg til $ Dette-> define_public_hooks ();
anrop.
Forutsatt at alt har gått bra, bør du kunne aktivere pluginet, laste opp et innlegg, og se de samme metadataene som nå vises på forsiden av innlegget, så vel som i dashbordet til innlegget:
Som nevnt tidligere i denne opplæringen, er ikke nødvendigvis den beste ideen å vise denne typen informasjon på forsiden av et innlegg. Imidlertid lærer man å lære å legge til et eksisterende plugin, og introdusere helt ny funksjonalitet samtidig som man gjenbruker noen av de eksisterende komponentene.
Til slutt er nøkkelopptaket to ganger:
Så etter å ha lest denne spesielle opplæringen, merk at jeg ikke nødvendigvis godkjenner å gjøre dette i et miljø på produksjonsnivå, men mer som et læringsverktøy. Det er, bruk det på egen risiko.
Som vanlig, vennligst la alle dine spørsmål, kommentarer og mer i feedet under!