- Trạng thái
- Đã giải quyết
- Được báo cáo cho
- WPML Multilingual CMS 3.3.6
Tổng quan về lỗi
Tiện ích bổ sung Repeater cung cấp một loại trường repeater được thiết kế để chứa các loại trường khác. Để người dùng có thể nhân bản nội dung bên trong một repeater, cần phải thêm một đoạn mã và cẩn thận thêm tên các trường như được mô tả trong phần Giải pháp tạm thời.
Vấn đề này hiện đang tồn tại đối với các loại trường sau:
- hình ảnh
- tệp
- thư viện
- phân loại
- đối tượng bài viết
- liên kết trang
LƯU Ý: Bạn có thể sử dụng đoạn mã được cung cấp cho tất cả các loại trường khác. Điểm khác biệt duy nhất là ở tên của trường. Điều này có nghĩa là bạn có thể sử dụng đoạn mã này để giải quyết các vấn đề về việc nhân bản của cả loại trường repeater và loại trường thông thường.
Bạn có thể tìm thấy các lỗi đã biết cho các loại trường này tại đây
Giải pháp tạm thời
Bạn có thể sử dụng đoạn mã này trong tệp functions.php của mình để việc nhân bản hoạt động bình thường:
function wpml_fix_acf_duplication( $value_to_filter, $target_language, $meta_data ) {
// Field names should be placed into following array.
$fields = array(
'taxonomy_field' => 'some_taxonomy_name',
'repeater_field_0_repeater_taxonomy_field' => 'some_other_taxonomy_name',
'repeater_field_1_repeater_taxonomy_field' => 'some_other_taxonomy_name',
'repeater_field_0_repeater_child_0_repeater_child_taxonomy_field' => 'some_other_taxonomy_name',
'repeater_field_0_repeater_child_1_repeater_child_taxonomy_field' => 'some_other_taxonomy_name',
'repeater_field_1_repeater_child_0_repeater_child_taxonomy_field' => 'some_other_taxonomy_name',
'repeater_field_1_repeater_child_1_repeater_child_taxonomy_field' => 'some_other_taxonomy_name'
);
if ( array_key_exists( $meta_data['key'], $fields ) ) {
$value = maybe_unserialize( $value_to_filter );
if ( is_array( $value ) ) {
// If custom field value contain array of IDs to translate, usually used for gallery and taxonomy field types.
$translated_ids = array();
foreach ( $value as $v ) {
$translated_ids[] = apply_filters( 'wpml_object_id', $v, $fields[ $meta_data['key'] ], true, $target_language );
}
return maybe_serialize( $translated_ids );
} else {
// If custom field value contain single ID to translate, usually used for image and file field types.
$translated_id = apply_filters( 'wpml_object_id', $value, $fields[ $meta_data['key'] ], true, $target_language );
return $translated_id;
}
}
return $value_to_filter;
}
add_filter( 'wpml_duplicate_generic_string', 'wpml_fix_acf_duplication', 999, 3 );
Xin lưu ý rằng bạn nên thay thế tên các trường (‘taxonomy_field’, ‘repeater_field_0_repeater_taxonomy_field’, v.v.) bằng tên các trường trên trang web của bạn. Sử dụng các bước sau để thực hiện việc này.
Trong ví dụ trên, chúng ta có các thành phần sau trong nhóm trường của mình:
– Một trường phân loại
– Một trường repeater với một trường phân loại và một trường repeater “con” khác có trường phân loại riêng.
Điều này có nghĩa là cấu trúc lồng nhau trông như thế này:
Taxonomy
Repeater {
Taxonomy
Repeater Child {
Taxonomy
}
}
Điều này có nghĩa là bạn cần thiết lập các trường theo nhu cầu của mình, giống như chúng tôi đã làm trong ví dụ hiển thị ở hình ảnh sau.
Khi bạn chỉnh sửa bài viết, trang hoặc bất kỳ loại nội dung nào bạn đang sử dụng cùng với các trường tùy chỉnh của mình, bạn sẽ thấy các trường đó hoạt động. Hình ảnh sau cho thấy điều này trông như thế nào trong ví dụ của chúng tôi:
LƯU Ý: Bạn nên thay thế các cặp key =>; value của mảng bằng các giá trị thích hợp.
Thay thế các khóa của mảng:
Nếu bạn nhìn kỹ vào tên các trường của chúng tôi đóng vai trò là khóa, bạn sẽ nhận thấy rằng các trường được lập chỉ mục từ 0.
Điều đó có nghĩa là repeater đầu tiên của bạn là 0, thứ hai là 1 và cứ tiếp tục như vậy. Các số repeater đó được phân tách bằng dấu gạch dưới với các loại trường con khác bằng _0_, _1_, _2_…
Ví dụ: tên của trường phân loại trong repeater đầu tiên của chúng tôi là 'repeater_field_0_repeater_taxonomy_field' và đó là tên chúng tôi sẽ đặt trong mảng đoạn mã ở trên. Hãy đảm bảo bạn tập trung vào ba điều sau:
- Bên trong một mảng, dưới dạng các khóa, hãy đặt mọi trường bạn đang sử dụng và đảm bảo nó thuộc một trong các loại được liệt kê bên dưới
- Tên của trường được định dạng đúng
- Tên của trường được thêm riêng cho từng hàng repeater, nghĩa là nếu bạn có 10 tên hàng repeater, nó sẽ như sau: 'repeater_field_0_some_custom_field', 'repeater_field_1_some_custom_field', 'repeater_field_2_some_custom_field' … cho đến 'repeater_field_9_some_custom_field'.
Thay thế các giá trị như: ‘some_taxonomy_name’, ‘some_other_taxonomy_name’, v.v. cho phù hợp. Đây là loại phần tử mà ID thuộc về. Có thể là post, page, attachment, {custom post type key}, nav_menu, nav_menu_item, category, post_tag, {custom taxonomy key}
Để biết thêm chi tiết, vui lòng xem tài liệu về hook của chúng tôi tại đây.


