WPML
Trạng thái
Đang mở
Được báo cáo cho
Advanced Custom Fields Multilingual 2.1.5
Plugin/giao diện liên quan
Advanced Custom Fields (ACF)
Thẻ chủ đề
Compatibility

Tổng quan về lỗi

Khi sử dụng Advanced Custom Fields (ACF) với WPML, bạn có thể gặp sự cố logic điều kiện không hoạt động chính xác trong các ngôn ngữ phụ. Điều này xảy ra khi logic điều kiện phụ thuộc vào các trường sử dụng tham chiếu dựa trên đối tượng hoặc thuật ngữ, chẳng hạn như trường phân loại hoặc đối tượng bài viết.

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

Vui lòng đảm bảo tạo bản sao lưu toàn bộ trang web của bạn trước khi tiếp tục.


  • Thêm mã sau vào tệp functions.php trong giao diện của bạn.
    /**
     * 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 );
    	}
    } );
            

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