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

Em alguns casos, esses IDs estão embutidos no código PHP do tema, e em outros, o usuário os seleciona na tela de configurações do tema.

Para exibi-los corretamente, o tema precisa selecionar os IDs por idioma. No WPML, os IDs para posts, páginas, categorias e tags mudam quando o idioma muda; por isso, o tema precisa usar os IDs corretos do idioma ativo.

O WPML inclui duas opções para realizar isso.

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

Qual opção usar?

O ajuste automático de ID não exige alterações no seu código. É possível usá-lo com qualquer tema e simplesmente funciona. A desvantagem desse método é um pequeno aumento no tempo de processamento e acesso ao banco de dados, visto que o WPML se conectará a muitas funções e verificará se a saída está correta para o idioma ativo.

O ajuste manual de ID usando a função wpml_object_id produzirá os mesmos resultados e pode ser mais eficiente em termos de processamento. No entanto, exige escrever bem mais códigos no tema.

Se você estiver desenvolvendo um tema do zero, deve considerar a possibilidade de usar o wpml_object_id para fazer o ajuste manualmente. Se estiver começando com um tema já existente, talvez não seja realista tentar modificar o tema e a melhor opção seria o ajuste automático de IDs.

De qualquer forma, se usar qualquer plugin para armazenamento em cache, o impacto dessa operação no desempenho é eliminado. Sempre se recomenda o armazenamento em cache para sites de qualquer tamanho. O WPML funciona bem com o WP Super Cache e o W3 Total Cache (que também usamos em diferentes sites).

1) Ajuste automático de IDs

O WPML pode fazer ganchos com funções de API do WordPress, detectar quando itens específicos são carregados e ajustar os IDs para que os resultados correspondam ao idioma ativo.

Esse recurso está ativado por padrão, e pode ser acessado em WPML -> Idiomas:

Ajustar IDs para o recurso multilíngue

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

2) Manualmente, usando a função wpml_object_id

Como alternativa, se o ajuste automático de IDs estiver desativado, é possível usar a função wpml_object_id para obter o mesmo resultado manualmente.

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

Observação: No WPML 3.2 ou superior, use o gancho (hook) de filtro wpml_object_id. Desde o WPML 3.3, a função icl_object_id foi marcada como preterida e removida completamente nessa versão.

Exemplo de utilização

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

Retornar o ID de categoria no idioma atual correspondente ao ID de categoria 4. Se a tradução estiver faltando, retornará o original (no caso: ID de categoria 4).

Confira nossa página de API para ver outros exemplos e encontre informações mais detalhadas sobre como usar.

Tradução de matrizes de IDs

Com frequência, é preciso converter uma inteira matriz de IDs de objetos (IDs de categoria, na maioria das vezes). Para fazer isso, é possível 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 um argumento.

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

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

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

O parâmetro opcional ulanguage_code permite misturar elementos de página em diferentes idiomas.

Por exemplo, se você tem uma galeria de imagens e não quer duplicá-las por idioma, faça isso:

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