WPML
Stato
Risolto dall’autore
Risolto in
Bricks 2.0
Plugin/tema correlato
Bricks
Tag dell’argomento
Compatibility

Panoramica del problema

In Bricks Theme, quando una condizione del template è impostata per essere visualizzata solo per termini specifici (ad esempio, una determinata categoria), la condizione non si applica correttamente nei template tradotti.

Soluzione alternativa

Assicurati di avere un backup completo del sito prima di procedere.

Parte I


  • Vai su WPML > Impostazioni > Campi personalizzati.

  • Cerca il campo _bricks_template_settings.

  • Impostalo su Copia

Parte II


  • Apri il file functions.php del tuo tema.

  • Aggiungi il seguente codice:
    /**
     * 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;
    }

Tutti i problemi noti →