Taxonomieën (WordPress): verschil tussen versies
(2 tussenliggende versies door dezelfde gebruiker niet weergegeven) | |||
Regel 290: | Regel 290: | ||
== Attribuut-taxonomieën == | == Attribuut-taxonomieën == | ||
− | + | Zie [[Attribuut-taxonomieën (WooCommerce)]] | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== Categorieën verwijderen == | == Categorieën verwijderen == | ||
Regel 544: | Regel 298: | ||
== Zie ook == | == Zie ook == | ||
+ | * [[Attribuut-taxonomieën (WooCommerce) | Attribuut-taxonomieën]] | ||
* [[PHP-API (WordPress)#wp_insert_term (functie) | PHP-API » wp_insert_term]] | * [[PHP-API (WordPress)#wp_insert_term (functie) | PHP-API » wp_insert_term]] | ||
* [[PHP-API (WordPress)#wp_set_object_terms | PHP-API » wp_set_object_terms]] | * [[PHP-API (WordPress)#wp_set_object_terms | PHP-API » wp_set_object_terms]] | ||
* [[Product cat-taxonomieën (WordPress)]] | * [[Product cat-taxonomieën (WordPress)]] | ||
− | |||
== Bronnen == | == Bronnen == |
Versie van 17 mei 2019 17:40
WordPress biedt verschillende manieren om gegevens zoals posts en producten te ontsluiten via taxonomieën. Dit artikel gaat vooral over de Categories-functionaliteit, inclusief WooCommerce Attributes, omdat dat een specifiek geval is van Categories. Dit artikel focust daarnaast op automatisering rondom taxonomieën.
Inleiding
Een taxonomie is een gestructureerde manier om informatie te ordenen. WordPress heeft hier meerdere systemen voor:
Terminologie
- Taxonomie is de algemene term voor systemen om data te ordenen (of zoiets). Vaak gebruik ik het ook als synoniem voor Categorieën
- Categories is een specifieke WordPress-functionaliteit, waarmee je zowel platte als hiërarchische taxonomieën kunt vormen. Ik vind de naam niet handig
- Taxon is de benaming voor een term of label waarmee je objecten ordent. Meervoud schijnt taxa te zijn, maar taxons vind ik prettiger
- Taxon-namen: Een bekend taxonomisch systeem (dat niets met WordPress te maken heeft), is de taxonomie van Linnaeus (Linnaean taxonomy). Hierbij hebben taxons hun eigen naam. Zoogdieren is daar een voorbeeld van. Ik merk dat ik het niet handig vind om te denken in namen-van-taxons
- Elementen zijn de objecten die bij een taxon horen.
Meerdere taxonomische systemen
WordPress kent verschillende taxonomische systemen:
Categorieën
Het meest algemene taxonomische systeem van WordPress, heet Categorieën. Deze functionaliteit wordt op diverse plekken binnen een WordPress-site toegepast. Soms op een manier die zichtbaar is voor gebruikers, en soms op manieren die niet zichtbaar zijn. Al deze Categorie-instanties, zijn gescheiden van elkaar. Je hebt dus bv. een Categorie-taxonomie voor posts en een aparte Categorie-taxonomie voor producten.
Voorbeeld van de Categorie-taxonomieën van een site-in-aanbouw. category
is hierbij de Categorie-taxonomie voor posts:
SELECT distinct taxonomy FROM rt_tmp.wp_term_taxonomy; category language nav_menu post_translations product_cat product_tag product_type product_visibility term_language term_translations
product_cat
Product_cat is geen eigen taxonomisch systeem, maar een Categorie-taxonomie, toegepast op WooCommerce-producten. Voorbeeld:
SELECT distinct taxonomy FROM kbo3.wp_term_taxonomy; category nav_menu pa_dimensie-1 product_cat product_type product_visibility
Hierbij is product_cat
de Categorie-taxonomie voor products. Vandaar dat ik dit vaak product_cat
noem.
Predefined Attributes
WooCommerce kent naast Categorieën, een taxonomisch systeem dat 'Attributes oftewel Kenmerken heet. Onder water is dit gewoon een Categorie-taxonomie, met wat toeters, bellen, maar ook met enkele beperkingen. Deze WooCommerce Attributen komen in twee smaken:
- Predefined attributes
- Custom attributes.
De predefined attributes lijken in grote lijnen sterk op Categorieën. Het voorbeeld van de site van hierboven:
SELECT distinct taxonomy FROM kbo3.wp_term_taxonomy; category nav_menu pa_dimensie-1 product_cat product_type product_visibility
Hierbij is pa_dimensie-1
een attribute. Hier kun je zien dat dat een bijzonder geval is van een Categorie-taxonomie. Verder heegt dit attribute de naam Dimensie-1. Blijkbaar voegt WooCommerce daar de prefix pa_
(product attribute?) aan toe.
Custom Attributes
De WooCommerce Custom Attributes zijn kenmerken die je ad-hoc, dus per product kunt defineren. Waarom je dit zou doen? Waarschijnlijk omdat het gewoon prettig werken is, dat je on the fly je datamodel kunt vaststellen, ipv. vantevoren. En omdat er altijd wel gekke producten bij zitten, die niet in het systeem passen.
Tags
Als laatste kent WooCommerce een systeem voor tags. Bv. om een folkstonomy te bouwen. Nog niet mee gewerkt.
Custom fields
Het hoort niet thuis in dit rijtje, maar toch behandel ik het hier, omdat ik anders in de war raak: custom fields (maatwerk-velden) zijn heel handig, maar hebben niets met taxonomieën te maken. Ze dienen een heel ander doel: Informatie omtrent een product op een gestructureerde manier aanbieden. Toevallig kan diezelfde informatie soms ook geschikt zijn voor een taxonomie, maar dan nog moet je de informatie twee keer incorporeren in de site: Eén keer als custom field, en één keer via een taxonomisch systeem (product_cat of attributes, lijkt me).
Vergelijking tussen deze systemen
Attributes vs. categorieën vs. tags
Intuïtief/ergonomisch
Dit voorbeeld benadert het verschil tussen attributes en categorieen als volgt aan de hand van een voorbeeld van het kopen van een spijkerbroek bij (in mijn geval) C&A:
- Categorieen: Herenkleding >> Vrije tijd >> Spijkerbroeken
- Attributes: merk, maat, stijl, etc.
Klinkt intuïtief/ergonomisch, maar is het relevant? Als ik alles met categorieën kan, waarom dan überhaupt attributen gebruiken? Het heeft namelijk een paar stomme beperkingen (zie verderop)
Inhoudelijke verschillen
Aspect | Categorieën | Attributen |
---|---|---|
Archief-pagina's | Een 'archief-pagina oftewel (taxon-pagina) is hetzelfde als een taxon. Je kunt tekst en één afbeelding toevoegen | Alleen ruimte voor tekst |
Hiërarchie | Geen probleem | Kunnen nooit hiërarchisch zijn. Je kunt meerdere hoofdtaxons defineren (bv. lengte, breedte & hoogte) en per hoofdtaxon meerdere taxons defineren. Maar geen additionele lagen |
Taxons | Archief-pagina's en taxons zijn hetzelfde. Dus ruimte voor tekst en één afbeelding | Alleen ruimte voor tekst |
Conclusies
Ik houd het spijkerbroek-voorbeeld aan:
- Attributes gebruik ik voor eigenschappen van het betreffende product
- Categorieen gebruik ik voor het zoeken/ontsluiten van het betreffende product
Categorieën - Details
Taalspecifiek
Taxons zijn taal-specifiek. Als je bv. een Duits produc.t probeert toe te voegen aan een Nederlandstalige categorie, wordt er een kopie gemaakt van die categorie in het Duits (automatisch gekoppeld aan de NL-categorie!), en dat product wordt daar toegevoegd
Taxonpagina (archives page)
- Elke categorie-taxon heeft z'n eigen pagina. Dus z'n eigen Archives page. Standaard kun je een afbeelding en description-tekst per taxon toevoegen. Het hangt van het thema af of het getoond wordt - Altijd doen!
- WooCommerce Attribuut-taxons hebben echter niet zo'n eigen pagina.
Database-model
Dit hoofdstuk is incompleet. Daarnaast blijkt kennis van het achterliggende database-model van weinig belang te zijn, als je werkt via de gebruikelijk API's.
wp_options
Tabel wp_options
bevat algemene informatie over taxonomieën, bv. bij welk type objecten ze horen: Blijkbaar mag een taxonomie met maar één klasse van objecten geassociëerd zijn.
wp_terms
Tabel wp_terms
bevat alle taxons, voor alle taxonomieën, voor alle talen. Welke taxon je ook zoekt: Het staat altijd in deze tabel.
wp_term_taxonomy
Vermoedelijk is dit de centrale tabel rondom taxonomieën, en niet wp_terms - Deze laatste is vrij doods. Tabel wp_term_taxonomy
geeft aan bij welke taxonomie een taxon hoort, verschaft additionele informatie, en regelt nog een paar dingen. Velden:
term_taxonomy_id
- Primaire sleutelterm_id
- Taxon waar dit record betrekking op heefttaxonomy
- Naam van de taxonomie waar deze taxon deel van uitmaaktdescription
- Aanvullende informatie. Denk daarbij aan serialised data voor niet-publieke taxonsparent
- Parenteel-taxon (is dat Nederlands?). Niet-hierarchische taxonomie? Dan waarde0
count
- Aantal elementen (denk ik - Nu niet al te belangrijk).
wp_term_relationships
- Tabel
wp_term_relationships
is een tussentabel waardoor het mogelijk is om meerdere objecten te koppelen met meerdere taxons en vice versa. Ik geloof dat je altijd een tussentabel nodig hebt als je een veel-op-veel-relatie wilt hebben - Ik heb de indruk dat deze tabel een samengestelde primaire sleutel heeft:
object_id
+term_taxonomy_id
.
wp_termmeta
- Tabel
wp_termmate
bevat aanvullende taxon-gerelateerde info - Alsof deze tabel een "extra'tje" is, voor data die niet gemakkelijk in
wp_terms_taxonomy
past (bv. binaire data, dus data met een entiteit- en een waardeveld) - Voorbeeld: De afbeelding en description voor een taxonpagina, vind je als twee losse records in deze tabel.
product_cat
Verplaatst naar Product cat-taxonomieën (WordPress). Alles wat nog hier staat, zijn dingen die nog niet af zijn.
product_cat - Taxons & producten associëren
Mbv. wp_set_object_terms
kun je eenvoudig taxons en producten met elkaar associëren. In dit voorbeeld wordt een WooCommerce-product met ID 0901 (klopt dat wel? Het zou toch gewoon een integer moeten zijn, dus zonder voorloopnul?) gekoppeld aan taxon Bosch uit de taxonomie product_cat:
wp_set_object_terms("0901", "Bosch", "product_cat");
en hier hetzelfde, maar dan ahv. de term_id
(niet geverifiëerd) - Handig als namen niet uniek zijn (slugs zijn trouwens altijd uniek):
wp_set_object_terms("0901", 104, "product_cat");
Het brengt echter twee issues met zich mee:
$object_id achterhalen
De truuk is waarschijnlijk, om vanuit het dwh in de db van de site te koekeloeren, en zodoende de object-ID's te achterhalen. Fluitje van een cent.
Voorbeeld: Alle producten associëren met een fabrikant
De volgende stap: Hoe zorg ik dat alle producten die een element zijn van taxon Bosch, als zodanig geassociëerd worden?
DWH-SQL-code:
# # Connect all relevant products with taxon "Bosch" ###################################################################################################### # ###################################################################################################### # Create php code ###################################################################################################### # drop table if exists tmp; create table tmp select distinct sku from brush_tool_asein_201808 where tool_brand like "Bosch" order by sku; call add_column_unless_exists("tmp", "exec", "text"); update tmp set exec = concat ( "wp_set_object_terms(", char(34), sku, char(34), ", ", char(34), "Bosch", char(34), ", ", char(34), "product_cat", char(34), ");" ); select * from tmp; ###################################################################################################### # Export code ###################################################################################################### # call export_save_php("taxonomy_terms", "tmp", "exec", "/home/strompf/www/kbo3.dvb");
Een deel van het resulterende script:
<?php require_once("/home/strompf/www/kbo3.dvb/wp-load.php"); wp_set_object_terms("0100", "Bosch", "product_cat"); wp_set_object_terms("0101", "Bosch", "product_cat"); wp_set_object_terms("0102", "Bosch", "product_cat"); wp_set_object_terms("0103", "Bosch", "product_cat"); wp_set_object_terms("0104", "Bosch", "product_cat"); wp_set_object_terms("0105", "Bosch", "product_cat"); wp_set_object_terms("0107", "Bosch", "product_cat"); wp_set_object_terms("0108", "Bosch", "product_cat");
Dit bestand uitvoeren met let op -f:
php -f ./05-taxonomy_terms-20190413-1627
Leuke extra: De local working directory hoeft niet te worden aangepast! Dankzij het require_once-commando, wordt het script automatisch uitgevoerd binnen de juiste WordPress-site.
Attribuut-taxonomieën
Zie Attribuut-taxonomieën (WooCommerce)
Categorieën verwijderen
Nog niet gelukt. Zie PHP-API » get_categories
Zie ook
- Attribuut-taxonomieën
- PHP-API » wp_insert_term
- PHP-API » wp_set_object_terms
- Product cat-taxonomieën (WordPress)
Bronnen
Algemeen
- http://www.siteground.com/tutorials/wordpress/video/categories.htm
- https://code.tutsplus.com/tutorials/understanding-and-working-with-taxonomies-and-terms-in-wordpress--cms-21051 - Aardige inleiding, maar geen PHP-functies
- https://developer.wordpress.org/reference/files/wp-includes/taxonomy.php/ - Vermoedelijk alle taxonomie-gerelateerde functies bij elkaar
- https://codex.wordpress.org/Taxonomies - Hoopvol