WPML
สถานะ
แก้ไขแล้ว
รายงานสำหรับ
WPML Multilingual CMS 3.3.6

ภาพรวมของปัญหา

ส่วนเสริม Repeater มีประเภทฟิลด์ repeater ที่ออกแบบมาเพื่อบรรจุประเภทฟิลด์อื่น ๆ เพื่อให้ผู้ใช้สามารถทำสำเนาเนื้อหาภายใน repeater ได้ จำเป็นต้องเพิ่มข้อมูลโค้ดและเพิ่มชื่อฟิลด์อย่างระมัดระวังตามที่อธิบายไว้ในส่วนวิธีแก้ปัญหาชั่วคราว

ปัญหานี้มีอยู่ในประเภทฟิลด์ต่อไปนี้:

- รูปภาพ

- ไฟล์

- แกลเลอรี

- อนุกรมวิธาน

- ออบเจ็กต์โพสต์

- ลิงก์หน้า

หมายเหตุ: คุณสามารถใช้ข้อมูลโค้ดที่ให้มาสำหรับประเภทฟิลด์อื่น ๆ ทั้งหมดได้ ข้อแตกต่างเพียงอย่างเดียวคือชื่อของฟิลด์ ซึ่งหมายความว่าคุณสามารถใช้ข้อมูลโค้ดนี้เพื่อแก้ไขปัญหาเกี่ยวกับการทำสำเนาทั้งประเภทฟิลด์ repeater และประเภทฟิลด์ปกติได้

คุณสามารถดูรายการข้อผิดพลาดสำหรับประเภทฟิลด์เหล่านี้ได้ที่นี่

วิธีแก้ปัญหาชั่วคราว

คุณสามารถใช้ข้อมูลโค้ดนี้ในไฟล์ functions.php ของคุณ เพื่อให้การทำซ้ำทำงานได้อย่างถูกต้อง:

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

โปรดทราบว่าคุณควรแทนที่ชื่อฟิลด์ ('taxonomy_field’, ‘repeater_field_0_repeater_taxonomy_field’ ฯลฯ) ด้วยชื่อฟิลด์ในเว็บไซต์ของคุณ ใช้ขั้นตอนต่อไปนี้เพื่อดำเนินการดังกล่าว

ในตัวอย่างข้างต้น เรามีสิ่งต่อไปนี้ในกลุ่มฟิลด์ของเรา:

– ฟิลด์อนุกรมวิธาน 1 ฟิลด์

– ฟิลด์ repeater 1 ฟิลด์ที่มีฟิลด์อนุกรมวิธานและฟิลด์ repeater “รอง” อีกหนึ่งฟิลด์ที่มีฟิลด์อนุกรมวิธานของตัวเอง

ซึ่งหมายความว่าการซ้อนกันจะมีลักษณะดังนี้:

Taxonomy
Repeater {
         Taxonomy
         Repeater Child { 
                        Taxonomy 
         }
}

ซึ่งหมายความว่าคุณต้องตั้งค่าฟิลด์ตามความต้องการของคุณ ดังที่เราได้ทำในตัวอย่างที่แสดงในภาพต่อไปนี้

image04

เมื่อคุณแก้ไขโพสต์ หน้า หรือประเภทโพสต์ใดก็ตามที่คุณใช้ฟิลด์กำหนดเอง คุณจะเห็นฟิลด์เหล่านั้นทำงาน ภาพต่อไปนี้แสดงให้เห็นว่ามีลักษณะอย่างไรในตัวอย่างของเรา:

image03

หมายเหตุ: คุณควรแทนที่คู่ key =>; value ของอาร์เรย์ด้วยค่าที่เหมาะสม

แทนที่ keys ของอาร์เรย์:

หากคุณสังเกตชื่อฟิลด์ของเราที่เป็นคีย์อย่างละเอียด คุณจะสังเกตเห็นว่าฟิลด์ได้รับการจัดทำดัชนีโดยเริ่มจาก 0

นั่นหมายความว่า repeater แรกของคุณคือ 0 ตัวที่สองคือ 1 และต่อไปเรื่อย ๆ หมายเลข repeater เหล่านั้นจะถูกแยกออกจากประเภทฟิลด์รองอื่น ๆ ด้วยขีดล่างเป็น _0_, _1_, _2_

ตัวอย่างเช่น ชื่อของฟิลด์อนุกรมวิธานภายใน repeater แรกของเราคือ 'repeater_field_0_repeater_taxonomy_field' และนั่นคือชื่อที่เราจะใส่ในอาร์เรย์ข้อมูลโค้ดด้านบน ตรวจสอบให้แน่ใจว่าคุณมุ่งเน้นไปที่สามสิ่งนี้:


  1. ภายในอาร์เรย์ ให้ใส่ทุกฟิลด์ที่คุณใช้เป็นคีย์ และตรวจสอบให้แน่ใจว่าเป็นหนึ่งในประเภทที่ระบุไว้ด้านล่าง

  2. ชื่อของฟิลด์ได้รับการจัดรูปแบบอย่างถูกต้อง

  3. ชื่อของฟิลด์ถูกเพิ่มสำหรับทุกแถว repeater แยกกัน เช่น หากคุณมีชื่อแถว repeater 10 แถว จะเป็นดังนี้: 'repeater_field_0_some_custom_field', 'repeater_field_1_some_custom_field', 'repeater_field_2_some_custom_field' … ไปจนถึง 'repeater_field_9_some_custom_field'
นอกจากนี้ คุณสามารถค้นหาชื่อฟิลด์ทั้งหมดที่อยู่ใน “การตั้งค่าเนื้อหาหลายภาษา” ได้หากคุณดูใต้ฟิลด์ Advanced Custom Fields และเครื่องมือแก้ไข WYSIWYG ของคุณหลังจากบันทึกโพสต์แล้ว ดังที่แสดงในภาพต่อไปนี้

image05

แทนที่ values เช่น: ‘some_taxonomy_name’, ‘some_other_taxonomy_name’ ฯลฯ ตามความเหมาะสม นี่คือประเภทขององค์ประกอบที่ ID สังกัดอยู่ ซึ่งสามารถเป็น post, page, attachment, {custom post type key}, nav_menu, nav_menu_item, category, post_tag, {custom taxonomy key}

สำหรับข้อมูลเพิ่มเติม โปรดดูเอกสารประกอบเกี่ยวกับฮุกของเราที่นี่

ปัญหาที่ทราบแล้วทั้งหมด →