Bulkimport (WordPress): verschil tussen versies

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
Regel 4: Regel 4:
 
[[file:20190403-2010.png|thumb|'''Datamodel & afbeelding-metadata:''' Het veld ''Alt text'' wordt opgeslagen in tabel <code>wp_postmeta</code>]]
 
[[file:20190403-2010.png|thumb|'''Datamodel & afbeelding-metadata:''' Het veld ''Alt text'' wordt opgeslagen in tabel <code>wp_postmeta</code>]]
  
Ik automatiseer dingen. Dus dat processen automatisch gaan. Dat maakt die processen ''herhaalbaar'', ''verifiëerbaar'', ''optimaliseerbaar'' en ''schaalbaar''. Rondom WordPress heeft dat primair betrekking op import van producten en bijbehorende zaken.
+
Processen die ik vaak doorloop, automatiseer ik graag. Dat maakt die processen ''herhaalbaar'', ''verifiëerbaar'', ''optimaliseerbaar'' en ''schaalbaar''. Rondom WordPress heeft dat primair betrekking op import van producten en bijbehorende zaken.
  
 
Voor WooCommerce-producten gebruik ik tot op heden (lente 2019) [[WooCommerce CSV Import (plugin, Allaerd.org)]], en dat bevalt redelijk. De maker is verdwenen, maar de plugin kan ik kopiëren vanuit een bestaande WordPress-installatie. Toch heeft het beperkingen (oa. kan ik geen taal instellen). Sinds de lente van 2019 speelt import van ''afbeelding-metadata'' een rol, in combinatie met ''productinformatie'', vandaar dat het tijd wordt voor een meer generieke oplossing.
 
Voor WooCommerce-producten gebruik ik tot op heden (lente 2019) [[WooCommerce CSV Import (plugin, Allaerd.org)]], en dat bevalt redelijk. De maker is verdwenen, maar de plugin kan ik kopiëren vanuit een bestaande WordPress-installatie. Toch heeft het beperkingen (oa. kan ik geen taal instellen). Sinds de lente van 2019 speelt import van ''afbeelding-metadata'' een rol, in combinatie met ''productinformatie'', vandaar dat het tijd wordt voor een meer generieke oplossing.

Versie van 8 apr 2019 21:43

Datamodel & productgegevens: Een product is een post. Die staan in tabel posts of wp_posts of zoiets. Ze hebben een post-ID, genaamd ID. Additionele zaken worden bijgehouden in tabel postmeta (of wp_postmeta). Hier zie je hoe voor post 1840 de waardes van additionele velden worden onthouden
Afbeelding-metadata - Velden: Het gaat om de velden URL (bestandsnaam), Title, Caption, Alt text en misschien Description
Datamodel & afbeelding-metadata: De velden Title, Caption en Description worden opgeslagen in tabel wp_posts
Datamodel & afbeelding-metadata: Het veld Alt text wordt opgeslagen in tabel wp_postmeta

Processen die ik vaak doorloop, automatiseer ik graag. Dat maakt die processen herhaalbaar, verifiëerbaar, optimaliseerbaar en schaalbaar. Rondom WordPress heeft dat primair betrekking op import van producten en bijbehorende zaken.

Voor WooCommerce-producten gebruik ik tot op heden (lente 2019) WooCommerce CSV Import (plugin, Allaerd.org), en dat bevalt redelijk. De maker is verdwenen, maar de plugin kan ik kopiëren vanuit een bestaande WordPress-installatie. Toch heeft het beperkingen (oa. kan ik geen taal instellen). Sinds de lente van 2019 speelt import van afbeelding-metadata een rol, in combinatie met productinformatie, vandaar dat het tijd wordt voor een meer generieke oplossing.

Het probleem

Ik wil graag de volgende objecten in WordPress in bulk importeren:

Productgegevens

Hoe kan ik WooCommerce Productgegevens in bulk importeren? En dan zo compleet mogelijk, liefst inclusief taal. Dit mag inclusief afbeeldingen en afbeelding-metadata, maar dat kan ook apart.

Afbeelding-metadata

Als het gaat om optimalisatie van productgegevens, dan speelt optimalisatie van afbeelding-metadata een belangrijke rol. Zie de afbeelding hiernaast voor een overzicht van de betreffende velden. Dit wil ik heel graag automatisch kunnen importeren. De afbeeldingen zelf, kan ik desgewenst handmatig doen, zolang de koppeling met de metadata min-of-meer automatisch gaat.

Posts

Met posts bedoel ik hier 'gewone' pagina's. Deze zijn tot op heden (april 2019) voor mij het minst relevant, al kan het zijn dat ik binnenkort een klus heb, waarbij zo'n 2.500 'gewone' pagina's aangemaakt moeten worden.

Inventaris - Non-plugins (algemeen)

Het ligt voor de hand om te denken in benodigde plugins, maar er is een verbazend grote hoeveelheid aan alternatieve oplossingen beschikbaar, die voor mij ook nog eens veel geschikter vind dan plugins.

Mijn shortlist (april 2019):

  1. REST-API
  2. WP-CLI
  3. Db-niveau

API

WordPress is geschreven in PHP, en vermoedelijk alle functionaliteit is ondergebracht in de bijbehorende API. Dit is waartegen je programmeert als je bv. een plugin schrijft. Waarschijnlijk is dit de krachtigste methode om WordPress naar je hand te zetten, maar het moet wél in PHP. Dit kan zowel in de vorm van zelfgeschreven plugins, als in de vorm van 'stand-alone' scripts.

API-db

Het staat me bij, dat er 'onder' de API nog een laag met commando's is, om te interacteren met de db. Da's vermoedelijk een manier om te interacteren met een WordPress-instantie die iets primitiever is dan via de API. Ook dit gaat in eerste aanleg in PHP.

Db-niveau

Ik vind het altijd aanlokkelijk om dit soort problemen op te lossen door zelf iets te programmeren op db-niveau, omdat ik dan veel controle heb. Keer op keer stuit ik echter op een paar flinke problemen:

  • Complex & tijdrovend: Reverse-engineeren van het datamodel kost veel tijd. Programmeren kost al snel veel tijd, vooral als je te maken krijgt met subrecords, en dat is vaak nogal snel
  • Niet-robuust: Op deze manier ga ik voorbij aan de API met alle checks en controles van dien. Een kleine fout, en ik richt een ravage aan. En als WordPress of een relevante plugin iets verandert aan het datamodel, is dat ook tricky.

En toch: Nadat ik me zo'n 10 uur in REST-API heb verdiept, wordt deze optie alweer een stuk aantrekkelijk: Want ik heb ten minste controle. Met andere manieren moet ik me nogal aanpassen aan de interface, en dat kost veel tijd.

HTTP-API

Geen idee wat dit is → https://codex.wordpress.org/HTTP_API

REST-API

De WordPress REST-API gebruikt JSON en is taalonafhankelijk. Het is bedoeld voor interactie met een site over HTTP. De REST-API is om meerdere redenen een interessante optie:

  • Compleet: Ik heb de indruk dat deze API 'compleet' is. Oftewel: Je kunt er 'alles' mee bepalen rondom WordPress Core. Hetzelfde geldt voor WooCommerce. Vermoedelijk zijn er zat plugins die niet gedekt worden door de REST-API, maar dat is van minder belang
  • Python: Taalonafhankelijk, dus ik kan vanuit Python werken.

Belangrijkste nadelen:

  • Remote: Dit protocol gaat over HTTP en vereist authenticatie. Ook voor een locale ontwikkelsite
  • JSON: Weer een nieuwe taal/protocol om te leren.

WordPress REST-API

XML-RPC

WordPress beschikt over een XML-RPC-interface, een taal-onafhankelijke API. Er bestaan clients in verschillende talen, waaronder Python. In theorie kan ik op deze manier vanuit Python gebruik maken van de API, maar in de praktijk valt dit tegen: De mogelijkheden van de 'core-API' zijn beperkt, en de beschikbaarheid van XML-RPC-API's voor andere plugins (bv. WooCommerce), is beperkt. Zie XML-RPC, WordPress & Python voor details

WP-CLI

WordPress heeft een eigen CLI (command line interface), waar je verbazend veel mee kunt (maar niet alles!). Diverse plugins hebben hun eigen uitbreiding op de CLI.

Mogelijkheden voor bulkimport

  • Posts: Weet ik niet
  • Afbeelding-metadata: Het lijkt erop (april 2019) dat de WP-CLI meerdere oplossingen heeft voor metadata van afbeeldingenWp media import (WP-CLI) & WC-CLI (WordPress)
  • Productgegevens: Het lijkt erop (april 2019) dat WooCommerce' eigen CLI (WC-CLI) goed productgegevens kan importeren, inclusief afbeeldingen en bijbehorende metadata. Het integreert ook goed met mijn bestaande werkwijze, itt. gebruik van plugins → WC-CLI (WordPress)

Voordelen:

  • Eenvoudig
  • Vanuit Bash-scripts, en dat is een manier van werken die ik al jaren hanteer.

Nadelen:

  • Niet compleet: Het lijkt z'n beperkingen te hebben
  • Incomplete documentatie: De documentatie voor WC-CLI (WooCommerce-CLI) lijkt nogal beperkt te zijn

Inventaris - Plugins (WooCommerce productgegevens)

EffectIO WooCommerce Product CSV Import Suite

Product Importer (Visserlabs)

Product Import Export Plugin For WooCommerce (XAdapter)

WooCommerce CSV Importer (Allaerd.org)

Oorsponkelijk was er een gratis en betaalde versie:

Geschiedenis:

  • In april 2017 heb ik de gratis versie gebruikt voor de import van 200 virtuele/downloadable producten. Bevalt prima, behalve dat je al snel moet betalen voor extra functionaliteiten
  • In maart 2018 bleek het bedrijf en de plugins te zijn verdwenen. De site is leeg
  • In maart 2018 deze plugin nog steeds gebruikt, door 'm te kopiëren vanuit een eerdere WordPress-installatie
  • Zie WooCommerce CSV Import (plugin, Allaerd.org) voor details.

WooCommerc Product CSV Import Suite (WooCommerce.com)

Standaard wordt er een simpele import-routine meegeleverd met WooCommerce. Voor het serieusere werk heb je al snel een betaalde versie nodig - Vanaf $25 voor één site.

Woo-product-importer

Simpel & free: https://github.com/dgrundel/woo-product-importer

Ik heb de module getest in april 2017. Helaas lijkt-ie niet te werken:

  • Ik heb het meegeleverde CSV-bestand ge-upload, maar het scherm blijft hangen bij "0 import"
  • Daarna met vereenvoudigd testbestand (zonder afbeelding-URL), maar ook dan blijft-ie hangen.

Deze module komt uit 2014 wordt niet ondersteund: De fabrikant lijkt niet meer te bestaan. Jammer, want het zag er goed uit.

WordPress Ultimate CSV Importer Pro

Gratis en betaalde versies:

WP All Import

Betaalde plugin

Inventaris - Plugins (Afbeelding-metadata)

Dit overzicht is beperkt, omdat ik denk dat WP-CLI betere mogelijkheden kent:

WP All Import

Plugins - Selectie (WooCommerce productgegevens)

Shortlist - April 2017

  1. https://wordpress.org/plugins/woocommerce-csvimport/
  2. https://www.visser.com.au/plugins/product-importer/
  3. https://www.smackcoders.com/wp-ultimate-csv-importer-pro.html

In april 2017 heb ik de gratis versie van woocommerce-csvimport gebruikt. Zie verderop in dit artikel en WooCommerce CSV Import (plugin, Allaerd.org) voor details.

Shortlist - Feb.-apr. 2019

  1. https://wordpress.org/plugins/woocommerce-csvimport/
  2. https://woocommerce.com/products/product-csv-import-suite - Ik vertrouw WooCommerce zelf, eerder dan de bouwers van plugins + dit is vermoedelijk de plugin die Gijs aanbeveelde.

Zie ook

Bronnen

Afbeelding-metadata

Productgegevens