WPML
Status
Gelöst
Gelöst in
WooCommerce Multilingual & Multicurrency 5.5.2
Themen-Tags
WCML

Übersicht über das Problem

Wenn Sie Produkte haben, die zuvor mit dem Klassischen Übersetzungs-Editor (CTE) übersetzt wurden, und Sie dann Ihre WPML-Einstellungen aktualisieren, um ATE (nur für neue Übersetzungen) zu verwenden, werden diese zuvor übersetzten Produkte beim Bearbeiten fälschlicherweise in ATE statt in CTE geöffnet.

(Dies betrifft speziell Produkte und keine anderen Beitragstypen.)

Problemumgehung

Das Problem tritt auf, da die Details darüber, welcher Editor verwendet wurde, für Produkte falsch gespeichert werden.

Ein Teil der Lösung besteht darin, dies zu beheben, sodass beim Übersetzen von Produkten über den CTE der Übersetzungs-Editor korrekt erfasst wird, damit diese beim nächsten Mal im richtigen Editor geöffnet werden.

Wir müssen jedoch auch alle vorhandenen Daten korrigieren, die den falschen Editor für Produkte erfassen, die bereits mit dem CTE bearbeitet wurden.

Gehen wir zunächst diesen zweiten Teil an, wofür wir diese benutzerdefinierte SQL-Abfrage ausführen müssen:

UPDATE wp_icl_translate_job AS job
JOIN (
    SELECT job.job_id
    FROM wp_icl_translate_job AS job
    LEFT JOIN wp_icl_translation_status AS status ON job.rid = status.rid
    LEFT JOIN wp_icl_translations AS translations ON status.translation_id = translations.translation_id
    WHERE translations.element_type = 'post_product'
) AS derived
ON job.job_id = derived.job_id
SET job.editor = 'wpml'
WHERE job.editor = 'wp';

Wenn Ihre Datenbank ein anderes Präfix als `wp_` für die Tabellen verwendet, müssen diese angepasst werden (es gibt oben vier Erwähnungen von `wp_icl_`).

Sie können eine solche Abfrage mit phpMyAdmin oder über ein Adminer-Plugin ausführen.

Um sicherzustellen, dass die Editor-Details in Zukunft korrekt gespeichert werden, müssen Sie anschließend Folgendes hinzufügen (über ein Code-Snippet-Plugin oder in der Datei functions.php des Themes):

/**
 * WPMLSUPP-12927: Temporary fix to correctly record CTE editor for products
 */
add_filter( 'wpml_translation_editor_save_job_data', function( $data ){

	if ( $data['job_post_type'] == "post_product" ) {

		add_action( 'wpml_save_job_fields_from_post', function( $job_id ){

			wpml_tm_load_old_jobs_editor()->set( $job_id, 'wpml' );
		});
	}

	return $data;
});

Alle bekannten Probleme →