Hoe te werken met WordPress Post Metadata

In het eerste bericht in deze serie gaf ik een overzicht van alle verschillende soorten metadata die WordPress biedt, waar het wordt bewaard, en wat we in deze serie zullen behandelen. 

Verder heb ik gedefinieerd welke metadata is; zijn rol binnen WordPress, en hoe het relevant is voor ons als ontwikkelaars. Maar de introductie moest precies dat zijn: een overzicht van wat we in de rest van deze serie zullen behandelen.

Beginnend met deze post gaan we beginnen met het verkennen van de WordPress Post Meta API om te zien waarom het nuttig is, wat we ermee kunnen doen en hoe we kunnen profiteren van de methoden die worden aangeboden via de WordPress-applicatie.

Een disclaimer voor iedereen

Ten eerste, als je een gevorderde ontwikkelaar bent, is het niet waarschijnlijk dat deze serie tutorials je veel zal helpen. In plaats daarvan is het meer gericht op diegenen die een beetje met thema's hebben gewerkt, misschien een enkele plugincode hebben aangepast en klaar zijn om een ​​stap verder te gaan door wat extra informatie toe te voegen aan de berichten (of de berichttypen) die hun project samenstellen..

Ten tweede, merk op dat de codevoorbeelden in deze tutorial zijn nietvoor gebruik in een productieomgeving. In plaats daarvan is de code waar we naar kijken niet bedoeld om overal te worden gebruikt waar iedereen toegang tot de site heeft.

Op dit moment ben ik van plan om meer geavanceerde technieken voor dit onderwerp te behandelen nadat we ons een weg banen door deze serie. Maar voor nu gaan we ons alleen bezighouden met het werken met de API.

Waarom? Wat is de vertraging bij het behandelen van aanvullende informatie? Simpel gezegd, het heeft te maken met de beveiliging van websites. In het bijzonder, wanneer we informatie in de database schrijven, moeten we aannemen dat de gegevens niet in een indeling zijn die veilig is om op te slaan; we moeten de gegevens opschonen.

Er is een geheel andere set API's voor het ontsmetten van gegevens die we moeten verkennen en die samen met de API's voor metadata werken, maar dit is niet de tutorial om dit te doen.

Ik weet het, het klinkt misschien een beetje frustrerend om over deze API's te praten zonder ze te kunnen gebruiken. Onthoud echter dat dit bedoeld is als een introductie tot de API. De tutorials zouden voldoende informatie moeten bevatten om aan de slag te gaan met het werken met metadata op uw machine, maar zouden ook voldoende vragen moeten bevatten, zodat we een diepere duik in het onderwerp kunnen nemen in een toekomstige reeks artikelen.

Met dat gezegd, laten we beginnen en aan de slag gaan met de WordPress Post Meta API. En wees gewaarschuwd: dit is een lange tutorial.

Een inleiding tot de API

Voordat we naar de code kijken, is het belangrijk om ervoor te zorgen dat u over de benodigde hulpmiddelen beschikt om door de database te bladeren waarop uw WordPress-installatie draait. Enkele beschikbare hulpmiddelen omvatten:

  • phpMyAdmin
  • Sequel Pro
  • MySQL Workbench
  • Adminer

Maar voel je vrij om te gebruiken wat je het leukst vindt. Zolang u de gegevens in de database kunt bekijken, bent u klaar om te gaan.

Laten we vervolgens eens kijken hoe WordPress metagegevens post. Volgens de Codex:

WordPress heeft de mogelijkheid om postauteurs toe te staan ​​om aangepaste velden aan een bericht toe te wijzen. Deze willekeurige extra informatie staat bekend als metadata.

Metagegevens worden afgehandeld met sleutel / waarde-paren. De sleutel is de naam van het meta-data-element. De waarde is de informatie die wordt weergegeven in de metadatatielijst voor elk afzonderlijk bericht waaraan de informatie is gekoppeld.

In eenvoudiger bewoordingen stelt WordPress ons in staat om aangepaste informatie te schrijven naar de database, deze te koppelen aan elke gewenste post en deze vervolgens op te halen wanneer nodig. Verder wordt de informatie opgeslagen met behulp van unieke sleutel / waarde-paren.

Onze eigen metadata schrijven

Als dit vreemd voor je klinkt, maak je er dan geen zorgen over. Het idee is dat voor elke waarde die u opslaat, deze gerelateerd is aan een unieke sleutel (net zoals een deurknop een unieke sleutel heeft om deze te ontgrendelen). 

De sleutel is hoe we de waarde uit de post kunnen halen. Maar dit roept wel een vraag op: wat gebeurt er als een bericht meerdere stukjes metadata eraan gekoppeld heeft? Dat wil zeggen, als een gegeven bericht meerdere metadatabestanden naast zich kan hebben, hoe halen we dan unieke metadata op?

Zoals we zullen zien wanneer we enkele van de onderstaande voorbeeldcodes gaan bekijken, moeten we naast de sleutel die wordt gebruikt bij het opslaan van gegevens ook de unieke ID van de post doorgeven aan de functie.

Niets werkt beter dan het in actie te zien. Dus ervan uitgaande dat je WordPress hebt ingesteld op je lokale computer en dat het goed gaat met bewerken functions.php in de kern van uw standaardthema, laten we aan de slag gaan.

Als referentie

Ik zal de volgende hulpmiddelen gebruiken:

  • WordPress 4.4
  • Het twintigentwintigste thema
  • Atoom
  • Sequel Pro

Het belangrijkste is dat je zowel WordPress als het hierboven genoemde thema gebruikt.

Eindelijk, als je meer op je gemak bent met een andere IDE en database-front-end, is dat helemaal goed.

We hebben veel informatie in de introductie van dit artikel behandeld, maar het zal van pas komen omdat we niet alleen naar de Post Meta API maar de andere API's kijken. Dus houd deze geest. Ik zal dit artikel ook in toekomstige artikelen raadplegen.

Laten we ingaan op de API.

Een zeer belangrijke opmerking

De manier waarop we de code gaan opnemen is niet de professionele manier om uw thema aan te passen, deze functionaliteit te implementeren of een interface aan te bieden met een API. We doen dit voor de eerste stappen van een beginner in de ontwikkeling van WordPress. 

In een vervolgserie gaan we het werk doen dat we in deze serie hebben gedaan en het uitpakken in een meer onderhoudbare plug-in die ook meer aandacht besteedt aan onderhoudbaarheid, beveiliging en meer.

Voor nu richten we ons op de basisprincipes van de API.

Het thema voorbereiden

Vergeet niet dat ik een basisinstallatie van WordPress gebruik, samen met het twintigentwintigste thema voor de demo's die we in deze zelfstudie en de rest van de tutorials in de serie zullen zien..

Ten tweede gaan we wijzigingen aanbrengen in functions.php. Dit is meestal niet de beste plaats om deze verandering aan te brengen; Zorg er echter voor dat u de bovenstaande opmerking hebt gelezen voordat u doorgaat.

Met dat gezegd, laten we aannemen dat je je server draait, je IDE up and ready, en functions.php in je editor. Hoewel je screenshot er misschien een beetje anders uit ziet, zou het hierop moeten lijken:

De uitdaging om mee samen te werken functions.php is dat het al vol is met code die het bestaande thema van stroom voorziet. Hoewel we onze code uiteindelijk in een toekomstige reeks in een plug-in zullen veranderen, laten we dan op zijn minst de eerste stap zetten in het maken van ons bestand, zodat we onze code zelf kunnen bevatten.

Gebruik je IDE naar keuze:

  1. Maak een nieuw bestand in de hoofdmap van het twintigentwintig-thema.
  2. Geef het bestand een naam tutsplus-metadata.php.

Als je klaar bent, zou je zoiets op je bestandssysteem moeten hebben:

Ten slotte moeten we ervoor zorgen dat we dit opnemen functions.php. Voeg daarvoor de volgende regel code toe net onder de eerste PHP-tag. 

Laad je browser opnieuw. Als alles goed gaat, zou u het thema moeten zien zoals het was voordat u uw bestand aan functions.php

Laten we aan de slag gaan.

Ermee beginnen

Denk aan onze eerdere discussie dat we drie dingen nodig hebben om metadata aan de database toe te voegen:

  1. een bericht-ID
  2. een unieke sleutel waarmee we de metadata kunnen identificeren
  3. een waarde waarmee we gaan opslaan die we later willen terughalen

Voor deze zelfstudie is het enige wat we doen om metadata toe te voegen die standaard worden weergegeven Hallo Wereld! bericht dat standaard wordt geleverd in elke installatie van WordPress.

Laten we zeggen dat we wat metadata willen toevoegen met onze naam. Dus de meta-sleutel die we zullen gebruiken is mijn naam en de waarde die we zullen gebruiken, is hoe je naam ook is. In mijn geval is het "Tom McFarlin".

Het eerste dat we willen doen is een functie definiëren die inhaakt de inhoud. Dit zal ons toelaten om onze tekst uit te voeren wanneer de functie wordt uitgevoerd. Als je niet bekend bent met hooks, lees dan deze serie.

Uw eerste code zou er als volgt uit moeten zien:

Wanneer u deze code uitvoert, moet de tekenreeks "[We are here.]" Boven de inhoud van het bericht vóór iets anders worden weergegeven en moet gebeurt alleen op de Hallo Wereld! post. Dit komt omdat we controleren of de ID 1 is voordat we echo de snaar.

Houd er rekening mee dat de definitieve versie van de code die aan het einde van dit bericht wordt gedeeld, compleet is met opmerkingen. Tot die tijd zal ik uitleggen wat de code doet, terwijl we elk nieuw stuk aan onze code toevoegen.

Metadata toevoegen

Laten we nu een paar echte metadata toevoegen. Voeg hiervoor deze code toe in de hoofdtekst van de voorwaardelijke, zodat we zeker weten dat we dit doen Hallo Wereld. Aangezien we al controleren op de ID van 1 in de voorwaardelijke, kunnen we de code die we in de vorige sectie hebben toegevoegd verwijderen en bijwerken.

In het lichaam van de voorwaardelijke, zullen we een oproep doen naar de add_post_meta API-functie die er als volgt uitziet:

Het zou leuk zijn als we iets zouden kunnen doen met deze informatie. Voordat we dat doen, is er echter nog meer informatie die we moeten behandelen. Namelijk, over het bijwerken van metadata (en hoe deze verschilt van het toevoegen van metadata) samen met enkele nuances die u misschien niet verwacht bij het omgaan met de API.

Metadata updaten

Er is een subtiel verschil tussen het toevoegen van metadata en het updaten van metadata. U weet hoe een sleutel op unieke wijze een waarde identificeert die eraan is gekoppeld? Wel, dat is gedeeltelijk juist.

Wanneer je belt add_post_meta, je maakt elke keer dat je aan het bellen bent een entry aan. Dus in onze code hierboven, als je de pagina drie keer ververs, dan zul je zoiets zien als dit:

Nieuwsgierig, toch? Herinner wat de Codex zegt:

Merk op dat als de gegeven sleutel al bestaat uit aangepaste velden van het opgegeven bericht, een ander aangepast veld met dezelfde sleutel wordt toegevoegd, tenzij het argument $ unique op true is ingesteld. In dat geval worden er geen wijzigingen aangebracht.

Ah, er is een optionele parameter die de functie accepteert. Het is een booleaanse naam $ unieke, en het staat ons toe om te passeren waar als we alleen willen ervoor zorgen dat de toegevoegde waarde uniek is.

Mogelijk wilt u uw bestaande records op dit moment verwijderen. Zo niet, dat is prima - gebruik gewoon een andere waarde voor de mijn naam sleutel.

Dit betekent dat we onze code zouden kunnen bijwerken om er als volgt uit te zien:

U maakt nu slechts één item. Verder, als je dan zou proberen om de waarde van die sleutel in de code te veranderen, dan het zou niet worden overschreven in de database. Nadat het schrijven van de metagegevens van het bericht is voltooid, wordt het opgeslagen zoals het de eerste keer was.

Maar zo hoeft het niet te zijn, en dat is waar update_post_meta komt in het spel. Eigenlijk, update_post_meta kan meer worden gebruikt dan add_post_meta, afhankelijk van uw gebruik.

Alvorens de code te bekijken, kijk wat de Codex te zeggen heeft:

De functie update_post_meta () werkt de waarde bij van een bestaande meta-sleutel (aangepast veld) voor het opgegeven bericht.
Dit kan worden gebruikt in plaats van de functie add_post_meta (). Het eerste wat deze functie zal doen, is ervoor zorgen dat $ meta_key al bestaat op $ post_id. Als dit niet het geval is, wordt add_post_meta ($ post_id, $ meta_key, $ meta_value) aangeroepen en wordt het resultaat geretourneerd.

Heb je dat opgevangen? Het kan "worden gebruikt in plaats van add_post_meta", wat handig is omdat dit betekent:

  1. Als de metadata van het bericht al bestaat voor een bepaalde sleutel,
  2. Als je gebruikt update_post_meta,
  3. U overschrijft de vorige waarde.

Op dit punt wilt u misschien de informatie die u in uw database hebt verwijderen, of een nieuw paar sleutels en waarden maken. Dit betekent dat we onze code kunnen bijwerken om er als volgt uit te zien:

Dit brengt echter een aantal inherente gevaren met zich mee. 

Namelijk, als u een waarde overschrijft die u nooit wilde overschrijven, dan is die waarde verdwenen en kan deze niet meer worden teruggevorderd (tenzij u liefhebberwerk doet dat buiten het bereik van deze reeks valt).

Er is een optioneel laatste argument voor update_post_meta, hoewel, en dat is het $ prev_value argument. Dat wil zeggen, u kunt opgeven welke waarde u wilt overschrijven.

Neem bijvoorbeeld het geval waarin u meerdere records hebt met dezelfde sleutel die is gemaakt met add_post_meta en u wilt slechts één van die records bijwerken. Als u die gegevens wilt bijwerken, geeft u de waarde door die overeenkomt met die ene record.

Wat is het verschil?

Het verschil tussen add_post_meta en update_post_meta kan als subtiel worden beschouwd, maar het hangt af van uw gebruik. 

Ik zal proberen ze hier zo eenvoudig mogelijk op te splitsen, omdat het, hoewel het ingewikkeld lijkt gezien de voorbeelden die we hierboven hebben gezien, eenvoudiger is als je alles neerlegt.

  • add_post_meta is handig als u een record in de database wilt introduceren. Als de waarde al bestaat, kan de nieuwe waarde al dan niet worden geschreven. Als je slaagt waar voor de $ unieke parameter van de functie, dan wordt alleen de eerste record aangemaakt, en niets zal dat overschrijven behalve update_post_meta.
  • update_post_meta kan worden gebruikt in plaats van add_post_meta en zal altijd de vorige bestaande waarde overschrijven. Als u met meerdere records werkt die zijn gemaakt met add_post_meta, dan moet u misschien een vorige waarde opgeven die u wilt overschrijven.

En dat is alles. Natuurlijk hebben we nog steeds te maken met het ophalen van de records uit de database en het weergeven ervan op het scherm.

Metagegevens ophalen

Als het gaat om het ophalen van postmetadata, zijn er twee belangrijke dingen die u moet onthouden:

  1. Metagegevens kunnen als een string worden opgehaald.
  2. Metagegevens kunnen worden opgehaald als een array.

Soms hangt het af van hoe je de originele informatie hebt opgeslagen; soms is het gebaseerd op hoe je ermee wilt werken.

Voordat we kijken naar de verschillende manieren waarop we informatie kunnen ophalen, laten we eerst kijken naar de basis API-oproep om dit te doen. Concreet heb ik het over get_post_meta. Als je tot nu toe hebt gevolgd, zou het begrijpen van de API relatief eenvoudig moeten zijn.

De functie accepteert drie parameters:

  1. de ID van de post
  2. de metagegevenssleutel
  3. een optionele Booleaanse waarde voor als u de waarde als een tekenreeks of als een array wilt ophalen (waarbij een array de standaardwaarde is als niets is opgegeven)

Van de Codex:

Post meta-veld ophalen voor een bericht. Wordt een array als $ single false is. De waarde van het metagegevensveld is als $ single waar is.

Lijkt makkelijk genoeg. Dus gegeven waar het laatste stukje van onze broncode nu zit, zou ik zeggen dat we informatie kunnen ophalen door een oproep te doen zoals get_post_meta (get_the_ID (), 'mijn_naam');.

De code, zoals deze erboven staat, retourneert een array. 

Meerdere waarden

Wanneer u de uitdrukking 'meerdere waarden' hoort, kan het handig zijn om een ​​array of een bepaald type gegevensverzameling te bedenken in de programmeertaal die u gebruikt.

Denk in onze voorbeelden na over het meerdere malen opslaan van dezelfde sleutel met behulp van add_post_meta. Als een opfriscursus, hier was hoe de database eruit zag:

Als ik de informatie zou ophalen via de sleutel, wat zou ik dan terug krijgen? Omdat ik niet heb aangegeven dat ik een string wilde, zou ik een array van alle records terug krijgen. Dit zou me in staat stellen om elk van hen te herhalen.

Als ik aan de andere kant waar zou opgeven omdat ik een string wilde terughalen, dan zou ik alleen de eerste rij krijgen die is gemaakt met add_post_meta.

Als u voor dat doel meerdere waarden voor een bepaalde sleutel wilt achterhalen, ziet uw code er dan als volgt uit:

Merk op dat ik gebruik var_dump om het gemakkelijker te maken om te zien welke informatie terugkeert vanuit WordPress in de browser; Ik ben echter meer fan van het gebruik van een debugger, iets dat we in een volgende post kunnen bespreken. 

Enkele waarden

Laten we nu aannemen dat u afzonderlijke waarden voor één bericht wilt opslaan. In dit geval hebt u nog steeds de bericht-ID en de metagegevenssleutel nodig; u moet echter ook opgeven waar als de derde parameter voor get_post_meta.

Zoals hierboven vermeld, als u te maken hebt met een situatie waarin meerdere rijen zijn gemaakt met add_post_meta, dan krijg je de eerste rij terug die is gemaakt; als u deze functie echter naast gebruikt update_post_meta dan krijg je een stringwaarde terug van de gegevens die zijn opgeslagen.

Omdat we de eerste hebben behandeld, maar de laatste niet hebben behandeld, is hier de code:

En dan krijg je de waarde terug die je hebt opgeslagen als de metawaarde bij het bellen naar de functie. Het is vrij eenvoudig in vergelijking met het moeten werken met een reeks records en matrices die al dan niet soortgelijke informatie bevatten.

Metagegevens verwijderen

Het laatste stukje werken met metadata van post heeft alles te maken met het kunnen verwijderen. Het is gemakkelijk, maar er zijn slechts een paar nuances die we moeten begrijpen om ervoor te zorgen dat we het effectief doen.

Maar eerst is hier de definitie van de Codex:

Met deze functie worden alle aangepaste velden met de opgegeven sleutel of sleutel en waarde uit het opgegeven bericht verwijderd. 

Kort, lief en ter zake. De functie accepteert drie argumenten:

  1. de ID van de post
  2. de meta-toets
  3. de metawaarde

De metawaarde is optioneel, maar het is handig als je hebt gewerkt add_post_meta en wil een van de specifieke items die door meerdere oproepen zijn gemaakt verwijderen voor die functie (zoals we elders in deze tutorial hebben gezien).

Hoewel u belt naar delete_post_meta is zo simpel als het doorgeven van een bericht-ID, de meta-sleutel en de optionele metawaarde; de ​​functie retourneert een Booleaanse waarde die aangeeft of de gegevens al dan niet zijn verwijderd.

Voorbeeldcode voor het verwijderen van sommige postmetagegevens waarnaar we tot nu toe hebben gekeken, ziet er als volgt uit:

Uw implementatie kan echter variëren. Als u met meerdere stukjes metadata werkt en als u wilt controleren of het een succesvolle verwijdering is, kunt u de code in een voorwaardelijke.

Een laatste voorbeeld van code

Hieronder ga je een lang, gedocumenteerd codefragment vinden dat de meerderheid zou vertegenwoordigen van waar we het in deze tutorial over hebben gehad. Merk op dat de functies aansluiten de inhoud.

Dit is alleen bedoeld voor demonstratiedoeleinden, zodat u het vuren van deze functies gemakkelijk kunt activeren wanneer u een bepaalde pagina laadt.

Meestal vindt u functies voor metagegevens die zijn gekoppeld aan andere haken, zoals save_post en soortgelijke operaties, maar dit is een onderwerp voor meer geavanceerd werk. Misschien behandelen we dat later dit jaar in een andere serie.

Conclusie

Elk van de API-functies is beschikbaar in de WordPress Codex, dus als u graag verder wilt gaan en meer wilt lezen voor het volgende artikel in de serie, kunt u dit gerust doen.

Zoals eerder vermeld, is dit een inleiding tot de WordPress Post Meta API. Door middel van de informatie in de Codex, in deze zelfstudie en in de verstrekte broncode, zou u moeten kunnen beginnen met het schrijven van aanvullende inhoud in de database met betrekking tot elk van uw berichten.

Bedenk echter dat dit bedoeld is voor demonstratiedoeleinden, omdat we meer informatie kunnen geven. Concreet moeten we data-sanering en gegevensvalidatie onderzoeken. Hoewel we eerst nog andere onderwerpen behandelen (zoals gebruikersmetadata, metagegevens voor reacties, enzovoort), gaan we binnenkort verder met meer geavanceerde onderwerpen.

Uiteindelijk proberen we een basis te leggen voor toekomstige WordPress-ontwikkelaars om vanaf te bouwen wanneer ze verdergaan en te werken aan oplossingen voor anderen, voor hun agentschappen of zelfs voor hun projecten..

Met dat gezegd, kijk ik ernaar uit om deze serie voort te zetten. Onthoud dat als je net begint, je mijn serie kunt lezen over hoe je aan de slag kunt met WordPress, dat zich richt op onderwerpen die specifiek zijn voor WordPress-beginners.

Als u ondertussen op zoek bent naar andere hulpprogramma's om uw groeiende verzameling hulpprogramma's voor WordPress te ontwikkelen of om code te bestuderen en meer vertrouwd te raken met WordPress, vergeet dan niet te zien wat we beschikbaar hebben in Envato Markt.

Onthoud dat je al mijn cursussen en tutorials op mijn profielpagina kunt vinden, en je kunt me volgen op mijn blog en / of Twitter op @tommcfarlin, waar ik het heb over verschillende softwareontwikkelingspraktijken en hoe we ze in WordPress kunnen gebruiken..

Aarzel niet om vragen of opmerkingen achter te laten in de feed hieronder, en ik zal ernaar streven om op elk van hen te reageren.

Middelen

  • Aangepaste velden
  • add_post_meta
  • update_post_meta
  • get_post_meta
  • delete_post_meta
  • Voorbeelden van meta-functie posten
  • echo
  • var_dump