Categorieën (WordPress): verschil tussen versies

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
 
(21 tussenliggende versies door dezelfde gebruiker niet weergegeven)
Regel 1: Regel 1:
 +
Dit artikel behandelt de generieke Category-taxonomie-functionaliteit van WordPress. WooCommerce maakt gebruik van eigen instanties van deze generieke Catalog-functionaleit, die ik ''product_cat'' noem. Voor meer over ''product_cat'', zie dit artikel: [[Product cat-taxonomieën (WordPress)]].
 +
 
== Algemeen ==
 
== Algemeen ==
  
 
=== Taalspecifiek ===
 
=== 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
+
Taxons zijn taal-specifiek. Als je bv. een Duits product 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) ===
 
=== Taxonpagina (archives page) ===
Regel 10: Regel 12:
 
* WooCommerce Attribuut-taxons hebben echter niet zo'n eigen pagina.
 
* WooCommerce Attribuut-taxons hebben echter niet zo'n eigen pagina.
  
=== Database-model ===
+
== 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.''
 
  
 +
Ik vind het geweldig om via de WP-CLI-API te werken, maar soms gaat er niets boven rechtstreeks in SQL werken. En dan heb je het database-model nodig:
 
{|
 
{|
 
|[[file:20190412-1624.png|thumb|De vier tabellen die een rol spelen rondom Categorie-taxonomieën. Merk op dat WordPress ''bijna nooit'' relaties defineert tussen tabellen]]
 
|[[file:20190412-1624.png|thumb|De vier tabellen die een rol spelen rondom Categorie-taxonomieën. Merk op dat WordPress ''bijna nooit'' relaties defineert tussen tabellen]]
|[[file:20190412-1702.png|thumb|Categorie-taxonomieën: De drie belangrijkste tabellen + hun relatie [https://code.tutsplus.com/tutorials/understanding-and-working-with-taxonomies-and-terms-in-wordpress--cms-21051]]]
+
|[[file:20190412-1702.png|thumb|Categorie-taxonomieën: Een impressie. Tabel <code>wp_links</code> wordt in mijn ervaring nooit gebruikt. Daarnaast denk ik dat tabel <code></code> cruciaal is in zo'n overzicht  [https://code.tutsplus.com/tutorials/understanding-and-working-with-taxonomies-and-terms-in-wordpress--cms-21051]]]
 
|}
 
|}
  
=== wp_options ===
+
=== wp_term_taxonomy ===
 +
 
 +
* Tabel <code>wp_term_taxonomy</code> is vermoedelijk de centrale tabel rondom taxonomieën waarbij elke rij een taxon representeert
 +
* Additionele info per taxon, staat in tabel <code>wp_terms</code>, gelinkt via sleutel <code>term_id</code>
 +
* Vreemd genoeg is er geen tabel met algemene informatie per taxonomy. Deze tabel <code>wp_term_taxonomy</code> komt het dichtst in de buurt van zo'n tabel.
 +
 
 +
Velden:
 +
 
 +
# <code>term_taxonomy_id</code> - Primaire sleutel van deze tabel
 +
# <code>term_id</code> - Taxon-id - PK voor tabel <code>wp_terms</code>
 +
# <code>taxonomy</code> - Naam van de taxonomie waar deze taxon deel van uitmaakt. Merk op dat er geen tabel is met algemene inf
 +
# <code>description</code> - Titel op de shoppagina voor de betreffende categorie. Soms bevat dit veld ''serialised data'', maar dat lijkt niet het geval te zijn als er een 'reguliere' titel is ingevoerd - Zie schermafdrukken hieronder
 +
# <code>parent</code> - Parenteel-taxon (is dat Nederlands?). Voor 'top-level' taxons heeft dit veld de waarde <code>0</code>
 +
# <code>count</code> - Aantal elementen (denk ik - Nu niet al te belangrijk).
  
Tabel <code>wp_options</code> 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.
+
{|
 +
|[[file:20190412-1638.png|thumb|Voorbeeld van de inhoud van tabel <code>wp_term_taxonomy</code>]]
 +
|[[file:20220827-1041.png|thumb|Voorbeeld <code>description</code>-veld als titel op een shoppagina]]
 +
|}
  
 
=== wp_terms ===
 
=== wp_terms ===
  
Tabel <code>wp_terms</code> bevat alle taxons, voor alle taxonomieën, voor alle talen. Welke taxon je ook zoekt: Het staat altijd in ''deze'' tabel.
+
Tabel <code>wp_terms</code> bevat additionele informatie voor alle taxons in alle taxonomieën en voor alle talen, en is min-of-meer een uitbreiding van tabel <code>wp_term_taxonomy</code>. Waarom deze aparte tabel? Waarschijnlijk om historische redenen
  
 
{|
 
{|
Regel 32: Regel 49:
 
|}
 
|}
  
=== wp_term_taxonomy ===
+
=== wp_termmeta ===
 +
 
 +
* Tabel <code>wp_termmate</code> bevat meta-data voor taxons, vergelijkbaar met hoe tabel <code>wp_postmeta</code> meta-data voor ''posts'' bevat
 +
* Het is oa. bedoeld voor programmeurs die additionele gegevens willen bijhouden, bv. SEO-teksten voor gebruik op shoppagina's die horen bij bepaalde product_cat-taxons.
 +
 
 +
=== wp_term_relationships ===
 +
 
 +
* Tabel <code>wp_term_relationships</code> is een ''tussentabel'' die taxons associëert met WordPress-objecten zoals pagina's of producten
 +
* Deze tabel heeft een samengestelde primaire sleutel: <code>object_id</code>+<code>term_taxonomy_id</code>.
  
Vermoedelijk is dit de centrale tabel rondom taxonomieën, en niet ''wp_terms'' - Deze laatste is vrij doods. Tabel <code>wp_term_taxonomy</code> geeft aan bij welke taxonomie een taxon hoort, verschaft additionele informatie, en regelt nog een paar dingen. Velden:
+
=== wp_options ===
  
# <code>term_taxonomy_id</code> - Primaire sleutel
+
Incidenteel bevat tabel <code>wp_options</code> additionele informatie over taxonomieën, bijvoorbeeld instellingen.
# <code>term_id</code> - Taxon waar dit record betrekking op heeft
 
# <code>taxonomy</code> - Naam van de taxonomie waar deze taxon deel van uitmaakt
 
# <code>description</code> - Aanvullende informatie. Denk daarbij aan ''serialised data'' voor niet-publieke taxons
 
# <code>parent</code> - Parenteel-taxon (is dat Nederlands?). Niet-hierarchische taxonomie? Dan waarde <code>0</code>
 
# <code>count</code> - Aantal elementen (denk ik - Nu niet al te belangrijk).
 
  
 
{|
 
{|
|[[file:20190412-1638.png|thumb|Voorbeeld van de inhoud van tabel <code>wp_term_taxonomy</code>]]
+
|[[file:20220827-1115.png|thumb|Voorbeeld van een webwinkel: Tabel <code>wp_options</code> bevat slechts twee rijen die betrekking hebben op de ''product_cat''-taxonomie]]
 
|}
 
|}
  
=== wp_term_relationships ===
+
== Vertalen ==
 +
 
 +
Hoe vertaal je een complete product_cat-taxonomie? Laatste ervaringen zomer 2022:
 +
 
 +
=== Taxon-namen & -slugs ===
 +
 
 +
De namen en slugs van taxons worden bijgehouden in tabel ''wp_terms''.
  
* Tabel <code>wp_term_relationships</code> 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
+
Tot op heden heb ik vertalen van namen & slugs van taxons, rechtstreeks in SQL gedaan: Ik heb nog geen effectieve manier gevonden om dat in bulk via WP-CLI te doen. In SQL kan ik duizende taxons in een seconde vertalen. Via WP-CLI moet ik vermoedelijk voor elke taxon apart een match gaan doen. Dat duurt vermoedelijk uren.
* Ik heb de indruk dat deze tabel een samengestelde primaire sleutel heeft: <code>object_id</code>+<code>term_taxonomy_id</code>.
 
  
=== wp_termmeta ===
+
=== Taxon-beschrijvingen ===
  
* Tabel <code>wp_termmate</code> bevat aanvullende taxon-gerelateerde info
+
Taxon-beschrijvingen worden bijgehouden in tabel
* Alsof deze tabel een "extra'tje" is, voor data die niet gemakkelijk in <code>wp_terms_taxonomy</code> 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.
 
  
 
== Categorieën verwijderen ==
 
== Categorieën verwijderen ==
  
 
Nog niet gelukt. Zie [[PHP-API (WordPress)#get_categories | PHP-API » get_categories]]
 
Nog niet gelukt. Zie [[PHP-API (WordPress)#get_categories | PHP-API » get_categories]]
 +
 +
== Zie ook ==
 +
 +
* [[Categories & SEO (WordPress)]]
 +
* [[Product cat-taxonomieën (WordPress)]]
 +
* [[Taxonomieën (WordPress)]]

Huidige versie van 27 aug 2022 om 11:16

Dit artikel behandelt de generieke Category-taxonomie-functionaliteit van WordPress. WooCommerce maakt gebruik van eigen instanties van deze generieke Catalog-functionaleit, die ik product_cat noem. Voor meer over product_cat, zie dit artikel: Product cat-taxonomieën (WordPress).

Algemeen

Taalspecifiek

Taxons zijn taal-specifiek. Als je bv. een Duits product 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

Ik vind het geweldig om via de WP-CLI-API te werken, maar soms gaat er niets boven rechtstreeks in SQL werken. En dan heb je het database-model nodig:

De vier tabellen die een rol spelen rondom Categorie-taxonomieën. Merk op dat WordPress bijna nooit relaties defineert tussen tabellen
Categorie-taxonomieën: Een impressie. Tabel wp_links wordt in mijn ervaring nooit gebruikt. Daarnaast denk ik dat tabel cruciaal is in zo'n overzicht [1]

wp_term_taxonomy

  • Tabel wp_term_taxonomy is vermoedelijk de centrale tabel rondom taxonomieën waarbij elke rij een taxon representeert
  • Additionele info per taxon, staat in tabel wp_terms, gelinkt via sleutel term_id
  • Vreemd genoeg is er geen tabel met algemene informatie per taxonomy. Deze tabel wp_term_taxonomy komt het dichtst in de buurt van zo'n tabel.

Velden:

  1. term_taxonomy_id - Primaire sleutel van deze tabel
  2. term_id - Taxon-id - PK voor tabel wp_terms
  3. taxonomy - Naam van de taxonomie waar deze taxon deel van uitmaakt. Merk op dat er geen tabel is met algemene inf
  4. description - Titel op de shoppagina voor de betreffende categorie. Soms bevat dit veld serialised data, maar dat lijkt niet het geval te zijn als er een 'reguliere' titel is ingevoerd - Zie schermafdrukken hieronder
  5. parent - Parenteel-taxon (is dat Nederlands?). Voor 'top-level' taxons heeft dit veld de waarde 0
  6. count - Aantal elementen (denk ik - Nu niet al te belangrijk).
Voorbeeld van de inhoud van tabel wp_term_taxonomy
Voorbeeld description-veld als titel op een shoppagina

wp_terms

Tabel wp_terms bevat additionele informatie voor alle taxons in alle taxonomieën en voor alle talen, en is min-of-meer een uitbreiding van tabel wp_term_taxonomy. Waarom deze aparte tabel? Waarschijnlijk om historische redenen

Voorbeeld van de inhoud.pll staat vermoedelijk voor Polylang. Ik weet alleen niet waar die taxons voor zijn
Ander voorbeeld. De taxons 10 mm en 20 mm hebben betrekking op de attribute Dimensie-1 (zie eerder voorbeeld)

wp_termmeta

  • Tabel wp_termmate bevat meta-data voor taxons, vergelijkbaar met hoe tabel wp_postmeta meta-data voor posts bevat
  • Het is oa. bedoeld voor programmeurs die additionele gegevens willen bijhouden, bv. SEO-teksten voor gebruik op shoppagina's die horen bij bepaalde product_cat-taxons.

wp_term_relationships

  • Tabel wp_term_relationships is een tussentabel die taxons associëert met WordPress-objecten zoals pagina's of producten
  • Deze tabel heeft een samengestelde primaire sleutel: object_id+term_taxonomy_id.

wp_options

Incidenteel bevat tabel wp_options additionele informatie over taxonomieën, bijvoorbeeld instellingen.

Voorbeeld van een webwinkel: Tabel wp_options bevat slechts twee rijen die betrekking hebben op de product_cat-taxonomie

Vertalen

Hoe vertaal je een complete product_cat-taxonomie? Laatste ervaringen zomer 2022:

Taxon-namen & -slugs

De namen en slugs van taxons worden bijgehouden in tabel wp_terms.

Tot op heden heb ik vertalen van namen & slugs van taxons, rechtstreeks in SQL gedaan: Ik heb nog geen effectieve manier gevonden om dat in bulk via WP-CLI te doen. In SQL kan ik duizende taxons in een seconde vertalen. Via WP-CLI moet ik vermoedelijk voor elke taxon apart een match gaan doen. Dat duurt vermoedelijk uren.

Taxon-beschrijvingen

Taxon-beschrijvingen worden bijgehouden in tabel

Categorieën verwijderen

Nog niet gelukt. Zie PHP-API » get_categories

Zie ook