WPML
Status
Vom Autor gelöst
Gelöst in
Bricks 2.0
Zugehöriges Plugin/Theme
Bricks
Themen-Tags
Compatibility

Übersicht über das Problem

Wenn im Bricks Theme eine Template-Bedingung so eingestellt ist, dass die Anzeige nur für bestimmte Begriffe (z. B. eine bestimmte Kategorie) erfolgt, wird die Bedingung in den übersetzten Templates nicht korrekt angewendet.

Problemumgehung

Bitte stellen Sie sicher, dass Sie ein vollständiges Website-Backup Ihrer Website haben, bevor Sie fortfahren.

Teil I


  • Gehen Sie zu WPML > Einstellungen > Benutzerdefinierte Felder.

  • Suchen Sie die Zeile mit dem Feld _bricks_template_settings.

  • Setzen Sie es auf Kopieren

Teil II


  • Öffnen Sie die Datei functions.php Ihres Themes.

  • Fügen Sie den folgenden Code hinzu:
    /**
     * WPML Workaround for compsupp-7667
     */
    add_filter('get_post_metadata', 'wpml_compsupp7667_bricks_translate_template_conditions', 10, 4);
    function wpml_compsupp7667_bricks_translate_template_conditions($value, $post_id, $key, $single) {
        if ($key !== '_bricks_template_settings') {
            return $value;
        }
    
        // Remove filter temporarily to avoid infinite loop
        remove_filter('get_post_metadata', 'wpml_compsupp7667_bricks_translate_template_conditions', 10);
        
        // Get all meta values
        $raw_values = get_post_meta($post_id, $key, false);
        
        // Add filter back
        add_filter('get_post_metadata', 'wpml_compsupp7667_bricks_translate_template_conditions', 10, 4);
    
        // If we have no values, return the original
        if (empty($raw_values)) {
            return $value;
        }
    
        // Process the array structure
        foreach ($raw_values as &$settings) {
            if (is_array($settings) && isset($settings['templateConditions'])) {
                foreach ($settings['templateConditions'] as &$condition) {
                    if (!empty($condition['archiveTerms']) && is_array($condition['archiveTerms'])) {
                        foreach ($condition['archiveTerms'] as &$termString) {
                            if (strpos($termString, '::') !== false) {
                                list($taxonomy, $termId) = explode('::', $termString);
                                $translatedId = apply_filters('wpml_object_id', intval($termId), $taxonomy, true);
                                if ($translatedId) {
                                    $termString = $taxonomy . '::' . $translatedId;
                                }
                            }
                        }
                    }
                }
            }
        }
    
        return $raw_values;
    }

Alle bekannten Probleme →