- Статус
- Решено
- Решено в
- WooCommerce Multilingual & Multicurrency 5.5.2
- Теги темы
- WCML
Обзор проблемы
Если у Вас есть товары, ранее переведенные с помощью Классического редактора переводов (CTE), и затем Вы обновите настройки WPML для использования ATE (только для новых переводов), при изменении этих ранее переведенных товаров они будут ошибочно открываться в ATE вместо CTE.
(Это касается именно товаров, а не других типов записей.)
Обходное решение
Проблема возникает из-за того, что данные о том, какой редактор использовался, сохраняются для товаров неверно.
Часть решения заключается в исправлении этой ситуации, чтобы при переводе товаров через CTE правильно фиксировался редактор переводов, и в следующий раз они открывались в нужном редакторе.
Но нам также необходимо исправить все существующие данные, в которых указан неверный редактор для товаров, уже отредактированных с помощью CTE.
Давайте сначала займёмся второй частью, для которой нам нужно выполнить этот пользовательский SQL-запрос:
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';
Если в Вашей базе данных для таблиц используется префикс, отличный от `wp_`, то их нужно будет скорректировать (выше есть четыре упоминания `wp_icl_`).
Вы можете выполнить такой запрос с помощью phpMyAdmin или через плагин Adminer.
Затем, чтобы в дальнейшем данные о редакторе сохранялись корректно, Вам необходимо добавить следующее (с помощью плагина для сниппетов кода или в файл functions.php темы оформления):
/**
* 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;
});