WPML
Statut
Résolu par l’auteur
Résolu dans
Bricks 2.0
Extension/thème associé
Bricks
Étiquettes de sujet
Compatibility

Aperçu de l’anomalie

Dans Bricks Theme, lorsqu’une condition de modèle est définie pour s’afficher uniquement pour des termes spécifiques (par exemple, une catégorie particulière), la condition ne s’applique pas correctement dans les modèles traduits.

Solution de contournement

Assurez-vous d’avoir une sauvegarde complète de votre site avant de continuer.

Partie I


  • Allez dans WPML > Paramètres > Champs personnalisés.

  • Recherchez le champ _bricks_template_settings.

  • Définissez-le sur Copier

Partie II


  • Ouvrez le fichier functions.php de votre thème.

  • Ajoutez le code suivant :
    /**
     * 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;
    }

Toutes les anomalies connues →