- 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; }