WPML
สถานะ
เปิด
รายงานสำหรับ
Advanced Custom Fields Multilingual 2.1.5
ปลั๊กอิน/ธีมที่เกี่ยวข้อง
Advanced Custom Fields (ACF)
แท็กหัวข้อ
Compatibility

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

เมื่อใช้งาน Advanced Custom Fields (ACF) ร่วมกับ WPML คุณอาจพบปัญหาที่ตรรกะเงื่อนไขทำงานไม่ถูกต้องในภาษารอง ปัญหานี้เกิดขึ้นเมื่อตรรกะเงื่อนไขอิงตามฟิลด์ที่ใช้การอ้างอิงแบบออบเจ็กต์หรือแบบเทอม เช่น ฟิลด์อนุกรมวิธานหรือฟิลด์ออบเจ็กต์โพสต์

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

โปรดตรวจสอบให้แน่ใจว่าได้สำรองข้อมูลไซต์ทั้งหมดของคุณก่อนดำเนินการต่อ


  • เพิ่มโค้ดต่อไปนี้ลงในไฟล์ functions.php ของธีมของคุณ
    /**
     * WPML Workaround for compsupp-wpmltriage-3649 
     */
    add_action( 'init', function() {
    	if ( defined( 'ICL_SITEPRESS_VERSION' ) ) { 
    		add_filter( 'acf/load_field', function ( $field ) {
    
    			if ( empty( $field['conditional_logic'] ) || ! is_array( $field['conditional_logic'] ) ) {
    				return $field;
    			}
    
    			foreach ( $field['conditional_logic'] as $group_index => $rules ) {
    				if ( ! is_array( $rules ) ) {
    					continue;
    				}
    
    				foreach ( $rules as $rule_index => $rule ) {
    					if ( isset( $rule['field'], $rule['value'] ) && is_numeric( $rule['value'] ) ) {
    						// Fetch the parent field
    						$parent_field = acf_get_field( $rule['field'] );
    						if ( ! isset( $parent_field['type'] ) ) {
    							continue;
    						}
    
    						if ( $parent_field['type'] === 'taxonomy' ) {
    							$rule['value'] = apply_filters( 'wpml_object_id', $rule['value'], $parent_field['taxonomy'], true );
    						} elseif ( $parent_field['type'] === 'post_object' ) {
    							$post_types = $parent_field['post_type'] ?? ''; // can be multiple 
    							if ( is_array( $post_types ) ) {
    								foreach ( $post_types as $post_type ) {
    									$translated_id = apply_filters( 'wpml_object_id', $rule['value'], $post_type, true );
    									if ( $translated_id && $translated_id !== $rule['value'] ) {
    										$rule['value'] = $translated_id;
    										break;								
    									}
    								}
    							} else {
    								$rule['value'] = apply_filters( 'wpml_object_id', $rule['value'], $post_types, true );
    							}
    						}
    						$field['conditional_logic'][ $group_index ][ $rule_index ] = $rule;
    					}
    				}
    			}
    
    			return $field;
    		}, 100 );
    	}
    } );
            

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