Product cat-Taxonomieën (WordPress): verschil tussen versies

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
 
(38 tussenliggende versies door dezelfde gebruiker niet weergegeven)
Regel 1: Regel 1:
WordPress kent verschillende taxonomie-systemen, waarvan ''Categorieën'' het meest algemene systeem is. Binnen een WordPress-site zijn er vaak meerdere Categorie-taxonomieën actief, die gescheiden van elkaar functioneren. Eén daarvan is de <code>product_cat</code>-taxonomie: Deze wordt gebruikt voor WooCommerce-producten.
+
'' Titels van artikelen mogen geen underscores bevatten, en ze moeten beginnen met een hoofdletter. De titel van dit hoofdstuk had moeten zijn ''product_cat-Taxonomieën (WordPress)''.
  
== Hiërarchie & terminologie ==
+
''product_cat'' is een instantie van de Categorie-taxonomie, voor hiërarschische indeling/ontsluiting van WooCommerce-producten.
  
[[file:20190516-11.22.png|thumb|750px|Voorbeeld van een site met 4 hoofdtaxons, waarvan er 1 een subtaxons heeft]]
+
== Database-model ==
  
=== Hoofdtaxons ===
+
Zie [[Taxonomieën - Datamodel (WordPress)]] voor het achterliggende database-model.
  
In het voorbeeld hiernaast zie je vier ''hoofdtaxons''. Kun je zeggen dat er vier taxonomieën zijn? Dat zou je kunnen zeggen, maar ik vind het intuïtiever om te spreken van ''één taxonomie'', met meerdere ''hoofdtaxons'': Bij het automatiseren is dat namelijk de manier waarop je dit moet programmeren: ''product_cat'' is de taxonomie. Dit is hoe je zo'n hoofdtaxon aanmaakt mbv. de PHP-API:
+
== Hoofdtaxons aanmaken ==
 +
 
 +
[[file:20190516-11.22.png|thumb|750px|Voorbeeld van een site met 4 hoofdtaxons, waarvan er 1 een subtaxon heeft]]
 +
 
 +
In het voorbeeld hiernaast zie je vier ''hoofdtaxons''. Kun je zeggen dat er vier taxonomieën zijn? Dat zou je kunnen zeggen, maar ik vind het intuïtiever om te spreken van ''één taxonomie'', met meerdere ''hoofdtaxons'': Bij het automatiseren is dat namelijk de manier waarop je dit moet programmeren: ''product_cat'' is de taxonomie.  
 +
 
 +
Aanmaken van taxons gaat voor alle taxonomische systemen van WordPress met de PHP-API-functie [[PHP-API (WordPress)#wp_insert_term | wp_insert_term]]. Voor product_cat-taxonomieën, is daarbij de naam van de taxonomie altijd <code>product_cat</code>:
  
 
<pre>
 
<pre>
 
###############################################################
 
###############################################################
# product_cat "Merk"
+
# product_cat "Bosch"
 
###############################################################
 
###############################################################
 
#
 
#
wp_insert_term
+
$term_id = wp_insert_term
 
(
 
(
'Merk',
+
  'Bosch',         # Taxon-naam
'product_cat',  # product_cat is de naam van de taxonomie
+
  'product_cat',  # product_cat is altijd de naam van de taxonomie
array
+
  array
(
+
  (
'description' => 'Merk electrisch handgereedschap'
+
      'description'   =>   'Koolborstels voor Bosch-handgereedschap'
)
+
  )
 
);
 
);
 
</pre>
 
</pre>
  
=== Subtaxons ===
+
== Subtaxons aanmaken ==
  
 
In dezelfde afbeelding heeft hoofdtaxon ''Merk'' één subtaxon, genaamd ''Motorola''. Dit maak je als volgt aan in code. Daarin kun je zien dat ''Merk'' het ''parenteel'' is van ''Motorola'':
 
In dezelfde afbeelding heeft hoofdtaxon ''Merk'' één subtaxon, genaamd ''Motorola''. Dit maak je als volgt aan in code. Daarin kun je zien dat ''Merk'' het ''parenteel'' is van ''Motorola'':
Regel 43: Regel 49:
 
Het ID van de ''parent'' kun je aflezen in tabel <code>wp_terms</code>. Je kunt het ook zien als je in het betreffende scherm van de site ''hovered'' over de term. Daarnaast is er vermoedelijk een PHP-API-functie om het te achterhalen.
 
Het ID van de ''parent'' kun je aflezen in tabel <code>wp_terms</code>. Je kunt het ook zien als je in het betreffende scherm van de site ''hovered'' over de term. Daarnaast is er vermoedelijk een PHP-API-functie om het te achterhalen.
  
=== Labeling? ===
+
== Afbeeldingen toevoegen aan taxons ==
 +
 
 +
Aan een product_cat-taxon kun je een afbeelding toevoegen.
  
Hoe noem je het ''associëren van producten met taxons''? Daar is vast een goede term voor
+
=== Op database-niveau ===
  
* ''Categoriseren''
+
Hier zie je wat er op database-niveau gebeurt, als je een afbeelding associëert met een taxon:
* ''Indelen''
+
{|
* ''Tagging'' - Verwarrend, want er bestaat een apart taxonomisch systeem, genaamd ''Tags''
+
|[[file:20190809-1156.png|thumb|Details van deze afbeelding in <code>wp_postmeta</code>]]
* ''Labeling'' - Hier houd ik het op, bij gebrek aan beter.
+
|[[file:20190809-1157.png|thumb|Associatie tussen afbeelding en posting in <code>wp_termmeta</code>]]
 +
|}
 +
 
 +
=== add_term_data ===
 +
 
 +
Afbeeldingen associëren gaat mbv. <code>add_term_data</code>. Voorbeeld:
 +
 
 +
<pre>
 +
$term_id = wp_insert_term
 +
(
 +
  "Bosch",
 +
  "product_cat",
 +
  array
 +
  (
 +
      "description" => "Koolborstels voor Bosch-electrisch handgereedschap"
 +
  )
 +
);
 +
add_term_meta(
 +
  $term_id,        # id of the taxon, created above
 +
  "thumbnail_id",   # Key in table wp_options
 +
  "1235");          # Image-id
 +
</pre>
  
== Taxons & producten met elkaar associëren ==
+
== Labelen ==
  
Mbv. <code>wp_set_object_terms</code> 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 met ''slug'' ''Bosch'', uit de taxonomie ''product_cat'' (btw: slugs zijn altijd uniek):
+
Met ''labelen'' bedoel ik het associëren van ''objecten'' aan ''taxons''. Mbv. <code>wp_set_object_terms</code> associëer je taxons met producten. 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 met ''slug'' ''Bosch'', uit de taxonomie ''product_cat'' (btw: slugs zijn altijd uniek):
  
 
<pre>
 
<pre>
Regel 66: Regel 95:
 
</pre>
 
</pre>
  
=== Voorbeeld: Alle producten associëren met een fabrikant ===
+
''' 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?
 
De volgende stap: Hoe zorg ik dat alle producten die een element zijn van taxon ''Bosch'', als zodanig geassociëerd worden?
Regel 133: Regel 162:
  
 
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.
 
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.
 +
 +
== Toon de elementen van subcategorieën onder verschillende hoofdcategorieën ==
 +
 +
Neem een taxonomie
 +
 +
<pre>
 +
Bosch
 +
  Boormachine
 +
  Zaagmachine
 +
DeWalt
 +
  Boormachine
 +
  Zaagmachine
 +
Makita
 +
  Boormachine
 +
  Zaagmachine
 +
</pre>
 +
 +
Dan zou het soms zo handig zijn, als je alle boormachines kunt selecteren, dus onafhankelijk van de bijbehorende hoofdcategorie. Ik denk dat dat niet erg voor de hand ligt, maar je weet maar nooit. Rondom CSS had je daar syntax voor zoals:
 +
 +
<pre>
 +
/shop/../boormachine/
 +
</pre>
  
 
== Zie ook ==
 
== Zie ook ==
  
* [[PHP-API (WordPress)#wp_insert_term | PHP-API » wp_insert_term]]
+
* [[Attribuut-taxonomieën (WooCommerce) |    Attribuut-taxonomieën]]
 +
* delete_term_meta()
 +
* get_term_meta()
 +
* [[PHP-API (WordPress)#wp_set_object_terms | PHP-API » wp_set_object_terms]]
 +
* [[Taxonomieën (Algemeen)]]
 +
* [[Taxonomieën - Datamodel (WordPress)]]
 +
* [[Taxonomieën (WordPress)]]
 +
* update_term_meta()
  
 
== Bronnen ==
 
== Bronnen ==
  
 
* https://simplea.com/Articles/What-is-Website-Taxonomy-and-Metadata - Verfrissend
 
* https://simplea.com/Articles/What-is-Website-Taxonomy-and-Metadata - Verfrissend
 +
 +
''' Afbeeldingen associëren met taxons '''
 +
 +
* https://remicorson.com/add-woocommerce-category-images-to-the-archive-page/ - Not really
 +
* https://stackoverflow.com/questions/12717112/how-to-display-woocommerce-category-image - Dit gaat over het weergeven van zo'n afbeelding. Niet het associëren ervan
 +
* https://php.quicoto.com/add-metadata-categories-wordpress/
 +
* https://codex.wordpress.org/Function_Reference/add_metadata

Huidige versie van 30 aug 2021 om 17:04

Titels van artikelen mogen geen underscores bevatten, en ze moeten beginnen met een hoofdletter. De titel van dit hoofdstuk had moeten zijn product_cat-Taxonomieën (WordPress).

product_cat is een instantie van de Categorie-taxonomie, voor hiërarschische indeling/ontsluiting van WooCommerce-producten.

Database-model

Zie Taxonomieën - Datamodel (WordPress) voor het achterliggende database-model.

Hoofdtaxons aanmaken

Voorbeeld van een site met 4 hoofdtaxons, waarvan er 1 een subtaxon heeft

In het voorbeeld hiernaast zie je vier hoofdtaxons. Kun je zeggen dat er vier taxonomieën zijn? Dat zou je kunnen zeggen, maar ik vind het intuïtiever om te spreken van één taxonomie, met meerdere hoofdtaxons: Bij het automatiseren is dat namelijk de manier waarop je dit moet programmeren: product_cat is de taxonomie.

Aanmaken van taxons gaat voor alle taxonomische systemen van WordPress met de PHP-API-functie wp_insert_term. Voor product_cat-taxonomieën, is daarbij de naam van de taxonomie altijd product_cat:

###############################################################
# product_cat "Bosch"
###############################################################
#
$term_id = wp_insert_term
(
   'Bosch',         # Taxon-naam
   'product_cat',   # product_cat is altijd de naam van de taxonomie
   array
   (
      'description'   =>   'Koolborstels voor Bosch-handgereedschap'
   )
);

Subtaxons aanmaken

In dezelfde afbeelding heeft hoofdtaxon Merk één subtaxon, genaamd Motorola. Dit maak je als volgt aan in code. Daarin kun je zien dat Merk het parenteel is van Motorola:

# Test: Insert a Merk-taxon
###########################
#
$term_array = array
(
	'description'	=>	'Alle xxx voor dit merk',
	'parent'	=>	27
);
wp_insert_term("Motorola", "product_cat", $term_array);   # product_cat is de naam van de taxonomie

Het ID van de parent kun je aflezen in tabel wp_terms. Je kunt het ook zien als je in het betreffende scherm van de site hovered over de term. Daarnaast is er vermoedelijk een PHP-API-functie om het te achterhalen.

Afbeeldingen toevoegen aan taxons

Aan een product_cat-taxon kun je een afbeelding toevoegen.

Op database-niveau

Hier zie je wat er op database-niveau gebeurt, als je een afbeelding associëert met een taxon:

Details van deze afbeelding in wp_postmeta
Associatie tussen afbeelding en posting in wp_termmeta

add_term_data

Afbeeldingen associëren gaat mbv. add_term_data. Voorbeeld:

$term_id = wp_insert_term
(
   "Bosch",
   "product_cat",
   array
   (
      "description" => "Koolborstels voor Bosch-electrisch handgereedschap"
   )
);
add_term_meta(
   $term_id,         # id of the taxon, created above
   "thumbnail_id",   # Key in table wp_options
   "1235");          # Image-id

Labelen

Met labelen bedoel ik het associëren van objecten aan taxons. Mbv. wp_set_object_terms associëer je taxons met producten. 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 met slug Bosch, uit de taxonomie product_cat (btw: slugs zijn altijd uniek):

wp_set_object_terms("0901", "Bosch", "product_cat");

en hier hetzelfde, maar dan ahv. de term_id (niet geverifiëerd):

wp_set_object_terms("0901", 104, "product_cat");

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.

Toon de elementen van subcategorieën onder verschillende hoofdcategorieën

Neem een taxonomie

Bosch
   Boormachine
   Zaagmachine
DeWalt
   Boormachine
   Zaagmachine
Makita
   Boormachine
   Zaagmachine

Dan zou het soms zo handig zijn, als je alle boormachines kunt selecteren, dus onafhankelijk van de bijbehorende hoofdcategorie. Ik denk dat dat niet erg voor de hand ligt, maar je weet maar nooit. Rondom CSS had je daar syntax voor zoals:

/shop/../boormachine/

Zie ook

Bronnen

Afbeeldingen associëren met taxons