WooCommerce Preise in allen WPML-Sprachen in Masse bearbeiten (und Polylang)
Sie senken hundert Preise im Bulk-Editor, prüfen den Shop auf Englisch und sehen die neuen Preise, wechseln dann zu Deutsch und sehen die alten. Mit WPML braucht es, um WooCommerce-Preise in allen Sprachen in Masse zu bearbeiten, einen Schritt mehr als in einem einsprachigen Shop, denn jede Übersetzung eines Produkts ist ein eigenes Produkt. Diese Seite erklärt, welche Sprache BEAR bearbeitet, wie die Preise mit einem einzigen Filter an jede Übersetzung weitergegeben werden, wie Sie dasselbe für Lagerbestand, Gewicht und andere Felder erreichen und was Sie bewusst pro Sprache bearbeiten sollten.
So arbeitet BEAR mit WPML: eine Sprache nach der anderen
WPML speichert ein übersetztes Produkt nicht im Original. Es legt ein zweites WooCommerce-Produkt mit eigener ID, eigenen Preisen, eigenem Lagerbestand und eigenen Metadaten an und verknüpft beide in einer Übersetzungsgruppe. BEAR sieht diese Produkte so, wie WooCommerce sie sieht. Daraus folgt:
- Der Produkteditor (Products Editor) listet die Produkte der Sprache auf, die im Sprachumschalter von WPML oben im Admin-Bildschirm gewählt ist. Wechseln Sie dort die Sprache, und der Editor zeigt die Produkte dieser Sprache.
- Der Filter (Filters)-Tab, der Massenbearbeitung (Bulk Edit)-Tab und der Export arbeiten mit den aufgelisteten Produkten, also mit einer Sprache. Ein Massenlauf auf Englisch ändert nur die englischen Produkte.
- BEAR schreibt in das Produkt, das Sie bearbeiten, und in nichts anderes. Das Kopieren von Feldern in Übersetzungen durch WPML ist darauf ausgelegt, dass das Original auf dem Bildschirm zum Bearbeiten des Produkts gespeichert wird, und ein Schreibvorgang aus dem Bulk-Editor löst es nicht zuverlässig aus. Verlassen Sie sich bei einer katalogweiten Änderung nicht darauf.
Wählen Sie vor dem Start eine bestimmte Sprache im Umschalter und prüfen Sie vor jedem Massenlauf, in welcher Sprache Sie sich befinden. Der Hinweis zur WPML-Kompatibilität nennt dieselbe Regel: Die Produkte jeder Sprache werden getrennt in Masse bearbeitet. Die beiden folgenden Abschnitte zeigen, wie eine Änderung trotzdem die anderen Sprachen erreicht.
WooCommerce-Preise in allen WPML-Sprachen mit woobe_wpml_sync_prices synchronisieren
Für Preise hat BEAR einen eingebauten Schalter. Fügen Sie diesen Filter hinzu:
/*
* BEAR + WPML: write regular and sale prices to all translations.
* Child theme functions.php or a code snippets plugin.
*/
add_filter( 'woobe_wpml_sync_prices', '__return_true' );
Ab dann schreibt BEAR jedes Mal, wenn es einen regulären Preis über null oder einen Angebotspreis in ein Produkt schreibt, denselben Wert in die Übersetzungen dieses Produkts in jeder WPML-Sprache. Es spielt keine Rolle, wie der Preis geschrieben wurde: in eine Zelle getippt, mit dem Preisrechner gesetzt, im Massenbearbeitung-Tab per Wert oder Prozent geändert oder durch ein Zurücksetzen im Verlauf (History)-Tab wiederhergestellt. Variationen sind ebenfalls abgedeckt: Der Preis einer Variation geht an die übersetzten Variationen. Auch das Entfernen eines Angebotspreises mit -1, wie in Angebotspreise in Masse entfernen beschrieben, leert ihn in den Übersetzungen.
Drei Dinge sollten Sie wissen, bevor Sie sich darauf verlassen:
- Dieselbe Zahl wird in jede Sprache geschrieben. Das ist richtig, wenn alle Sprachen in derselben Währung verkaufen. Soll eine Sprache einen eigenen Preis haben, lassen Sie den Filter ausgeschaltet und bearbeiten Sie diese Sprache separat.
- Angebotsdaten gehören nicht dazu. Ein in die Übersetzungen kopierter Angebotspreis ohne Angebotszeitraum von (Sale time from) und Angebotszeitraum bis (Sale time to) ist in diesen Sprachen sofort aktiv. Setzen Sie die Daten entweder in jeder Sprache oder kopieren Sie sie mit dem Snippet im nächsten Abschnitt.
- Nur Änderungen, die nach dem Hinzufügen des Filters erfolgen, werden kopiert. Preise, die bereits voneinander abweichen, bleiben bis zum nächsten Schreibvorgang unverändert.
Der Filter ist zusammen mit den anderen Schaltern auf Code-Ebene unter Weitere Einstellungen (implizit) aufgeführt.
Lagerbestand, Gewicht, Maße und andere Felder in Übersetzungen kopieren
Jedes Feld, das BEAR schreibt, endet mit der Action woobe_after_update_page_field, die Produkt-ID, Produktobjekt, Feldschlüssel, Wert und Feldtyp erhält. Eine kleine daran gehängte Funktion kann die Änderung in jeder Übersetzung wiederholen. Diese hier kopiert Lagerbestand, Versanddaten, Steuerklasse und Angebotsdaten:
/*
* BEAR + WPML: copy chosen product fields from the edited product
* to its translations in all languages.
* Child theme functions.php or a code snippets plugin.
*/
add_action( 'woobe_after_update_page_field', function ( $product_id, $product, $field_key, $value, $field_type ) {
// BEAR field keys to copy; each one is a WooCommerce product property
$copy = array(
'stock_quantity', 'stock_status', 'manage_stock', 'backorders',
'weight', 'length', 'width', 'height', 'tax_class',
'date_on_sale_from', 'date_on_sale_to',
);
if ( ! in_array( $field_key, $copy, true ) || ! defined( 'ICL_SITEPRESS_VERSION' ) ) {
return;
}
$source = wc_get_product( $product_id );
if ( ! $source ) {
return;
}
$getter = 'get_' . $field_key;
$setter = 'set_' . $field_key;
$new = $source->$getter( 'edit' );
$type = get_post_type( $product_id ); // product or product_variation
foreach ( (array) apply_filters( 'wpml_active_languages', null ) as $code => $language ) {
$translation_id = (int) apply_filters( 'wpml_object_id', $product_id, $type, false, $code );
if ( ! $translation_id || $translation_id === (int) $product_id ) {
continue;
}
$translation = wc_get_product( $translation_id );
if ( $translation ) {
$translation->$setter( $new );
$translation->save();
}
}
}, 10, 5 );
So nutzen Sie sie richtig:
- Bearbeiten Sie zuerst ein Produkt im Editor und sehen Sie sich seine Übersetzung an. Ist der Wert angekommen, führen Sie die Massenbearbeitung aus.
- Die Funktion kopiert aus der Sprache, die Sie bearbeiten, in alle anderen. Führen Sie diese Änderungen in Ihrer Hauptsprache durch und behandeln Sie sie als Quelle.
- Sie läuft bei jedem Schreibvorgang, der über BEAR geht, auch bei Zurücksetzungen im Verlauf; das Zurücksetzen des Originals stellt also auch die Übersetzungen wieder her.
- Fügen Sie Schlüssel in der Liste
$copyhinzu oder entfernen Sie welche, je nach Bedarf. Lassen Sie Textfelder (Titel, Beschreibungen, Slug) heraus: Dafür gibt es die Übersetzungen. - Die SKU ist absichtlich ausgelassen. WooCommerce lehnt eine SKU ab, die ein anderes Produkt bereits verwendet, daher kann das Kopieren fehlschlagen, je nachdem, wie Ihr WPML-Setup
_skubehandelt. Setzen Sie SKUs pro Sprache oder prüfen Sie zuerst dieses Setup.
Wenn WooCommerce Multilingual in Ihrem Shop den Lagerbestand zwischen Übersetzungen bereits abgleicht, ist das Kopieren der Lagerfelder unschädlich: Dieselbe Zahl wird zweimal geschrieben. Die Massenbearbeitung des Lagerbestands selbst behandelt BEAR als WooCommerce-Lagerverwaltung.
Was Sie in jeder Sprache bearbeiten sollten
Titel, Beschreibungen, Kurzbeschreibungen, Slugs, Kaufhinweise und alles andere, das in Worten geschrieben ist, gehört zu einer Sprache. Bearbeiten Sie es pro Sprache: Wechseln Sie die Sprache in der Admin-Leiste, filtern Sie und führen Sie die Massenbearbeitung aus. Wiederholen Sie das für die nächste Sprache.
Filter arbeiten mit den Werten, die in den Produkten der aktuellen Sprache gespeichert sind. Kategorien, Schlagwörter und Attributbegriffe sind ebenfalls übersetzt, ein auf Englisch aufgebauter Filter verweist also auf englische Begriffe; bauen Sie ihn nach dem Wechsel neu auf. Ein Filter nach einem Meta-Feld findet nur Übersetzungen, die diesen Wert selbst enthalten, sodass ein Feld, das WPML nicht kopiert, in einer Übersetzung leer sein kann und der Filter dort nichts findet. Felder, bei denen WPML auf Kopieren eingestellt ist, ändern Sie am besten in der Originalsprache, damit der nächste Speichervorgang auf der Seite von WPML den alten Wert nicht zurückbringt.
Haben nur wenige Produkte eine Änderung verpasst, öffnen Sie das Original im WooCommerce-Produkteditor und klicken Sie auf Aktualisieren (Update); dann führt WPML sein eigenes Kopieren für dieses Produkt aus. Für einen Katalog verwenden Sie den Filter oder das Snippet oben.
Neue und duplizierte Produkte
Die Schaltfläche Neues Produkt (New Product) des Editors legt im Hintergrund über die eigene Produkt-API von WooCommerce Entwürfe mit dem Namen Neues Produkt an. WPML weist ihnen eine Sprache zu, wie bei jedem auf diese Weise erstellten Beitrag, normalerweise die in der Admin-Leiste gewählte Sprache. Wechseln Sie vor dem Anlegen zur gewünschten Sprache und prüfen Sie danach die Sprache der neuen Entwürfe; korrigieren Sie jeden Ausreißer in WPML.
Das Duplizieren von Produkten im Editor nutzt die Duplizierfunktion von WooCommerce und löst dieselbe Action woocommerce_product_duplicate aus wie der Link Duplizieren im Bildschirm Produkte. Übersetzungs-Plugins, die auch die Übersetzungen eines duplizierten Produkts kopieren, tun das bei dieser Action, sodass ein Duplikat zusammen mit Kopien in den anderen Sprachen entstehen kann. Laden Sie den Editor neu, um den endgültigen Stand zu sehen, und prüfen Sie die Kategorien der Kopie jeder Sprache.
Polylang
BEAR enthält keinen Polylang-spezifischen Code. Es bearbeitet das Produkt, das Sie sehen; ob eine Änderung die Übersetzungen erreicht, hängt von der Synchronisierung von Polylang for WooCommerce ab, die auf einen Massenschreibvorgang so reagieren kann oder nicht, wie sie auf den Bildschirm zum Bearbeiten des Produkts reagiert. Testen Sie es vor einem Massenlauf an einem Produkt, und wenn die Übersetzungen nicht folgen, bearbeiten Sie jede Sprache separat. Dasselbe gilt für Duplikate: BEAR kopiert die benutzerdefinierten Taxonomien eines Duplikats, lässt aber Sprache und Übersetzungsverknüpfungen von Polylang unberührt, sodass Sprache und Kategorien der Kopien von Polylang stammen. Prüfen Sie beides nach dem Duplizieren.
Checkliste für die mehrsprachige Massenbearbeitung
- Der Sprachumschalter zeigt die Sprache, die Sie bearbeiten wollen, nicht die, die Sie zuletzt benutzt haben.
- Preise:
woobe_wpml_sync_pricesist eingeschaltet, wenn jede Sprache denselben Preis bekommen soll, und ausgeschaltet, wenn sie sich unterscheiden. - Angebotsdaten, Lagerbestand, Gewicht und Maße: vom Snippet kopiert oder in jeder Sprache bearbeitet.
- Textfelder: pro Sprache bearbeitet, nie kopiert.
- Ein Produkt getestet und seine Übersetzung geprüft, bevor der Massenlauf startet; der Verlauf ist geöffnet, um bei einem falschen Ergebnis zurückzusetzen.
Folgen die Übersetzungen einer Änderung weiterhin nicht, eröffnen Sie ein Thema im BEAR-Support-Forum mit Ihren Versionen von WPML und WooCommerce Multilingual, dem bearbeiteten Feld und dem, was das übersetzte Produkt danach zeigt.