Taxonomieën - Datamodel (WordPress)

Uit De Vliegende Brigade
Ga naar: navigatie, zoeken

Zo zitten WordPress-taxonomieën op database-niveau in elkaar:

Inleiding

Een standaard-WordPresssite bevat al snel een handjevol taxonomieën. Daarnaast kunnen plugins hun eigen taxonomieën toevoegen. Een impressie van een live webwinkel:

> select distinct taxonomy from wp_term_taxonomy;

action-group
category
nav_menu
pa_widget_code
pa_automatische_stop
pa_breedte
pa_connector
pa_diagram
pa_diepte
pa_lengte
pa_materiaal
pa_originele_widget
pa_productlijn
pa_stroomdraad
pa_toepassing_model
pa_toepassing_soort
pa_toepassing_submodel
pa_veer
product_cat
product_type
product_visibility

> select attribute_name from wp_woocommerce_attribute_taxonomies;

widget_code
automatische_stop
breedte
connecteur
diagramme
profondeur
longeur
widget_origine
fil_electrique
application_modele
application_sous_modele
ressort
gamme_produits
application_type
materiel

Soorten & maten

Taxonomieën komen in verschillende smaken en soorten. Een mogelijke indeling:

  • Attributes (algemeen - Kenmerken)
  • Categories (algemeen)
  • WooCommerce Attributes
  • WooCommerce Categories - product_cat
  • Tags (WooCommerce).

Dit artikel gaat vooral over WooCommerce Categories en WooCommerce Attributes.

Alle taxonomieën staan in wp_term_taxonomy

In beginsel vind je alle taxonomieën terug in tabel wp_term_taxonomy. Een paar elementen uit het voorbeeld hierboven iets nader bekeken:

action-group       - ?
category           - Reguliere Category-taxonomie
nav_menu           - Menu-items worden bijgehouden middels een taxonomie
pa_widget_code     - Een WooCommerce Attribute 
pa_breedte         - Een WooCommerce Attribute
product_cat        - WooCommerce Category
product_tag        - WooCommerce Tags
product_type       - WooCommerce: Verschillende soorten producten (simple, virtual, etc.)
product_visibility - ?

Transients

Naast de diverse Caching-plugins die in een WordPress-installatie mogelijk rondzwerven, is er ook een 'interne' vorm van caching: Rijen in tabel wp_options met het keyword _transient_ in veld option_name. Ik had in de loop van 2019 of 2020 last van deze vorm van caching rondom het aanpassen van atributen.

Je kunt Deze transients probleemloos verwijderen. Wellicht handig om altijd te doen rondom werken met categorieën:

delete from wp_options where option_name like '_transient_%'

Zie [1] voor details.

WooCommerce Categories

  • WooCommerce Categories zijn een specifiek geval van de algemene Categories-functionaliteit van WordPress. Er is geen overlap tussen de algemene- & WooCommerce-variant van deze taxonomie
  • Er is maar één WooCommerce Categories-taxonomie. Deze kan echter wel meerdere begintaxa hebben. Op die manier kun je via een omweg meerdere taxonomieën incorporeren.

Nieuw begintaxon aanmaken

Dit is een gemakkelijk voorbeeld. Als je hier doorheenkomt, snap je 't waarschijnlijk helemaal:

Via de webinterface heb ik zojuist dit taxon aangemaakt. Deze heeft geen parent category en is dus een begintaxon
wp_term_taxonomy: Dit taxon verschijnt vervolgens in tabel wp_term_taxonomy. Opmerkingen:
  • De term (=taxon) met id=44992 wordt hier geassociëerd met taxonomie product_cat
  • Het veld term_taxonomy_id is de PK van deze tabel
  • De getallen in de kolommen term_taxonomy_id en term_id zijn steeds hetzelfde, omdat het hier blijkbaar niet voorkomt dat een term in meer dan één taxonomie thuishoort - Maar het kan wel. Anders was deze tabel er niet
wp_terms: Een bijbehorend record is automatisch aangemaakt in tabel wp_terms. Je kunt hieraan goed zien, dat tabel wp_term_taxonomy een 'tussentabel' of 'lookup-tabel' is, om taxonomieën en terms (=taxa, niet elementen!) met elkaar te verbinden
wp_term_relationships: Er is geen record in tabel wp_term_relationships, want er is nog niet gelabeled: Er is nog geen element toegevoegd aan dit taxon
wp_termmeta: In tabel wp_termmeta wordt aanvullende info over taxa bewaard, vergelijkbaar met hoe wp_postmeta aanvullende info over postings bewaart

Samenvatting:

  1. Tabel wp_terms_taxonomy: Type taxonomy (product_ca) + description worden opgeslagen, en gekoppeld aan een term (=taxon)
  2. Tabel wp_terms: Slug & taxonnaam
  3. Tabel wp_termmeta: order, display_tyoe, thumbnail_id en eventuele maatwerk-velden.

WooCommerce Attributes

  • WooCommerce Attributes oftewel Kenmerken, zijn de niet-hiërarchische tegenpool van WooCommerce Categories
  • Attributes zijn niet-hiërarchisch: Er is maar één rang. Die ene rang kan echter wel een onbeperkt aantal taxa bevatten.
Attributes zijn niet-hiërarchisch: In dit voorbeeld heeft taxonomie Largeur (mm) maar één rang, met enkele tientalle taxa.

Verder kun je zien dat taxa in WordPress Terms heten

Definitie van een attribute taxonomy

De definitie van een WooCommerce Category is verspreid over drie tabellen wp_term_taxonomy, wp_terms en wp_termmeta. Voor Attribute taxonomies ligt dat iets anders, omdat deze geen equivalent heeft voor niet-WooCommerce-objecten en omdat elke attribute een eigen taxonomie betreft:

  • Taxonomie-definities worden bijgehouden in tabel wp_woocommerce_attribute_taxonomies
  • Tabel wp_term_taxonomy is de link tussen het specifieke WooCommerce-gedeelte, en de reguliere taxonomie-functionaliteit van WordPress
  • Link: wp_woocommerce_attribute_taxonomies.attribute_name is het gedeelte na pa_ van wp_term_taxonomy.taxonomy
select * from wp_woocommerce_attribute_taxonomies;
+--------------+-------------------------+-----------------------------+----------------+-------------------+------------------+
| attribute_id | attribute_name          | attribute_label             | attribute_type | attribute_orderby | attribute_public |
+--------------+-------------------------+-----------------------------+----------------+-------------------+------------------+
|           16 | widget_code             | Code Widget                 | select         | menu_order        |                1 |
|           17 | automatische_stop       | Arrêt automatique?          | select         | menu_order        |                1 |
|           18 | breedte                 | Largeur (mm)                | text           | menu_order        |                1 |
|           19 | connecteur              | Connecteur?                 | select         | menu_order        |                1 |
|           20 | diagramme               | Diagramme                   | text           | menu_order        |                1 |
|           21 | profondeur              | Profondeur (mm)             | text           | menu_order        |                1 |
|           22 | longeur                 | Longeur (mm)                | text           | menu_order        |                1 |
|           23 | Widget_origine          | Widget d'origine            | select         | menu_order        |                1 |
|           24 | fil_electrique          | Fil électrique?             | select         | menu_order        |                1 |
|           25 | application_modele      | Application - Modèle        | select         | menu_order        |                1 |
|           26 | application_sous_modele | Application - Sous-modèle   | select         | menu_order        |                1 |
|           27 | ressort                 | Ressort?                    | select         | menu_order        |                1 |
|           28 | gamme_produits          | Gamme de produits           | select         | menu_order        |                1 |
|           29 | application_type        | Application - Type          | select         | menu_order        |                1 |
|           30 | materiel                | Matériel                    | select         | name              |                1 |
+--------------+-------------------------+-----------------------------+----------------+-------------------+------------------+

Zie ook

Bronnen