WPML
状态
已解决
解决于
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;
});

所有已知问题 →