WPML
Status
Resolvido
Relatado para
WPML Multilingual CMS 3.2.7
Resolvido em
3.3

Visão geral do problema

Ao usar idiomas em domínios e plugins, cuja saída depende de uma filtragem correta da função home_url(), substituindo a versão correta do idioma do URL da página inicial do seu site nos links, os links podem ser exibidos incorretamente. Na maioria dos casos, isso significa que a versão do idioma padrão do seu domínio é usada nos links em vez da versão correta do idioma secundário.

Outro exemplo comum de como esse problema se manifesta é quando os sitemaps do Yoast WP SEO não são exibidos corretamente nos idiomas secundários e, em vez disso, mostram apenas uma página em branco.

O problema em si não é causado pelo plugin WPML, mas por uma diferença entre os servidores web Apache e Nginx. O servidor web Apache preenche a variável superglobal $_SERVER['SERVER_NAME'] com o host solicitado pelos navegadores. O Nginx não faz isso por padrão, mas também pode ser configurado para fazer isso.

Para fazer isso, a solução alternativa acima simplesmente usa a variável $host fornecida pelo servidor web Nginx e a passa para o daemon PHP-FPM que gerencia seus arquivos .php por meio da chamada fastgi_param mostrada acima.

O daemon PHP-FPM pode então usar essa variável por meio da superglobal $_SERVER e a configuração imita o comportamento padrão da configuração mais comum do Apache + PHP(cgi).

Solução alternativa

Encontre a seção que descreve a maneira como os arquivos .php são processados no arquivo de configuração do nginx do seu site.
Ela será parecida com o exemplo abaixo, contendo uma declaração location, bem como a terminação do arquivo .php.

location ~ [^/]\.php(/|$) {
        fastcgi_split_path_info ^(.+?\.php)(/.*)$;
        if (!-f $document_root$fastcgi_script_name) {
            return 404;
        }
        fastcgi_pass php;
        fastcgi_keep_conn on;
        fastcgi_index index.php;
    }

Adicione a linha

fastcgi_param SERVER_NAME $host;

a ela e, com isso, ative o índice SERVER_NAME na sua variável superglobal $_SERVER, desta forma:
location ~ [^/]\.php(/|$) {
        fastcgi_split_path_info ^(.+?\.php)(/.*)$;
        if (!-f $document_root$fastcgi_script_name) {
            return 404;
        }
        fastcgi_pass php;
        fastcgi_keep_conn on;
        fastcgi_param SERVER_NAME $host;
        fastcgi_index index.php;
    }

Isso fará com que a filtragem do home_url() funcione exatamente como em uma configuração do Apache, resolvendo diferenças de comportamento e problemas causados pelo uso do Nginx.

Todos os problemas conhecidos →