WPML
Status
Resolvido
Relatado para
WPML Multilingual CMS 4.6.13
Resolvido em
WPML Multilingual CMS 4.7.4
Plugin/tema relacionado
Elementor
Tags de tópico
Compatibility

Visão geral do problema

Ao usar o recurso Condições de exibição do Elementor Pro para controlar a visibilidade do widget, as condições não se aplicam corretamente em páginas traduzidas. Especificamente, tags ou categorias no idioma traduzido não acionam as condições de exibição como esperado, fazendo com que elementos que deveriam estar ocultos permaneçam visíveis.

Solução alternativa

Por favor, certifique-se de ter um backup completo do seu site antes de prosseguir.


  • Abra o arquivo functions.php do seu tema.

  • Adicione o seguinte snippet:
    /*
    * WPML Workaround for compsupp-7656
    */
    add_filter( 'elementor/frontend/before_render', 'wpml_compsupp7656_filter_e_display_conditions_from_widget');
    
    function wpml_compsupp7656_filter_e_display_conditions_from_widget($element) {
        $settings = $element->get_settings();
    
        if (array_key_exists('e_display_conditions', $settings) && !empty($settings['e_display_conditions'])) {
            foreach ($settings['e_display_conditions'] as $key => $condition_json) {
                $condition = json_decode($condition_json, true);
                
                foreach ($condition as &$condition_group) {
                    foreach ($condition_group as &$single_condition) {    
                        if (isset($single_condition['condition']) && strpos($single_condition['condition'], 'in_') === 0) {
                            $taxonomy_key = substr($single_condition['condition'], 3); // Remove 'in_' prefix
                            if (isset($single_condition[$taxonomy_key])) {
                                foreach ($single_condition[$taxonomy_key] as &$term) {
                                    if (isset($term['id'])) {
                                        $term_obj = get_term($term['id']);
                                        if ($term_obj && !is_wp_error($term_obj)) {
                                            $term['id'] = apply_filters('wpml_object_id', $term['id'], $term_obj->taxonomy, true);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
    
                // Encode the modified condition back to JSON
                $settings['e_display_conditions'][$key] = json_encode($condition);
            }
    
            // Update the element's settings with the modified conditions
            $element->set_settings('e_display_conditions', $settings['e_display_conditions']);
        }
    }

Todos os problemas conhecidos →