WooCommerce bringt eine REST-API mit, über die beispielsweise Produkte angelegt werden können. Hier zeige ich, wie genau das funktioniert.
PHP-Bibliothek für die REST-API von WooCommerce installieren und initialisieren
Es gibt offizielle Bibliotheken für die WooCommerce-REST-API, wodurch sie sich neben cURL
mit Node.js, PHP, Python und Ruby nutzen lässt. Hier zeige ich die Verwendung mit der PHP-Bibliothek von Automattic. Dazu müssen wir diese erst mal installieren, was über Composer recht schnell erledigt ist (ich setze hier voraus, dass Composer für das Projekt bereits installiert ist):
Code-Sprache: Bash (bash)composer require automattic/woocommerce
Anschließend binden wir sie ein, damit wir sie nutzen können:
// Load Composer autoloader.
// @link https://github.com/brightnucleus/jasper-client/blob/master/tests/bootstrap.php#L55-L59
$autoloader = dirname( __FILE__ ) . '/vendor/autoload.php';
if ( is_readable( $autoloader ) ) {
require_once $autoloader;
}
use Automattic\WooCommerce\Client;
$woocommerce = new Client(
'https://shop.local',
'the_consumer_key',
'the_consumer_secret',
[
'wp_api' => true,
'version' => 'wc/v2',
]
);
Code-Sprache: PHP (php)
Dazu laden wir zunächst den Autoloader von Composer, falls er vorhanden ist (wenn das Plugin oder ähnliches Teil eines größeren über Composer verwalteten Projekts wäre, würde für dieses Unterprojekt kein eigener Autoloader erstellt, sondern alles in den Autoloader des Oberprojekts gepackt), und nutzen das use
-Statement um einfacher auf die Client
-Klasse zugreifen zu können. Danach erstellen wir ein Objekt von Client
und speichern es in der $woocommerce
-Variable. Als Parameter übergeben wir:
- die URL des Shops.
- den Consumer-Key.
- den Consumer-Secret.
- ein Array mit weiteren Optionen, in unserem Fall:
- die Erlaubnis, Requests an die neue WP-REST-API-Integration zu machen, die es ab WooCommerce 2.6 gibt.
- die Version der API.
Consumer-Secret und -Key könnt ihr euch im WordPress-Backend unter WooCommerce › Einstellungen › API › Schlüssel/Apps generieren lassen.
Produkt über die REST-API erstellen
Kommen wir nun zum Anlegen eines Produkts:
$prod_data = [
'name' => 'Ein tolles Produkt',
'type' => 'simple',
'regular_price' => '15.00',
'description' => 'Eine sehr vielsagende Produkt-Beschreibung.',
'images' => [
[
'src' => 'https://shop.local/pfad/zum/bild.jpg',
'position' => 0,
],
],
'categories' => [
[
'id' => 1,
],
],
];
$woocommerce->post( 'products', $prod_data );
Code-Sprache: PHP (php)
Mit diesem Code wird ein einfaches Produkt mit dem Titel Ein tolles Produkt, einer vielsagenden Beschreibung und einem Bild zum Preis von 15,00 Euro (oder was als Währung des Shops anderes eingestellt ist) in der Kategorie mit der ID 1
angelegt.
Alle für ein Produkt verfügbaren Optionen findet ihr in der Dokumentation.
In meinem Beispiel mit fest reingeschriebenen Daten ist das natürlich etwas witzlos, aber in der Art ließen sich beispielsweise Produkte, die ihr als Export von irgendwoher in einem brauchbaren Format vorliegen habt, relativ problemlos durchlaufen und in den Shop einfügen.
Könnte ich dann auch Produkte von einer Seite XY nehmen und dann diese in Woocommerce auffüllen, aber so, dass die Produktdaten nicht in die Woocommerce Tabelle kommen, sondern einfach von der Datei XY genommen werden?
Hi Mahsun,
nein, wenn du Produkte in WooCommerce anlegst, sind die dann auch in der Tabelle. Vielleicht ist es theoretisch irgendwie möglich, da die Datenbasis zu ändern, aber ich vermute mal das wäre ziemlich aufwendig.
Viele Grüße
Florian
Bei mir dauert das Posten von 2000 Produkten rund 10 Stunden. Auch auf Servern mit SSD dauerte gut 6. Das kann doch nicht deren ernst sein?! Hast du ne Idee?
Hi,
wen meinst du mit »deren«? Wie lange es dauert, hängt ja von dem Skript ab. Führst du Requests parallel aus, oder alle hintereinander?
Florian
Hi, ich habe auch das Problem mit der Geschwindigkeit 🙁 Das Updaten eines Produkte (nur stock senden) dauert 2 Sekunden bis ich eine Antwort hab, klingt wenig ist aber viel auf die Masse gesehen.
Das Anlegen von Produkten dauert auch locker 6+ Stunden. Wir erstellen die Artikel hintereinander, werden mal parallel versuchen.