WC-CLI (WordPress)

Uit De Vliegende Brigade
Ga naar: navigatie, zoeken

WooCommerce heeft z'n eigen CLI-commando's (command line interface). Het ziet er veelbelovend uit (april 2019) en is onder andere geschikt om in bulk producten aan te maken. De uitdaging op dit moment: Gebrek aan documentatie tav. de preciese parameters en de formattering.

Tot en met WooCommerce 2.6, was de WooCommerce WP-CLI-layer (WC-CLI) een stand-alone project. Sinds WooCommerce 2.7, is de WC-CLI gebaseerd op de REST-API [1]. Soms is er geen aparte documentatie voor WP-CLI, en moet je het doen met de documentatie voor de REST-API. Op zich geen ramp.

Productimport - Simpel voorbeeld

#!/bin/bash

# Simple import
##########################################
#
cd /var/www/rt_tmp.dvb

wp wc product create \
	--name="Widget-wiel 40x50x10" \
	--description="Widget-wiel voor Smurf-systemen. Afmetingen: ..." \
	--short_description="Widget-wiel met afmetingen 40x50x10 (mm) voor Smurf-systemen" \
	--sku="wheel_40x050x10" \
	--regular_price="7.5" \
	--user="Jeroen Strompf"
	# --images="Widget-wiel-40x50x10-Smurf-wheel-rad.jpg"

Opmerkingen:

  • Prijs met punt als decimaalscheidingsteken, ook al is Nederlands de standaardtaal voor deze taal
  • --user was nodig: Anders autorisatie-foutmelding
  • --images gaf foutmeldingen
  • De slug wordt automatisch gegenereerd - Heel goed!
  • Als ik het commando opnieuw uitvoer, krijg ik een foutmelding: Error: Ongeldige of dubbele SKU. {"status":400,"resource_id":1362}

Productimport & afbeeldingen

Hoe specificeer je afbeeldingen bij een product?

Dit werkt in ieder geval niet: --images="Widget-wiel-40x50x10-Smurf-wheel-rad.jpg". Uitleg (zonder verdere toelichting, helaas) [2]:

Images is an array in which element can be set by specifying its index:

* images
* images.size
* images.0.id
* images.0.created_at
* images.0.updated_at
* images.0.src
* images.0.title
* images.0.alt
* images.0.position

Argumenten en syntaxis van de WC-CLI zijn afkomstig van de REST-API. Dit is wat de REST-API-documentatie omtrent images zegt [3]:

Attribute           Type        Description
-----------------   ---------   -----------------------------------------------------------------------
id                  integer     Image ID.
date_created        date-time   The date the image was created, in the site's timezone. READ-ONLY
date_created_gmt    date-time   The date the image was created, as GMT. READ-ONLY
date_modified	    date-time   The date the image was last modified, in the site's timezone. READ-ONLY
date_modified_gmt   date-time   The date the image was last modified, as GMT. READ-ONLY
src                 string      Image URL
name                string      Image name
alt                 string      Image alternative text

Simpel voorbeeld

cd /var/www/rt_tmp.dvb

wp wc product create \
	--name="Widget-wiel 40x50x10" \
	--description="Widget-wiel voor Smurf-systemen. Afmetingen: ..." \
	--short_description="Widget-wiel met afmetingen 40x50x10 (mm) voor Smurf-systemen" \
	--sku="wheel_40x050x10_5" \
	--regular_price="7.5" \
	--user="Jeroen Strompf" \
 	--images='[{"src": "http://demo.woothemes.com/woocommerce/wp-content/uploads/sites/56/2013/06/T_2_front.jpg"}]'

Meerdere afbeeldingen + inspringen

cd /var/www/rt_tmp.dvb

wp wc product create \
	--name="Widget-wiel 40x50x10" \
	--description="Widget-wiel voor Smurf-systemen. Afmetingen: ..." \
	--short_description="Widget-wiel met afmetingen 40x50x10 (mm) voor Smurf-systemen" \
	--sku="wheel_40x050x10_11" \
	--regular_price="7.5" \
	--user="Jeroen Strompf" \
 	--images='[
 		{
 			"src": "http://demo.woothemes.com/woocommerce/wp-content/uploads/sites/56/2013/06/T_2_front.jpg"
		},
		{
 			"src": "http://demo.woothemes.com/woocommerce/wp-content/uploads/sites/56/2013/06/T_2_back.jpg"
		}]'
  • Attributen en waardes zijn gescheiden met een ":"
  • Numerieke waardes hoeven niet binnen dubbele haakjes
  • Records worden van elkaar gescheiden door { en } (en een komma)
  • De array als geheel is omhuld door [ en ]
  • De apostrophes rondom [ en ] kun je niet weglaten.

Extreem inspringen

Dit is ongeveer de limiet:

cd /var/www/rt_tmp.dvb

wp wc product create \
	--name="Widget-wiel 40x50x10" \
	--description="Widget-wiel voor Smurf-systemen. Afmetingen: ..." \
	--short_description="Widget-wiel met afmetingen 40x50x10 (mm) voor Smurf-systemen" \
	--sku="wheel_40x050x10_14" \
	--regular_price="7.5" \
	--user="Jeroen Strompf" \
 	--images='[
 		{
 			"src": "http://demo.woothemes.com/woocommerce/wp-content/uploads/sites/56/2013/06/T_2_front.jpg"
		},
		{
 			"src": "http://demo.woothemes.com/woocommerce/wp-content/uploads/sites/56/2013/06/T_2_back.jpg"
		}
	]'

Meerdere attributen

cd /var/www/rt_tmp.dvb

wp wc product create \
	--name="Widget-wiel 40x50x10" \
	--description="Widget-wiel voor Smurf-systemen. Afmetingen: ..." \
	--short_description="Widget-wiel met afmetingen 40x50x10 (mm) voor Smurf-systemen" \
	--sku="wheel_40x050x10_18" \
	--regular_price="7.5" \
	--user="Jeroen Strompf" \
 	--images='[
 		{
 			"src": 	"http://demo.woothemes.com/woocommerce/wp-content/uploads/sites/56/2013/06/T_2_front.jpg",
 			"name":	"Voorkant van het t-shirt",
 			"alt":	"Voorkant van t-shirt met SKU 40x50_01, te koop op example.com"
		},
		{
 			"src": 	"http://demo.woothemes.com/woocommerce/wp-content/uploads/sites/56/2013/06/T_2_back.jpg",
 			"name":	"Achterkant van het t-shirt"
		}
	]'

Als je de komma na zo'n eigenschap-waarde-paar weglaat, weet de interpreter niet meer waar zo'n paar begint of eindigt. Je krijgt geen foutmeldingen, maar ook geen afbeeldingen.

Afbeeldingen worden gedupliceerd

Als je zo'n script als hierboven opnieuw uitvoert, maar nu met een andere SKU, dan krijg je uiteraard een tweede product. Helaas wordt de afbeelding daarbij opnieuw geïmporteerd (met een numerieke suffix aan de naam). Da's geen enkel probleem: In de praktijk zak er heus wel iets andere zijn aan dat andere product, en daarom zal de titel van de afbeelding ook anders zijn (dus meer geoptimaliseerd!)

Producten in bulk verwijderen

  • Verwijderen van producten gaat via wp wc product delete
  • Het verwijderen van gewone posts, gaat via wp post delete
  • De help-pagina van wp post delete heeft een interessant voorbeeld hoe je dit in bulk kunt doen: wp post delete $(wp post list --post_type='page' --format=ids)
  • Vertaald naar wp wc product delete zou ik denken dat je zoiets krijgt: wp wc product delete $(wp wc product list --user="Jeroen Strompf" --format="ids") - Helaas geeft dit een foutmelding
  • Dit werkt wel: wp wc product delete 1399 --user="Jeroen Strompf"
  • Dit werkt wel, als er nog maar 1 product over is: wp wc product delete $(wp wc product list --user="Jeroen Strompf" --format="ids") --user="Jeroen Strompf"

Wordt vervolgd. Is typisch iets om een eigen script voor te schrijven.

Productimport & taal

Hoe specificeer je de taal waarin een object is geschreven bij import in meertalige websites? Waar zou je zoiets specificeren? Binnen de WC-CLI? Binnen de taalplugin-CLI? Ergens tussenin?

  • Ik gebruik de CLI. Niet de REST-API
  • De gebruikte taalplugin is Polylang (PLL) en Polylang for WooCommerce
  • Polylang lijkt deze mogelijkheid alleen te bieden in Polylang Pro [4]. Dit is hoe je de taal zou specificeren: ‘lang’: contains the language code (generally 2 letter ISO code) of the queried post or term.. Ik heb de controle hierop verwijdert uit de module [5] (wp-content/plugins/polylang/frontend/frontend.php - regels 85-93), maar dit maakt geen verschil: Let op: Ik gebruik de CLI en niet de REST-API
  • wp wc product create heeft geen standaardveld voor taal. Wellicht dat deze opties kunnen helpen:
[--attributes=<attributes>]
    List of attributes.

[--default_attributes=<default_attributes>]
    Defaults variation attributes.

Probeersel

Dit werkt helaas niet ("EN" ipv. "en" maakt ook niet uit). Producten worden nog steeds geïmporteerd in de standaardtaal:

#!/bin/bash

cd /var/www/rt_tmp.dvb

wp wc product create \
	--sku="test-03" \
	--user="Jeroen Strompf" \
	--attributes='[{"lang": "en"}]'

Metadata

meta_data is een array [6]. Het veld heet meta_data. Er is niet zoiets als 'product-meta-data':

Attribute   Type      Description
---------   -------   ------
id	    integer   Meta ID. READ-ONLY
key	    string    Meta key
value	    string    Meta value

Ik krijg het helaas nog niet aan de praat:

#!/bin/bash

cd /var/www/rt_tmp.dvb

wp wc product create \
	--sku="test-05" \
	--name="test-name" \
	--description="Widget-wiel voor Smurf-systemen. Afmetingen: ..." \
	--short_description="Widget-wiel met afmetingen 40x50x10 (mm) voor Smurf-systemen" \
	--regular_price="7.5" \
	--user="Jeroen Strompf" \
 	--images='[{
 			"src": 	"http://demo.woothemes.com/woocommerce/wp-content/uploads/sites/56/2013/06/T_2_front.jpg",
 			"name":	"Voorkant van het t-shirt",
 			"alt":	"Voorkant van t-shirt met SKU 40x50_01, te koop op example.com"
		}]' \
    --meta_data='[
    	{
    		"description":	        "Dit is de meta-data-description",
    		"meta_description":	"Dit is de meta-data-description",
    		"keywords":		"Dit zijn de keywords-metags",
    		"seo_title"		"SEO-titel"
    	}]' \
    --attributes='[
    	{
    		"description":	        "Dit is de meta-data-description",
    		"meta_description":	"Dit is de meta-data-description",
    		"keywords":		"Dit zijn de keywords-metags",
    		"seo_title"		"SEO-titel"
    	}]'

Ideeën

Zie ook

Bronnen

Algemeen

Images

Metadata

Taal