Este é o fórum de suporte técnico para o WPML, o plugin para WordPress multilíngue.

Qualquer um pode ler, mas apenas clientes do WPML podem postar aqui. A equipe do WPML responde no fórum 6 dias por semana, 22 horas por dia.

Our next available supporter will start replying to tickets in about 6.26 hours from now. Thank you for your understanding.

This topic contains 8 respostas, has 2 vozes.

Last updated by Guilherme Souza 4 dias, 8 horas atrás.

Assigned support staff: Bruno.

Autor Posts
outubro 8, 2019 às 4:22 pm #4717171

Guilherme Souza

Estou tentando: inserir o seletor de idiomas como um sub-menu

Link de uma página em que o problema pode ser visto: hidden link

Espero ver: hidden link

Em vez disso, o que acontece é: hidden link

Desejo inserir o seletor dentro do Menu Idiomas e ao passar o mouse, os idiomas disponíveis serem exibidos.
Assim como é hoje, porem, dentro de um item do menu e não por ultimo

Assim: hidden link
Não há opção: hidden link

outubro 8, 2019 às 8:17 pm #4718017

Bruno
Supporter

Languages: Inglês (English ) Português (Português )

Timezone: America/Sao_Paulo (GMT-03:00)

Obrigado por nos contactar. Para fazer exatamente o que você quer, seria necessário código personalizado. Nós temos algumas documentações que podem lhe ajudar a desenvolver o recurso que você quer:

- (no final da página tem um exemplo mais completo): https://wpml.org/documentation/getting-started-guide/language-setup/custom-language-switcher/
- https://wpml.org/documentation/getting-started-guide/language-setup/designing-custom-language-switchers-using-template-files/

Seguindo os passos que estão na nossa documentação, você consegue adicionar o seletor de idiomas como você quer?

Obrigado.

outubro 8, 2019 às 8:48 pm #4718057

Guilherme Souza

Olá Bruno, boa tarde.
Obrigado pela informação, vou testar

Uso o Uncode como Tema
Se tiver alguma dica de código para isso, ja será de grande ajuda.

Agradeço a atenção.

outubro 9, 2019 às 12:54 am #4718495

Bruno
Supporter

Languages: Inglês (English ) Português (Português )

Timezone: America/Sao_Paulo (GMT-03:00)

Olá,

Eu criei esse código que você pode usar no arquivo functions.php do seu tema/child theme (adicione na linha 2 ou 3, logo após o <?php...):

add_filter('wp_nav_menu_items', 'wpml_4717171_nav_menu_items', 10, 2);
function wpml_4717171_nav_menu_items( $items, $args ) {

    $languages = apply_filters( 'wpml_active_languages', NULL, 'skip_missing=0' );
 
    if ( $languages && $args->theme_location == 'primary' ) {
 
        if( ! empty( $languages ) ) {
 
			$language = '<li><a href="#">' . __( 'Idiomas', '' ). ' <i class="fa fa-angle-down fa-dropdown"></i></a><ul>';
            foreach( $languages as $l ){
                if( ! $l['active'] ) {
                    // flag with native name
                    $language .= '<li class="menu-item"><a href="' . $l['url'] . '">' . $l['native_name'] . '</a></li>';
                }
			}
			$language .= '</li></ul>';
        }
    }
 
    return $language . $items;
}

Se necessário você poderá alterar o código acima de acordo com as suas necessidades. Por favor, note que como isso é um recurso personalizado, infelizmente, isso está além do escopo do nosso suporte.

Nós temos uma lista de hooks para o WPML que podem te ajudar a desenvolver o recurso desejado. Você pode ver ambas as URLs abaixo:

- https://wpml.org/documentation/support/wpml-coding-api/wpml-hooks-reference

Se você preferir, você pode contactar um dos nossos parceiros certificados que podem desenvolver de simples à complexos recursos para o seu site: http://wpml.org/documentation/support/wpml-contractors/

Obrigado.

outubro 9, 2019 às 8:11 pm #4725469

Guilherme Souza

Olá Bruno, muito obrigado pelo Cod.
Funcionou perfeitamente do modo que eu queria.
Identifiquei apenas um pequeno errinho

Como posso fazer para que o menu Exiba apenas os idiomas que estão disponíveis ?

Veja como ficou (Alterei a posição do Primary para Secondary)
hidden link

outubro 9, 2019 às 8:49 pm #4725603

Bruno
Supporter

Languages: Inglês (English ) Português (Português )

Timezone: America/Sao_Paulo (GMT-03:00)

Olá,

Eu fico feliz que o código tenha funcionado como desejado. Para fazer a alteração que você quer, na linha 4 (olhando o código que eu postei acima), altere essa linha:

$languages = apply_filters( 'wpml_active_languages', NULL, 'skip_missing=0' );

Para

$languages = apply_filters( 'wpml_active_languages', NULL, 'skip_missing=1' );

Isso vai exibir apenas os idiomas que já estão traduzidas. Por favor, depois de testar essa alteração, deixe-me saber se o link está funcionando como desejado.

Obrigado.

outubro 11, 2019 às 1:01 am #4734491

Guilherme Souza

Bruno, funcionou perfeitamente.

O ultimo problema é que quando não existe nenhuma tradução e ja estou no idioma padrão, o menu aparece em branco, dando a impressão que esta com bug

Veja : hidden link

é possível desaparecer ou manter apenas o idioma padrão quando não ha idiomas ?

outubro 11, 2019 às 3:10 pm #4739851

Bruno
Supporter

Languages: Inglês (English ) Português (Português )

Timezone: America/Sao_Paulo (GMT-03:00)

Olá,

Olhando na linha 6 do código que eu postei acima, altere essa linha:

if ( $languages && $args->theme_location == 'primary' ) {

Para essa linha:

if ( $languages && count( $languages ) > 1 && $args->theme_location == 'primary' ) {

Isso vai fazer com que o seletor de idiomas só seja exibido se tiver mais de 1 idioma na página. Ou seja, se uma página tem apenas um idioma sem nenhuma tradução, o seletor de idiomas não vai ser exibido. Caso contrário, o seletor de idiomas vai ser exibido.

Obrigado.

outubro 11, 2019 às 4:06 pm #4740261

Guilherme Souza

Excelente, solucionou perfeitamente meu problema.
Muito obrigado Bruno