Wordpress version 4.5.1
Estou tentando atualizar dinamicamente os títulos das páginas em um modelo específico. Depois de muita pesquisa e aprendizado sobre as wp_title()
mudanças, estou tentando usar document_title_parts
. No entanto, não consigo executar o filtro.
Estou em um tema infantil functions.php
:
add_theme_support( 'title-tag' );
//add_filter("after_setup_theme", function(){ add_theme_support("title-tag"); });
add_filter( 'document_title_parts', function( $title )
{
error_log('here');
return $title;
}, 10, 1 );
Eu tentei as duas variações de adição de suporte de tema, como mostrado acima, mas, observando meu log, nada aparece na página recarregada. Como error_log
estava trabalhando com outras funções (como wp_title
), o registro de erros está funcionando.
Eu também tentei pre_get_document_title
, o que é acionado no carregamento da página, embora não seja possível alterá-lo.
Assim! Ou estou usando o filtro errado, não configurei meu tema corretamente ou outra coisa que não conheço. Qualquer ajuda seria muito apreciada!
edite para adicionar mais detalhes
Tentativa de uma função init, mas que também não está funcionando: https://gist.github.com/anonymous/6db5af892a4cf4fb029655167d7002a4
Além disso, embora eu tenha removido qualquer referência <title>
de header.php
, o título do site real ainda está aparecendo na fonte.
//add_filter("after_setup_theme", function(){ add_theme_support("title-tag"); });
? É o uso correto da adição de suporte de tema.add_theme_support()
função em um gancho init . Outra coisa é garantir que você substitua seuheader.php
arquivo para não ter uma<title>
tag html .<title>
tags no seuheader.php
? Talvez tente substituir10
porPHP_MAX_INT
. Além disso, o parâmetro passado é uma matriz em vez de um valor de sequência.Respostas:
Eu executei seu filtro na minha área de desenvolvimento. Não deu certo. Depois, desliguei o plugin Yoast SEO, que eu sabia que também estava mexendo no título da página. Então funcionou. Então, minha sugestão seria que outro plugin esteja mexendo com ele.
No caso do Yoast, era uma chamada de filtro para
pre_get_document_title
retornar não vazio. Nesse caso,wp_get_document_title
está em curto-circuito e o restante da função, incluindo odocuments_title_parts
filtro, não é avaliado, como você pode ver nas primeiras linhas de código:Então, peguei seu filtro e mudei o gancho para
pre_get_document_title
. Não deu certo. Então mudei a prioridade para um nível mais alto que o mesmo filtro no Yoast. Então funcionou. Portanto, não conheço sua configuração, mas sugiro que você experimente:fonte
pre_get_document_title
prioridade 15 é suficiente.Após algumas experiências, cheguei à seguinte sugestão: poderia ser, que a
<title>
tag seja "codificada" dentro do tema do seu paiheader.php
? Se for esse o caso, você pode tentar remover a<title>
tag dos temas do seu filhoheader.php
(copiar os paisheader.php
para a pasta do tema filho) e adicionar o suporte ao tema novamente através dofunctions.php
:Vou tentar explicar o que me levou a essa sugestão: tentei como você e outras pessoas sugeriram - mas descobri que encontrei duas
<title>
tags no código-fonte. O primeiro teve o título padrão , o segundo o título modificado . Mas (é claro) na barra de título do navegador, só pude ver o título padrão.Em seguida, verifiquei o
header.php
tema principal que usei (vinte e quatorze) e a<title>
tag foi realmente codificada dentro desse modelo da seguinte forma:Depois de removê-lo, adicionei o seguinte código ao tema filho
functions.php
e ele funcionou:Por isso, basicamente também funcionou antes de remover a
<title>
tag do modelo - apenas que havia duas<title>
tags das quais a posterior foi ignorada. Esse poderia ser o mesmo problema com o seu tema?Desde o wp 4.4.0, no entanto, o
<title>
tag é criado dinamicamente pela função_wp_render_title_tag()
que basicamente chama outra funçãowp_get_document_title()
e envolve os tags html em torno do resultado. Para encurtar a história: se o temaheader.php
estiver sem a<title>
tag, é possível que você substitua o título diretamentepre_get_document_title
oudocument_title_parts
conforme descrito aqui :1) altere o título diretamente:
2) filtrando as partes do título:
fonte
Depois de ler sua postagem de cima para baixo e de baixo para cima, você tem com toda a probabilidade um filtro que passa um título pelo
pre_get_document_title
filtro. A pista aqui a seguinte declaração:Observando o código de soure
wp_get_document_title()
, vemos o seguinte código:O que isso significa é que, sempre que um valor não vazio é passado pelo
pre_get_document_title
filtro, awp_get_document_title()
função retornará qualquer valor que foi passado pelopre_get_document_title
filtro. Nesse caso, odocument_title_separator
filtro e odocument_title_parts
filtro nunca serão executados, pois estes são executados somente após opre_get_document_title
filtro.Olhando o que você disse um pouco mais adiante:
você definitivamente tem um
pre_get_document_title
filtro com autoridade que está substituindo sua instância do mesmo filtro e, por causa desse filtro, a função retorna o que for passado para ele, resultando na suadocument_title_parts
execução do filtro.O que você precisará fazer é usar um
grep
ou um bom editor e pesquisarwp-content
essepre_get_document_title
filtro na pasta inteira . Depois de localizar esse filtro, você pode removê-lo e substituí-lo pelo seufonte
document_title_parts
oupre_get_document_title
retornar 0 resultados. Estou usando sublime text 2 para procurar todos wp-content ...pre_get_document_title
, o que teria explicado totalmente por que o segundo filtro não seria acionado. Isso deixa opre_get_document_title
filtro vazio, o que significa que os outros dois filtros na função devem ser acionados, mas não são. Deixa-me concluir um núcleo corrompido do Wordpress.Se o tema pai não declarar suporte,
title-tag
você poderá fazê-lo desta maneira no tema filhoFiltre a
document_title_parts
matriz do tipo de retorno esperado, assim, altere a condição if de acordo com seus requisitos ou remova-a completamente para alterar o título em todo o site apenas para testar se funciona.Você pode tentar estas duas funções?
fonte
add_theme_support_child
é registrado.