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