Ankerlink an den Anfang der Seite
foto von tezos
Generic filters
Filter by Kategorien

Der Beitrag, geschriebem am 15. Juni 2022, ist schon etwas älter und könnte womöglich nicht mehr aktuell sein

Beim Anlegen eines Produkt in einer mehrsprachigen Multisite-Umgebung sollen beim Speichern eines neuen Produktes gleich auch die Produkte in den anderen Sprachen mit angelegt werden. Das eindeutige Erkennungszeichen jedes Produkts ist die Artikelnummer (SKU). Gibt es die SKU bereits in der anderen Sprache, wird das Produkt nur upgedated, ansonsten neu angelegt und sprachlich verknüpft.

SKU ist ein Wert in den Postmeta-Daten, und dort als Key Value Pair abgelegt. Die Artikelnummer kann also auch einfach als add_post_meta( $id, '_sku', {Artikelnummer}); angelegt werden (würde man meinen). Über die Funktion wc_get_product_id_by_sku( $sku ); käme man dann an die ID des Produkts…

Ja, also – NEIN. So schön die Abhandlung darüber war, die ich gelesen hatte, wie man mit wp_insert_post() auf programmatischem Weg Produkte erzeugt – als Ergebnis bekam ich mit dieser Methode immer auch ein Schattenprodukt. Dieses hatte zwar die richtige Artikelnummer, war aber falsch zugeordnet, und die Syncronisierung war unvollständig. Auch wenn bereits eine Übersetzung mit korrekter SKU vorhanden war (und dann das Produkt ja gar nicht mehr neu erzeugt hätte werden sollen), bekam ich beim nächsten Speichern ein weiteres neues Produkt. Und dann noch eins. Und alle hatten dieselbe Artikelnummer.

$p_id = wc_get_product_id_by_sku( $sku );

Nur wenn hier keine ID ermittelt werden kann, sollte ein neues Produkt generiert werden. Das funktionierte offenbar nicht zuverlässig, wenn ein Produkt mit wp_insert_post() erzeugt worden war. Nachdem ich neue Produkte new WC_Product() – Objekt anlegte, funktionierte es auch genau so. Gab es das Produkt in einer anderen Sprache, und es änderten sich nur Daten, wurde es in allen Sprachen upgedated, ansonsten neu erzeugt.

if ( !$p_id ) {
	$new_product = new WC_Product();
	$new_product->set_name($product_title);
	$new_product->set_status('private');
	$new_product->set_sku($sku);
	$new_product->set_slug($product_slug);
	$p_id = $new_product->save();
}

Bitte das Kommentarfeld nicht für Supportanfragen nutzen; hier kann kein Support angeboten werden. Die Angabe von Name oder E-Mail-Adresse ist optional, ein Spitzname wäre trotzdem nett.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Hinweis: Name und E-Mail-Adresse (beides optional, da alle Kommentare moderiert werden) werden dauerhaft gespeichert. Über dieses Formular kann jeder Zeit die Löschung persönlicher Daten oder Kommentare angefordert werden; die Anfrage wird nicht veröffentlicht und nach der Bearbeitung gelöscht. IP-Adressen, die mit Kommentaren gespeichert werden, werden nach zwei Monaten automatisch gelöscht.

Ihre Nachricht wird möglicherweise zur Spam-Prüfung an OpenAI (USA) weitergeleitet. Weitere Informationen finden Sie in unserer Datenschutzerklärung.