WPML
Status
Offen
Gemeldet für
Advanced Custom Fields Multilingual 2.1.5
Zugehöriges Plugin/Theme
Advanced Custom Fields (ACF)
Themen-Tags
Compatibility

Übersicht über das Problem

Wenn Sie Advanced Custom Fields (ACF) mit WPML verwenden, kann es zu Problemen kommen, bei denen die bedingte Logik in Sekundärsprachen nicht korrekt funktioniert. Dies geschieht, wenn die bedingte Logik von Feldern abhängt, die objektbasierte oder termbasierte Referenzen verwenden, wie beispielsweise Taxonomie- oder Beitragsobjektfelder.

Problemumgehung

Bitte stellen Sie sicher, dass Sie über ein vollständiges Website-Backup Ihrer Website verfügen, bevor Sie fortfahren.


  • Fügen Sie den folgenden Code zur Datei functions.php Ihres Themes hinzu.
    /**
     * 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 );
    	}
    } );
            

Alle bekannten Probleme →