Hoe te werken met WordPress User Metadata

In het vorige artikel hebben we gesproken over het werken met postmetadata in WordPress met behulp van de geleverde API's. We hebben ook een verscheidenheid aan hulpmiddelen besproken, de veiligheidsideeën en wat er nodig is om de omgeving in te stellen om met de code te werken die tijdens de zelfstudie wordt geboden..

Als u dat artikel niet hebt gelezen, raad ik u ten zeerste aan het te herzien, niet alleen omdat het beschrijft hoe u met metagegevens werkt, maar ook omdat het betrekking heeft op enkele belangrijke onderwerpen die relevant zijn voor de rest van de artikelen in deze reeks (en het zinspeelt op enkele die later dit jaar komen).

Ervan uitgaande dat u helemaal klaar bent om kennis te maken met nog een van de metadata-API's, laten we dan aan de slag met de WordPress User Meta API.

De WordPress User Meta API

Terugroepen van eerder in deze serie, WordPress definieert metadata op de volgende manier:

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.

Terwijl we blijven werken met de verschillende metadata-API's, zul je merken dat deze definitie geldig is, ongeacht welke API wordt onderzocht.

Het leuke is dat je eenmaal een greep hebt gekregen op het aanpakken van één metadata-API, een algemeen idee hebt over hoe elk van de gerelateerde API's zal werken. Natuurlijk zijn er hier en daar nuances, maar de algemene functionaliteit is hetzelfde.

Werken met de User Metadata API

Bij het bekijken van de WordPress Post Meta API hebben we de volgende functies beoordeeld en gebruikt:

  • add_post_meta
  • update_post_meta
  • get_post_meta
  • delete_post_meta

Ja, er zijn idiosyncrasies tussen hen, vooral omdat het betrekking heeft op hoe add_post_meta en update_post_meta werk en de verschillende manieren get_post_meta en delete_post_meta werk en de API's die we gaan onderzoeken, zullen op dezelfde manier werken.

Voor de rest van dit artikel ga ik ervan uit dat je een lokale webserver hebt, toegang tot een database-front-end, een IDE en dat je je comfortabel voelt om met het bestand te werken tutsplus-metadata.php.

Als je nieuwsgierig bent, gebruik ik de volgende set tools:

  • MAMP
  • Atoom
  • Sequel Pro
  • twentysixteen

Merk op dat de metadata van de gebruiker worden opgeslagen in de wp_usermeta databasetabel, dus we zullen daarnaar refereren in alle screenshots van de database. In tegenstelling tot de tabel met oorspronkelijke metagegevens, zijn er eigenlijk al gegevens in de tabel met gebruikersmetadata.

Dit komt door enkele gegevens die zijn opgeslagen op het scherm met het gebruikersprofiel:

Niettemin zal de API ons in staat stellen om onze eigen informatie naar de tafel te schrijven. Laten we dus, met al het voorgaande, eens kijken hoe we kunnen werken met de functies die WordPress biedt.

Merk op dat we door alle gegeven voorbeelden heengaan 1 voor de eerste parameter voor de API-functies, omdat de eerste gebruiker altijd de sitebeheerder is. Dit is over het algemeen gegarandeerd aanwezig in een bepaalde installatie.

Gebruikers-meta toevoegen

U vindt een verwijzing naar de add_user_meta functie in de Codex. De definitie van de functie is ongeveer zo beknopt mogelijk:

Metagegevens toevoegen aan het record van een gebruiker.

Hoe voordelig is dit? Dat wil zeggen, als u zou werken aan een plug-in of een webtoepassing die is gebouwd op WordPress en u wilt uitbreiden wat een persoon kan associëren met zijn profiel, dan is dit een manier om het te doen.

Het kan iets eenvoudigs zijn als het opgeven van het profiel van een gebruiker op een bepaald sociaal netwerk, of het kan iets geavanceerder zijn waarbij u de gebruiker kunt associëren met gegevens in een andere tabel, een reeks informatie of iets anders.

Hoe dan ook, dit is hoe je dat doet. Hier is het ding: onthoud hoe het schrijven van metadata voor een bericht met de add_post_meta functie resulteerde in meerdere rijen die kunnen worden geschreven met dezelfde sleutel?

Hetzelfde is mogelijk met behulp van add_user_meta. De API-functie accepteert echter een optionele vierde parameter voor het al dan niet uniek zijn van de waarde die wordt ingevoegd.

Niet-unieke waarden

Laten we dus eerst de code bekijken voor het toevoegen van metadata van gebruikers, en laten we dit doen door niet op te geven dat dit uniek moet zijn.

De code om dit te doen ziet er als volgt uit:

Merk op dat we dezelfde strategie gebruiken als eerder in deze serie:

  1. We haken in de inhoud.
  2. We controleren of we aan de slag zijn Hallo Wereld post.
  3. Als dat zo is, voegen we de metadata van de gebruiker toe.
  4. We komen terug $ inhoud naar WordPress.

Met deze code op zijn plaats en met de Hallo Wereld post die in uw browser is geladen, vernieuwt u de pagina een paar keer.

Als dit is gebeurd, ziet de resulterende databasetabel er als volgt uit:

Zoals ik al zei, het is erg vergelijkbaar met hoe de post metadata API presteert.

Unieke waarden

Gebruik de frontend van uw database, verwijder de rijen die zijn gemaakt of kies een nieuwe sleutel (misschien iets als instagram_username). Ik ga de rijen verwijderen.

Ten tweede ga ik ook een tweede functie maken in plaats van de bovenstaande functie te wijzigen, zodat ik de volledige broncode aan het einde van de zelfstudie kan aanbieden, dus lees de volgende code goed:

Geef eerst een unieke waarde voor de metawaarde (of het derde argument) in de functieaanroep. Ververs de pagina een paar keer en kijk vervolgens in de database. Het zou er ongeveer zo uit moeten zien:

Merk op wat interessant is? Er zijn nog steeds meerdere waarden, maar ze zijn allemaal hetzelfde.

Probeer nu een paar keer het meta-waardeargument te veranderen, en bekijk dan de database en je zou zoiets als dit moeten zien:

Let op het verschil? Precies - er is er geen. Dat komt omdat we hebben gezegd dat er alleen een unieke sleutel kan zijn. Het betekent dus niet noodzakelijk dat er maar één record is gemaakt. Dit betekent dat er meerdere records worden gemaakt wanneer de functie wordt aangeroepen, maar dat deze altijd de eerste waarde gebruikt die is opgeslagen en die is gekoppeld aan de sleutel.

Als u wilt, kunt u doorgaan en de rijen verwijderen die we zojuist hebben gemaakt, omdat dit een geweldige stap is naar de volgende functie.

Gebruikers-meta updaten

Op dezelfde manier als de Post Meta API werkt, werkt de update-functionaliteit op de volgende manier:

Werk het meta-veld van de gebruiker bij op basis van gebruikers-ID. Gebruik de parameter $ prev_value om onderscheid te maken tussen metavelden met dezelfde sleutel en gebruikers-ID. Als het metaveld voor de gebruiker niet bestaat, wordt het toegevoegd.

Bij het werken met deze functie helpt het om hierover na te denken in twee scenario's:

  1. wanneer eerdere metadata zijn toegevoegd met behulp van de add_user_meta functie en er zijn meerdere records met dezelfde informatie
  2. wanneer er geen metadata is toegevoegd en we een nieuw record toevoegen en willen dat het uniek is

In het eerste geval helpt het om de $ prev_value omdat je WordPress vertelt welke waarde moet worden getarget en bijgewerkt. 

Wanneer we metagegevens hebben toegevoegd

Neem bijvoorbeeld aan dat onze database eruitziet zoals eerder in de zelfstudie:

En we willen de records bijwerken met de vorige waarde van https://twitter.com/tommcfarlin/. Om dat te doen, werken we de code bij die er zo uitziet.

En dan zou de update van de database er als volgt uitzien:

Merk op dat deze updates allemaal waarden die aan deze metatoets zijn gekoppeld. Dat is natuurlijk maar één gebruik van de functie.

Bij het toevoegen van nieuwe metadata

In het tweede geval hoeft u geen vorige waarde op te geven, omdat u voor de eerste keer informatie gaat toevoegen. 

Om het te verduidelijken, kunt u de update_user_meta functie wanneer u informatie aan de database wilt toevoegen. Het hoeft niet te bestaan ​​voordat het wordt gebruikt.

Dit is handig wanneer u een enkele, unieke record wilt toevoegen die nog moet worden toegevoegd aan de database. Het gebruik van de functie is eenvoudig. Laten we zeggen dat we de naam van de broer van de gebruiker willen opslaan.

In dit geval doen we dit:

En dit resulteert in het volgende record dat wordt ingevoerd in de database:

Als u de pagina een aantal keer vernieuwt en vervolgens uw databasetabel aanvinkt, merkt u dat slechts één exemplaar van de waarde wordt geschreven versus meerdere waarden die worden gebruikt bij het gebruik van add_user_meta.

Als we vervolgens die waarde ooit zouden willen wijzigen, zouden we de metawaarde bijwerken die is gekoppeld aan de opgegeven metasleutel en zou die enkele record worden bijgewerkt.

Gebruikers-meta ophalen

Als het gaat om het ophalen van gebruikersmetadata, hebben we de get_user_meta functie. Op dit punt moet het duidelijk zijn dat de verwachte parameters de gebruikers-ID en de meta-sleutel zijn. 

Maar hoe zit het met de metawaarde?

Onthoud dat wanneer we informatie ophalen, we alleen de gebruikers-ID en de meta-sleutel nodig hebben, omdat dat de identificerende informatie is voor een specifieke waarde. 

Maar wat gebeurt er als de ontwikkelaar meerdere records heeft voor één sleutel? Meer in het bijzonder, wat als ze de add_user_meta functioneren zoals we hierboven hebben gedaan en hebben meerdere records?

Dit is waar de optionele vierde parameter in het spel komt: een booleaanse waarde die we specificeren als we een enkele waarde of een reeks waarden willen ophalen. De standaardwaarde (die wordt doorgegeven als deze niet is opgegeven) is vals dus we krijgen altijd een array terug, tenzij we anders aangeven.

Alle records ophalen

Laten we aannemen dat we dezelfde set gegevens gebruiken als eerder in de zelfstudie. Dat wil zeggen, we hebben meerdere vermeldingen voor het Twitter-account van een gebruiker. Bedenk dat de database er zo uitzag:

Om al deze informatie uit de database te halen en op het scherm weer te geven, gebruiken we de volgende code:

Ervan uitgaande dat alles goed ging, zou je zoiets bovenaan je moeten zien Hallo Wereld post:

[0] => string (32) "https://twitter.com/tommcfarlin/" [1] => string (32) "https://twitter.com/tommcfarlin/" [2] => string ( 32) "https://twitter.com/tommcfarlin/" [3] => string (32) "https://twitter.com/tommcfarlin/"

Als dit niet het geval is, controleert u de aanroep van var_dump die u hebt gemaakt en controleert u of de informatie klopt staat in de database klaar om te worden opgehaald.

Een enkele record ophalen

In het geval dat u één enkele record wilt ophalen, kunt u true doorgeven als de laatste parameter voor de functie. Hiermee wordt het eerste record opgehaald dat is gemaakt in tekenreeksindeling.

En het resultaat van deze code zal dit bovenaan de pagina afdrukken Hallo Wereld bericht van waaruit we hebben gewerkt:

https://twitter.com/tommcfarlin/

Merk op dat als je gebruikt update_user_meta en jij niet doen specificeren waar als de laatste parameter, krijg je een single-index array teruggegeven aan jou. 

array (1) [0] => string (32) "https://twitter.com/tommcfarlin/"

Dus, als u op zoek bent naar een tekenreeksrepresentatie van informatie, moet u altijd doorgaan waar.

Gebruikers-meta verwijderen

Het laatste dat we moeten bespreken, is hoe we de gegevens die we naar de database hebben geschreven, daadwerkelijk kunnen verwijderen. Als je tot nu toe deze reeks hebt gevolgd, dan ontwikkel je waarschijnlijk een soort van intuïtie over hoe deze specifieke functie gaat werken.

Vanaf de bijbehorende Codex-pagina:

Verwijder criteria voor het matchen van metadata van een gebruiker. U kunt matchen op basis van de sleutel, of sleutel en waarde. Verwijderen op basis van sleutel en waarde, zal voorkomen dat dubbele metadata met dezelfde sleutel worden verwijderd. Het maakt het ook mogelijk om alle sleutel voor het matchen van metadata te verwijderen, indien nodig.

Merk op dat deze functie is ontworpen om te werken in het geval dat er meerdere records zijn die bestaan ​​en u ze allemaal wilt verwijderen, of wanneer u één enkele record heeft die bestaat en u deze wilt verwijderen.

Meerdere records verwijderen

Eerst zullen we kijken hoe deze functie moet worden gebruikt wanneer er meerdere records met dezelfde informatie zijn. Laten we aannemen dat voor de doeleinden van dit voorbeeld de database er ongeveer zo uitziet:

Hier hebben we meerdere records. Om records met dezelfde sleutel te verwijderen, gebruiken we een enkele oproep naar de delete_user_meta functie en geef de gebruikers-ID en de meta-sleutel door.

En als u de informatie in de databasetabel vernieuwt, merkt u dat alle records zijn gewist:

Hoewel dit een eenvoudige functie is om te gebruiken, is het belangrijk om te onthouden dat het meerdere rijen in één gesprek kan verwijderen, dus gebruik het met zorg.

Een enkele record

Als u aan de andere kant één record wilt verwijderen, hebt u drie stukjes informatie nodig:

  1. het ID van de gebruiker
  2. de meta-toets
  3. de metawaarde

Als u alle drie de waarden hebt, kunt u één record verwijderen. Het is duidelijk dat het veel meer precisie biedt dan het vorige gebruik van deze functie. 

Laten we in ons voorbeeld zeggen dat we twee records hebben, die beide de Twitter account meta sleutel. Elke sleutel heeft de volgende waarde:

  1. https://twitter.com/tommcfarlin
  2. https://twitter.com/pressware

In ons voorbeeld houden we ons alleen bezig met het verwijderen van de tweede waarde. Om dit te doen, gebruiken we de volgende code:

En als u uw database ververst, ziet u het volgende (of iets dergelijks):

Het is goed wanneer een API precies presteert zoals u verwacht.

De volledige broncode

Hier is een kopie van alle broncode die we in dit artikel hebben behandeld. Houd er rekening mee dat de add_action oproepen zijn becommentarieerd omdat je ze moet verwijderen op basis van wat je wilt doen als je met de code experimenteert.

Voeg ook dit toe aan het bestand dat we in de vorige zelfstudie hebben gemaakt. Dat is wat ik deed toen ik aan de voorbeelden werkte; Het is echter mogelijk dat u voorzichtig wilt zijn bij het werken aan het bestand, zodat de juiste add_action oproepen worden ingesteld op basis van wat u graag zou willen doen.

Conclusie

Zoals eerder vermeld in het artikel, kunt u elk van de functies in de WordPress Codex bekijken, die altijd een klik verwijderd moeten zijn voor een WordPress-ontwikkelaar.

In het laatste artikel in deze serie gaan we kijken hoe we omgaan met metagegevens van reacties. Gegeven wat we tot nu toe hebben geleerd, zou het iets moeten zijn dat relatief eenvoudig op te pikken valt. 

Dat laat ons natuurlijk nog steeds metadata gerelateerd aan taxonomieën. Vanwege de aard van taxonomieën, termen en de API's zullen we die in vervolgseries beoordelen.

Voorlopig blijft u experimenteren met de code die in dit artikel wordt vermeld. Vergeet niet dat het alleen bedoeld is voor demonstratiedoeleinden en niet moet worden uitgevoerd in een productieomgeving.

In deze hele reeks proberen we een basis te leggen voor toekomstige WordPress-ontwikkelaars om vanaf te bouwen wanneer ze verder gaan en aan oplossingen te werken voor hun werkgever, hun klanten of voor hun eigen 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.

Ten slotte kunt u al mijn cursussen en zelfstudies bekijken op mijn profielpagina en kunt u meer artikelen over WordPress en WordPress-ontwikkeling op mijn blog lezen. Je kunt me ook op Twitter volgen 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_user_meta
  • update_user_meta
  • get_user_meta
  • delete_user_meta
  • echo
  • var_dump