De eerste post in deze serie legde de basis voor het begrijpen van taxonomieën, termen en hun relatie in de context van WordPress. Als je het nog niet hebt gelezen en je bent helemaal nieuw voor WordPress-ontwikkeling, dan raad ik je aan het door te lezen omdat dit bericht bovenop alles gaat bouwen dat in dat artikel wordt behandeld.
Bovendien, terwijl we doorgaan met praten over meer soorten metadata, is het belangrijk om de vorige serie waarin we hebben behandeld te bekijken:
De reden dat het de moeite waard is om die artikelen te beoordelen, is omdat dit artikel op een aantal van de technieken gaat die in die artikelen worden behandeld, en zal ook voortbouwen op enkele van de strategieën met het werken met vergelijkbare API's.
Bovenal is deze tutorial bedoeld om een idee te geven van hoe te werken met een van de nieuwste metadata-API's die beschikbaar zijn in WordPress.
Zoals eerder vermeld, is dit specifieke artikel meer gericht op degenen die net bezig zijn met WordPress-ontwikkeling of die hun vaardigheden willen laten groeien. Dus als u een ervaren ontwikkelaar bent, dan is de inhoud die in dit artikel wordt behandeld misschien niet het meest interessant voor u.
Een van de belangrijkste dingen die u moet onthouden tijdens deze zelfstudie, is dat de code niet in een productieomgeving moet worden gebruikt. Dat wil zeggen, het is de bedoeling om alleen de API te bestuderen en te begrijpen hoe het werkt.
De code die we schrijven is niet bedoeld om te worden gebruikt in een project dat zal worden gebruikt voor een publiek of voor een groep gebruikers. De belangrijkste reden is omdat er onderwerpen zijn als ontsmetting, validatie, ontsnapping, enzovoort, die buiten het bereik van de vorige serie vallen, evenals deze serie.
Nadat we dit artikel hebben ingepakt, gaan we verder met meer geavanceerde onderwerpen zoals die, maar voorlopig gaan we ons alleen richten op de Term Metadata API.
Voordat we het hebben over de API voor metadata, laten we ervoor zorgen dat we allemaal op dezelfde pagina staan als voor de verschillende terminologie die we gaan gebruiken. Concreet moeten we ervoor zorgen dat we de taxonomieën, termen en de relatie tussen beide begrijpen.
Ten eerste definieert de Codex taxonomieën als:
In WordPress is een "taxonomie" een groeperingsmechanisme voor sommige berichten (of links of aangepaste berichttypen).
In een standaard WordPress-installatie kunt u deze als beschouwen categorieën en labels. Ze kunnen hiërarchisch zijn, zoals categorieën, of niet-hiërarchische tags.
Termen daarentegen worden gedefinieerd als:
In WordPress is een term een classificatie, groep of subset van een taxonomie, waarbij de laatste een categorie, tag of aangepaste taxonomie kan zijn. Standaard hebben termen een titel, een naaktslak en een beschrijving. Hiërarchische taxonomieën zoals categorieën kunnen een bovenliggende term definiëren.
Ten slotte is de relatie tussen taxonomieën en termen zodanig dat men niet echt kan bestaan zonder de ander (vooral in hiërarchische taxonomieën). Dat wil zeggen, een categorie-taxonomie moet minstens één term hebben die ermee geassocieerd is; niet-hiërarchische taxonomieën hoeven dit echter niet noodzakelijk te volgen.
Met dat gezegd, laten we aan de slag gaan met het werken met de Term Metadata API.
Net als met de andere API's voor metadata die beschikbaar zijn, kunnen we dingen doen zoals:
toevoegen
bijwerken
terugvinden
verwijderen
En omdat dit een nieuwe API is, is het misschien niet meteen duidelijk wat een aantal van de voordelen van deze API zijn. Hoewel we in dit artikel alleen enkele basisprincipes gaan verkennen, is het de moeite waard om slechts een paar dingen te bekijken die we kunnen doen.
Bijvoorbeeld:
Natuurlijk zijn er veel meer mogelijkheden. Maar laten we nu eens kijken hoe we dit in ons werk kunnen opnemen.
Laten we ervoor zorgen dat we op dezelfde pagina beginnen over wat we gaan gebruiken om dit werk gedaan te krijgen. Dit is specifiek wat u nodig heeft, en hier is wat ik gebruik.
Zodra u dit allemaal hebt ingesteld, zijn we klaar om te vertrekken. Als u hulp nodig hebt bij het opzetten van uw ontwikkelomgeving, bekijk dan deze reeks artikelen.
Het eerste dat we moeten doen, is een bestand maken dat al het werk bevat dat we in deze zelfstudie gaan doen.
Eerst moeten we creëren tutsplus-termijn-metadata.php
in de root van de twentysixteen
themamap.
Vervolgens moeten we de volgende coderegel toevoegen aan het functions.php-bestand van het thema. Dit zorgt ervoor dat we ons werk opnemen in het thema.
Wanneer u uw browser opnieuw laadt, ziet u ongeveer de volgende afbeelding:
Er mag geen foutuitvoer zijn en het zou moeten werken alsof er niets is veranderd. Als u ten slotte werkt met een nieuwe installatie van WordPress, moet de term metadatatabel er volledig leeg uitzien:
Vervolgens, om ervoor te zorgen dat we een categorie hebben waarmee we werken, ga je gang en maak een nieuwe categorie aan in je WordPress-installatie. Ik ga er een aanmaken Hoofd en zorg ervoor dat Hallo Wereld is hiermee gestempeld.
Als u klaar bent, bekijkt u de tabel met termen in de database om de
term_id
. In mijn geval, determ_id
is2
. De jouwe kan variëren, maar het punt is dat je die ID van de betreffende term kent:Let op, we zullen dit tijdens de tutorial gebruiken.
Metadata toevoegen
Om te beginnen, is het belangrijk om dat te herkennen
add_term_meta
functie kan twee doelen dienen:
- De functie kan niet-unieke waarden maken die zijn gekoppeld aan een enkele-term-ID en een enkele meta-sleutel.
- De functie kan unieke waarden creëren die zijn gekoppeld aan een enkele-term-ID en een enkele meta-sleutel.
De functie accepteert een term-ID, een meta-sleutel, een metawaarde en een optionele Booleaanse waarde die bepaalt of de opgeslagen waarde al dan niet uniek is.
Unieke waarden
Laten we eerst een unieke waarde in de database maken. Voer de volgende code in uw editor in, vernieuw dit Hallo Wereld, en bekijk dan de
termmeta
tafel.term_id; if (1 === get_the_ID () && 2 === $ term_id) add_term_meta ($ term_id, 'my_meta_key', 'my_meta_value', true); retourneer $ inhoud;Je zou je informatie moeten zien.
Als u de metawaarde wijzigt en de pagina vernieuwt, zou u moeten opmerken dat de waarde in de database dat heeft niet veranderd. Dit komt omdat u hebt gezegd dat dit een unieke waarde moet zijn en dat de eerste waarde die is geschreven, niet zal worden gewijzigd of overschreven.
Dit kan worden bereikt met
update_term_meta
, maar we zullen die code even bekijken.Niet-unieke waarden
Voordat we echter kijken naar hoe we termmeta kunnen bijwerken, laten we bekijken hoe we meerdere waarden aan dezelfde meta-sleutel en dezelfde term-ID kunnen toevoegen. De onderstaande code lijkt op de bovenstaande code, behalve dat we true niet doorgeven aan de functie.
term_id; if (1 === get_the_ID () && 2 === $ term_id) for ($ i = 0; $ i < 3; $i++ ) $meta_value = "my_meta_value_$i"; add_term_meta( $term_id, 'non_unique_key', $meta_value ); return $content;verversen Hallo Wereld een paar keer en kijk dan in de database. Je zou zoiets als dit moeten zien:
Heb je zin? Kortom, wanneer u zegt dat u een unieke waarde wilt hebben, blijft de eerste waarde die u invoert behouden als de enkel en alleen waarde (tenzij u deze update of verwijdert).
Als u aan de andere kant niet opgeeft dat u wilt dat het een unieke waarde is, kunt u zoveel waarden opslaan als u wilt met de term ID en de meta-sleutel.
Dit leidt echter de weg naar het ophalen van informatie en het verwijderen van informatie op een andere manier dan de database; we zullen dit later in het artikel in meer detail bekijken.
Metadata updaten
De API-functie
update_term_meta
biedt ons een paar leuke opties. Ten eerste geeft dit ons de mogelijkheid om een enkele, unieke invoer in de database toe te voegen zonder de vierde parameter van te hoeven gebruikenadd_post_meta
.Ten tweede kunnen we een bepaald stuk metadata bijwerken, zolang we weten wat de vorige waarde was. Laten we beide gevallen bekijken, gezien de huidige staat van onze database.
Unieke gegevens toevoegen
Om unieke metadata toe te voegen, kunnen we een oproep plaatsen die erg lijkt op wat we in het eerste voorbeeld zagen
add_term_meta
. In plaats daarvan gebruiken we deze keerupdate_term_meta
. Bekijk bijvoorbeeld de volgende code:term_id; if (1 === get_the_ID () && 2 === $ term_id) update_term_meta ($ term_id, 'update_key', 'my_unique_update_value'); retourneer $ inhoud;verversen Hallo Wereld een paar keer en ongeacht hoe vaak u het ververst, ziet u een enkele waarde ingevoerd in de database. Als je de code volgt, zou je zoiets als dit moeten zien:
Maar wat gebeurt er als er meerdere records zijn met dezelfde meta-sleutel en willen we ze updaten??
Een niet-uniek record bijwerken
Om een record met dezelfde term-ID en dezelfde meta-sleutel bij te werken, is het belangrijk om de vorige waarde te kennen. In ons geval weten we dat we een waarde hebben genoemd
my_meta_value_1
.Daartoe kunnen we deze specifieke rij bijwerken door de nieuwe waarde en de oude waarde in de
update_term_meta
functie. Bekijk hiervoor de volgende code:term_id; if (1 === get_the_ID () && 2 === $ term_id) update_term_meta ($ term_id, 'non_unique_key', 'my_meta_value_1_updated', 'my_meta_value_1'); retourneer $ inhoud;En dan vernieuwen Hallo Wereld. Als dit is voltooid, ziet de bijgewerkte meta-waarde er als volgt uit:
Als u niet hetzelfde resultaat ziet, zorg er dan voor dat u de juiste functienaam in uw hook, de write-term-ID, de juiste meta-sleutel en de rechter vorige meta-waarde correct hebt opgegeven.
Metagegevens ophalen
Om de metadata te verkrijgen die we hebben gevonden, kunnen we de
get_term_meta
functie.Houd er echter rekening mee dat wanneer we termmetagegevens ophalen, we mogelijk te maken hebben met een metasleutel waaraan verschillende waarden zijn gekoppeld. Of we hebben te maken met een meta-sleutel die slechts één waarde heeft.
Afhankelijk van de situatie, moeten we verschillende informatie opgeven voor de functie.
Alle metagegevens ophalen
Het ophalen van alle metagegevens die aan een enkele term zijn gekoppeld, is eenvoudig, zoals de onderstaande code aantoont. Het belangrijkste om op te letten is dat de resultaten in een array worden geretourneerd.
In het onderstaande voorbeeld gebruiken we de
non_unique_key
als onze meta-sleutel omdat er verschillende waarden aan verbonden zijn.term_id; if (1 === get_the_ID () && 2 === $ term_id) get_term_meta ($ term_id, 'non_unique_key'); retourneer $ inhoud;U kunt ervoor kiezen om de resultaten naar het scherm weer te geven, u kunt ervoor kiezen om var_dump te gebruiken of u kunt ervoor kiezen om een foutopsporingsprogramma te gebruiken om de informatie te bekijken. Hoe het ook zij, u zou iets als het volgende moeten zien als uw resultaten:
array (3) [0] => string (15) "my_meta_value_0" [1] => string (23) "my_meta_value_1_updated" [2] => string (15) "my_meta_value_2"Met deze uitvoer kunt u ervoor kiezen om het in een variabele op te slaan en vervolgens een bepaalde waarde uit een bepaalde index op te halen. Of misschien kiest u ervoor om de gegevens door te lussen en te lezen of te manipuleren.
Wat uw use-case ook is, dit is hoe u alle informatie kunt ophalen die aan een meta-sleutel is gekoppeld.
Een enkel stuk metagegevens ophalen
Wanneer we het hebben over het ophalen van één stuk metadata, bedoelen we normaal dat we één record van velen willen ophalen (zoals in ons voorbeeld hierboven); er kunnen echter gevallen zijn waarin we een enkele metawaarde willen ophalen die is gekoppeld aan een enkele meta-sleutel.
We zullen het over de latere zaak in een ogenblik hebben. Maar laten we eerst het geval bespreken waarin we een enkele waarde willen ophalen uit een set gegevens met dezelfde term-ID en dezelfde meta-sleutel..
Let op in de onderstaande code, we geven een vierde waarde door,
waar
:term_id; if (1 === get_the_ID () && 2 === $ term_id) get_term_meta ($ term_id, 'non_unique_key', true); retourneer $ inhoud;En hier is wat wordt teruggestuurd:
string (15) "my_meta_value_0"Merk op dat dit de eerste waarde teruggeeft die het vindt, en het doet dit in de vorm van een string.
Wat als er maar één record is?
Als er slechts één record is, hebt u twee opties:
- U kunt de informatie ophalen zonder op te geven
waar
.- U kunt de informatie ophalen door op te geven
waar
.Kiest u voor de eerste case, dan krijgt u een array terug met een enkele index en een enkele waarde. Als zodanig moet je de waarde uit het resultaat halen door iets als te doen
$ waarde = $ resultaat [0]
ervan uitgaande dat u het resultaat van de functieoproep opslaat$ result
.Aan de andere kant, als u kiest voor de tweede optie, dan kunt u verwachten dat het resultaat aan u wordt geretourneerd als een
draad
.Wellicht het belangrijkste om op te merken over het benaderen van de waarden van deze specifieke strategie, is dat de waarden uniek zijn gezien hun metasleutel.
Metagegevens verwijderen
Ten slotte moeten we de bijbehorende metagegevens verwijderen. En om consistent te blijven met de rest van onze voorbeelden, hangt dit af van het feit of er verschillende stukjes metadata zijn gekoppeld aan een meta-sleutel of een enkele metawaarde die is gekoppeld aan één metasleutel.
Alle records verwijderen
Als u weet dat er één meta-sleutel is waaraan verschillende waarden zijn gekoppeld, kunt u de volgende code gebruiken:
term_id; if (1 === get_the_ID () && 2 === $ term_id) delete_term_meta ($ term_id, 'non_unique_key'); retourneer $ inhoud;En dat zal de databasetabel zodanig bijwerken dat het er zo uitziet:
Als u meegegaan bent, weet u dat hierdoor alle gegevens zijn verwijderd die aan de
non_unique_key
meta sleutel.Een enkele record verwijderen
Als u een enkele record wilt verwijderen, zijn er twee manieren om dit te doen:
- U kent de metawaarde die is gekoppeld aan de meta-sleutel die u wilt verwijderen.
- De waarde die is gekoppeld aan de opgegeven meta-sleutel is uniek omdat de meta-sleutel en de metawaarde uniek zijn.
Daartoe bekijken we het eerste voorbeeld in deze sectie en bekijken we het tweede voorbeeld in dit gedeelte.
Om een enkele record te verwijderen waarin we de bijbehorende metawaarde kennen, kunnen we code schrijven die zowel de metatoets als de metawaarde aangeeft. Bijvoorbeeld:
term_id; if (1 === get_the_ID () && 2 === $ term_id) delete_term_meta ($ term_id, 'my_meta_key', 'my_meta_value'); retourneer $ inhoud;Hiermee wordt de rij die aan deze informatie is gekoppeld uit de database verwijderd.
Een uniek record verwijderen
Als er ten slotte één unieke record is waarin u de meta-sleutel kent, maar u de metawaarde niet kent, kunt u die record alsnog uit de database verwijderen.
Het enige dat u in de broncode moet opgeven, is de meta-sleutel. Zie in de volgende functie:
term_id; if (1 === get_the_ID () && 2 === $ term_id) delete_term_meta ($ term_id, 'update_key'); retourneer $ inhoud;Aseute lezers zullen waarschijnlijk zien dat de bovenstaande functie dezelfde functiedefinitie is die we hebben opgegeven bij het verwijderen van records die allemaal meerdere waarden hebben. En dat komt omdat zij zijn hetzelfde.
Het verschil is echter het voornemen van de functie. De intentie van een functie zal vaak bepalen hoe we de functie een naam geven. In het vorige geval wilden we alle termmetagegevens verwijderen. In dit geval wilden we één stuk termmetagegevens verwijderen.
Dit heeft implicaties als het gaat om het schrijven van kwaliteitscode en als het gaat om het schrijven van eenheidstests.
De volledige broncode
Hier ga je alle code vinden die we in dit bericht hebben gebruikt, samen met aanvullende opmerkingen die uitleggen wat er in de code gebeurt. Vergeet niet dat al deze functies zijn gekoppeld aan
de inhoud
, wat betekent dat de functies elke keer dat het bericht wordt geladen worden geactiveerd.Als zodanig, de
add_filter
oproepen worden becommentarieerd, zodat u ze indien nodig kunt inschakelen.term_id; if (1 === get_the_ID () && 2 === $ term_id) add_term_meta ($ term_id, 'my_meta_key', 'my_meta_value_changed', true); retourneer $ inhoud; // add_filter ('the_content', 'tutsplus_add_term_metas'); / ** * Als we ons op het eerste bericht bevinden en in de categorie de * ID van '2' hebben, voegen we meerdere metawaarden toe met dezelfde * metasleutel voor de term metadata. * * @param string $ content De berichtinhoud. * @return string De berichtinhoud. * / function tutsplus_add_term_metas ($ content) $ category = get_the_category (); $ term_id = $ categorie [0] -> term_id; if (1 === get_the_ID () && 2 === $ term_id) for ($ i = 0; $ i < 3; $i++ ) $meta_value = "my_meta_value_$i"; add_term_meta( $term_id, 'non_unique_key', $meta_value ); return $content; //add_filter( 'the_content', 'tutsplus_update_term_meta' ); /** * Updates the term meta value with the specified key. If the value * doesn't exist, then the record will be created. This will only * be added if the 'Hello World' page is loaded with the category * having the ID of '2'. * * @param string $content The post content. * @return string The post content. */ function tutsplus_update_term_meta( $content ) $category = get_the_category(); $term_id = $category[0]->term_id; if (1 === get_the_ID () && 2 === $ term_id) update_term_meta ($ term_id, 'update_key', 'my_unique_update_value'); retourneer $ inhoud; // add_filter ('the_content', 'tutsplus_update_term_metas'); / ** * Werkt de bestaande waarde bij voor de metagegevens met de meta-sleutel 'non_unique_key' * met de opgegeven metawaarde. Dit gebeurt alleen als we op de * post staan met de ID van een en deze heeft de categorie-ID van '2'. * * @param string $ content De berichtinhoud. * @return string De berichtinhoud. * / function tutsplus_update_term_metas ($ content) $ category = get_the_category (); $ term_id = $ categorie [0] -> term_id; if (1 === get_the_ID () && 2 === $ term_id) update_term_meta ($ term_id, 'non_unique_key', 'my_meta_value_1_updated', 'my_meta_value_1'); retourneer $ inhoud; // add_filter ('the_content', 'tutsplus_get_term_metas'); / ** * Als we ons op het eerste bericht bevinden en het bericht de categorie-ID van '2' heeft, haalt u * het woord meta op in de vorm van een array. * * @param string $ content De berichtinhoud. * @return string De berichtinhoud. * / function tutsplus_get_term_metas ($ content) $ category = get_the_category (); $ term_id = $ categorie [0] -> term_id; if (1 === get_the_ID () && 2 === $ term_id) get_term_meta ($ term_id, 'non_unique_key'); retourneer $ inhoud; // add_filter ('the_content', 'tutsplus_get_term_meta'); / ** * Als we ons op het eerste bericht bevinden en het bericht de categorie-ID van '2' heeft, haalt * * de eerste waarde uit de metagegevens op als een tekenreeks. * * @param string $ content De berichtinhoud. * @return string De berichtinhoud. * / function tutsplus_get_term_meta ($ content) $ category = get_the_category (); $ term_id = $ categorie [0] -> term_id; if (1 === get_the_ID () && 2 === $ term_id) get_term_meta ($ term_id, 'non_unique_key', true); retourneer $ inhoud; // add_filter ('the_content', 'tutsplus_delete_term_metas'); / ** * Als we ons op het eerste bericht bevinden en het bericht de categorie-ID van '2' heeft, verwijdert * vervolgens de metawaarden die aan de opgegeven sleutel zijn gekoppeld. * * @param string $ content De berichtinhoud. * @return string De berichtinhoud. * / function tutsplus_delete_term_metas ($ content) $ category = get_the_category (); $ term_id = $ categorie [0] -> term_id; if (1 === get_the_ID () && 2 === $ term_id) delete_term_meta ($ term_id, 'non_unique_key'); retourneer $ inhoud; // add_filter ('the_content', 'tutsplus_delete_term_meta'); / ** * Als we ons op het eerste bericht bevinden en het bericht de categorie-ID van '2' heeft, verwijdert * * de opgegeven metawaarde die aan de opgegeven metasleutel is gekoppeld. * * @param string $ content De berichtinhoud. * @return string De berichtinhoud. * / function tutsplus_delete_term_meta ($ content) $ category = get_the_category (); $ term_id = $ categorie [0] -> term_id; if (1 === get_the_ID () && 2 === $ term_id) delete_term_meta ($ term_id, 'my_meta_key', 'my_meta_value'); retourneer $ inhoud; // add_filter ('the_content', 'tutsplus_delete_single_term_meta'); / ** * Als we ons op het eerste bericht bevinden en het bericht de categorie-ID van '2' heeft, verwijdert * vervolgens de metawaarden die aan de opgegeven sleutel zijn gekoppeld. * * @param string $ content De berichtinhoud. * @return string De berichtinhoud. * / function tutsplus_delete_single_term_meta ($ content) $ category = get_the_category (); $ term_id = $ categorie [0] -> term_id; if (1 === get_the_ID () && 2 === $ term_id) delete_term_meta ($ term_id, 'update_key'); retourneer $ inhoud;Het is helemaal niet ongebruikelijk om functies als deze te vinden die zijn gekoppeld aan een andere haak
save_post
of iets dergelijks. Dit is iets dat we verderop in dit jaar gedetailleerder zullen bespreken in een geavanceerde tutorial.Conclusie
Voor degenen die deze serie en de vorige serie hebben gevolgd en met de rest van de API voor metadata werken, moet veel van het materiaal in deze serie niet te moeilijk zijn om te begrijpen.
Misschien is het moeilijkste deel van het werken met deze API het uitoefenen van je creativiteit op de vele manieren waarop deze daadwerkelijk kunnen worden gebruikt. Maar sinds we het hebben behandeld hoe om met de API te werken, zou het werken aan hem niet ontzettend moeilijk zijn.
Vergeet niet dat we de komende weken gaan kijken naar geavanceerde en juiste technieken voor het schrijven en lezen van informatie in de database, zodat we met hen in een productieomgeving kunnen werken.
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.
Verwante bronnen