WordPress-taxonomier: Villkor, Föräldrar, Barn
Att programmera taxonomier verkar vara en punkt som dyker upp då och då för de som bygger lösningar för andra på WordPress.
Taxonomier i sig kan till och med vara lite förvirrande; Men jag har märkt att följande brukar hjälpa till att förstärka konceptet lite:
Hierarkiska taxonomier är analoga med kategorier; icke-hierarkiska taxonomier är analoga med taggar.
Men låt oss ändå säga att du skapar en lösning för någon så att du behöver importera information som ett inlägg och tillämpa en taxonomi på det. Vidare kanske du också vill tillämpa en överordnad taxonomi på inlägget.
Hur kan vi göra det?
WordPress-taxonomier: registrering, föräldrar, barn och mer
Situationen är ungefär så här:
Du har ett inlägg som en taxonomi kommer att tillämpas på. Om taxonomin har en förälder vill vi även tillämpa den på posten.
För att göra detta behöver vi fyra (kanske fem) funktioner:
Jag ska också tillägga att jag tycker att det är en bra idé att använda sanitize_title_with_dashes om du ska använda någon typ av osanifierad, inkommande sträng för inläggstypen (men det är inte nödvändigt om du inte gör det, naturligtvis ).
1 Registrera taxonomin
För det här exemplet kommer vi att skapa en taxonomi för en anpassad inläggstyp.
Eftersom detta kan vara vad som helst som du arbetar med, kommer jag att använda en variabel som heter $postType för att visa poängen.
<?php
register_taxonomy(
'acme-category',
$postType,
[
'label' => 'Acme Categories',
'rewrite' => ['slug' => 'acme-category'],
'capabilities' => [
'manage_terms' => 'manage_options',
'edit_terms' => 'manage_options',
'delete_terms' => 'manage_options',
'assign_terms' => 'manage_options',
],
'hierarchical' => true,
]
);
Det är okomplicerat nog, men ta en anteckning från kodreferensen :
En enkel funktion för att skapa eller modifiera ett taxonomiobjekt baserat på de angivna parametrarna. Om du ändrar ett befintligt taxonomiobjekt, notera att
$object_typevärdet från den ursprungliga registreringen kommer att skrivas över.
I allmänhet är detta inget problem, men om du arbetar med en stor applikation eller en redan existerande applikation är det något att tänka på.
2 Infoga en term för taxonomin
Antag sedan att en $customPost görs tillgänglig för dig och den har en funktion för att hämta dess namn, dess titel eller någon annan egenskap som används för att identifiera den (annat än dess ID).
Detta kan överföras till en funktion, eller så kan det göras tillgängligt genom valfri användning av andra funktioner som WordPress tillhandahåller. I det här exemplet kommer jag att använda en getName()- funktion på $customPost- objektet.
<?php
$termInfo = wp_insert_term(
$customPost->getName(),
'acme-category',
['slug' => sanitize_title_with_dashes($customPost->getName())]
);
Observera att jag också läser in resultatet av funktionen i en $termInfo- variabel. Vi kommer att använda detta i nästa steg för att slå upp föräldern om den finns, och även tillämpa den på vårt anpassade postobjekt.
3 Slå upp en termins förälder
Här kommer vi att använda termen vi just skapade för att se om det finns en förälder för det. Observera att om det returnerar falskt så existerar inte taxonomin (eller om termen inte hittas).
För detta ändamål vill du lägga till ett villkor till din kod för att skapa den, om det behövs. För att hålla koden kortfattad utelämnar jag den i följande kod :
<?php
$parentTermInfo = get_term_by(
'term_taxonomy_id',
$termInfo['term_taxonomy_id'],
'acme-category',
ARRAY_A
);
Observera att jag lagrar resultatet av ovanstående kod i en $parentTermInfo- variabel. Detta är så att vi kan skicka detta till vår sista funktion för att applicera föräldrainformationen på vårt postobjekt.
4 Tillämpa termen på ett inlägg
Slutligen kommer vi att tillämpa termen (eller termerna) om det finns ett överordnat objekt. Kom ihåg att det är här det villkorliga kommer att behövas. Enkelt uttryckt, om det inte finns någon förälder, kommer värdet $parentTermInfo[’parent’] inte att behövas.
Men för koden nedan antar vi att vi har den.
<?php
wp_set_object_terms(
$customPost->getId(),
[
$parentTermInfo['parent'],
$termInfo['term_id'],
],
'acme-category',
true
);
Från kodreferensen, lägg märke till att detta kommer att skapa termen om den inte redan finns; annars kommer det att använda det som redan är definierat och tillämpa det på inlägget.
Och gjort
Generellt sett är det inte så mycket jobb. Det hjälper till att se till att du har en tydlig förståelse för hur taxonomier och deras termer fungerar. Vidare hjälper det också att veta hur man hämtar föräldern till en given term om det är vad du vill göra (annars är det tredje steget inte nödvändigt).
Men förhoppningsvis ger länkarna och koden ovan dig allt du behöver för att skapa en taxonomi och tillämpa den på ett inlägg (liksom en överordnad term, om det behövs).

