Pular a navegação
Atualizado
junho 7, 2024

Muitos temas exibem especialmente posts, páginas e categorias especiais, geralmente com base em IDs. Por exemplo, uma seção de posts “Em destaque” na página inicial ou categorias destacadas.

Em alguns casos, essas IDs são codificadas no PHP do tema e, em outros, o usuário as seleciona na tela de configuração do tema.

Para exibir corretamente, o tema precisa selecionar os IDs por idioma. No WPML, os IDs de posts, páginas, categorias e tags mudam quando o idioma muda, portanto, o tema precisa usar os IDs corretos do idioma ativo.

WPML inclui duas opções para você conseguir isso.

Você pode ativar o ajuste automático de ID ou usar o wpml_object_id manualmente em seu tema.

Qual opção você deve usar?

O ajuste automático de ID não requer alterações em seu código. Você pode usá-lo com qualquer tema e tudo “simplesmente funciona”. A desvantagem de usá-lo é o tempo de processamento e o acesso ao banco de dados ligeiramente maiores, pois WPML se conectará a muitas funções e verificará se a saída está correta para o idioma ativo.

O ajuste manual da ID usando a função wpml_object_id obterá os mesmos resultados e poderá ser mais eficiente em termos de processamento. No entanto, isso exige uma codificação significativa no tema.

Se estiver criando um tema do zero, você deve considerar o uso do wpml_object_id para fazer isso manualmente. Se você estiver começando com um tema existente, invadir e modificar o tema pode não ser realista, e o ajuste automático de ID provavelmente é o caminho a seguir.

De qualquer forma, ao usar qualquer plug-in de cache, o impacto no desempenho dessa operação é reduzido a zero. O armazenamento em cache é sempre recomendado para sites de qualquer tamanho. WPML funciona bem com o WP Super Cache e W3 Total Cache (que também usamos em sites diferentes).

1) Ajuste automático de IDs

WPML pode se conectar a funções da API WordPress, detectar quando itens específicos são carregados e ajustar IDs para que os resultados sejam ajustados para o idioma ativo.

Essa funcionalidade é ativada por padrão e pode ser acessada por meio do WPMLIdiomas:

Ajuste os IDs para a funcionalidade multilíngue

Isso ajustará automaticamente todos os IDs e poderá ser usado em qualquer tema WordPress que use a API corretamente (praticamente qualquer tema que você possa encontrar).

2) Manualmente, usando a função wpml_object_id

Como alternativa, se o ajuste automático de ID estiver desativado, você poderá usar a função wpml_object_id para fazer o mesmo manualmente.

apply_filters( ‘wpml_object_id’, int $element_id, string $element_type, bool $return_original_if_missing, mixed $ulanguage_code )

Observação: Para versões WPML >=3.2, use o gancho de filtro wpml_object_id. Desde o WPML 3.3, a função icl_object_id foi marcada como obsoleta e removida completamente na versão 3.3

Exemplo de uso

echo apply_filters( 'wpml_object_id', 4, 'category', TRUE  );

Retorna o ID da categoria no idioma atual para o ID da categoria 4. Se a tradução estiver faltando, ele retornará o original (aqui: ID de categoria 4).

Consulte nossa página de API para ver outros exemplos e obter informações mais detalhadas sobre seu uso

Tradução de matrizes de IDs

Muitas vezes você precisa converter uma matriz inteira de IDs de objeto (mais comumente IDs de categoria). Para fazer isso, você pode usar a seguinte função:

function lang_object_ids($object_id, $type) {
    if( is_array( $object_id ) ){
        $translated_object_ids = array();
        foreach ( $object_id as $id ) {
            $translated_object_ids[] = apply_filters( 'wpml_object_id', $id, $type, true, $current_language );
        }
        return $translated_object_ids;
    } else {
  return apply_filters( 'wpml_object_id', $object_id, $type, true, $current_language );
 }
}

Essa função também aceita o tipo de objeto como argumento.

Por exemplo, para obter uma matriz de IDs de categoria para as categorias 1, 3 e 6, chamaremos você:

lang_object_ids(array(1,3,6),'category')

Exibição de elementos da página em diferentes idiomas

O parâmetro opcional ulanguage_code permite que você misture elementos de página em diferentes idiomas.

Por exemplo, se você tiver uma galeria de imagens e não quiser duplicar as imagens por idioma, siga este procedimento:

  1. Obtenha o ID da página no idioma em que a galeria existe.
  2. Faça um loop nas imagens dessa página e as exiba.