- 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.