WPML
Trạng thái
Đã giải quyết
Đã giải quyết trong
WooCommerce Multilingual & Multicurrency 5.5.2
Thẻ chủ đề
WCML

Tổng quan về lỗi

Nếu bạn có các sản phẩm đã được dịch trước đó bằng Trình biên tập dịch thuật cổ điển (CTE) và sau đó cập nhật cài đặt WPML để sử dụng ATE (chỉ dành cho các bản dịch mới), việc chỉnh sửa những sản phẩm đã dịch trước đó sẽ mở nhầm chúng trong ATE thay vì CTE.

(Điều này đặc biệt ảnh hưởng đến Sản phẩm chứ không phải các loại bài viết khác.)

Giải pháp tạm thời

Vấn đề phát sinh do thông tin về trình biên tập nào đã được sử dụng bị lưu sai cho các sản phẩm.

Một phần của giải pháp là khắc phục điều đó, để khi dịch các sản phẩm qua CTE, hệ thống ghi lại chính xác trình biên tập dịch thuật để sản phẩm sẽ mở trong trình biên tập chính xác vào lần tới.

Nhưng chúng ta cũng phải sửa toàn bộ dữ liệu hiện có ghi sai trình biên tập cho các sản phẩm đã được chỉnh sửa bằng CTE.

Hãy giải quyết phần thứ hai đó trước, để làm điều này chúng ta cần chạy truy vấn SQL tùy chỉnh sau:

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';

Nếu cơ sở dữ liệu của bạn sử dụng tiền tố khác với `wp_` cho các bảng thì bạn sẽ cần điều chỉnh chúng (có bốn lần đề cập đến `wp_icl_` ở trên).

Bạn có thể chạy truy vấn như vậy bằng phpMyAdmin hoặc qua một plugin Adminer.

Sau đó, để đảm bảo chi tiết trình biên tập được lưu chính xác về sau, bạn cần thêm đoạn mã sau (thông qua một plugin code snippet hoặc vào tệp functions.php của giao diện):

/**
 * 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;
});

Tất cả các lỗi đã ghi nhận →