Product cat-taxonomieën (WordPress)

Uit De Vliegende Brigade
Ga naar: navigatie, zoeken

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 product_cat-taxonomie: Deze wordt gebruikt voor WooCommerce-producten.

Hiërarchie & terminologie

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

Hoofdtaxons

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:

###############################################################
# product_cat "Merk"
###############################################################
#
wp_insert_term
(
	'Merk',
	'product_cat',   # product_cat is de naam van de taxonomie
	array
	(
		'description'	=>	'Merk electrisch handgereedschap'
	)
);

Subtaxons

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.

Labeling?

Hoe noem je het associëren van producten met taxons? Daar is vast een goede term voor

  • Categoriseren
  • Indelen
  • Tagging - Verwarrend, want er bestaat een apart taxonomisch systeem, genaamd Tags
  • Labeling - Hier houd ik het op, bij gebrek aan beter.

Taxons & producten met elkaar 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 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.

Zie ook

Bronnen