Como faço para definir o título da página dinamicamente?

19

É possível alterar o título da página com código?

Por exemplo, digamos que o nome da página seja "Faça seu pedido", mas desejo alterá-lo para "Pedido de livro nº 123".

Eu pesquisei um pouco no Google e olhei aqui e não vi nada. Alguém sabe de um plugin ou hack?

wp_title retorna o título da página, mas não permite definir o título da página: http://codex.wordpress.org/Function_Reference/wp_title

Alex Cook
fonte
De onde viria o valor? o que tem nessa página o valor de # 123?
Sagive SEO

Respostas:

23

Não há documentação, mas você sempre pode aplicar um filtro the_titlecomo este:

add_filter('the_title','some_callback');
function some_callback($data){
    global $post;
    // where $data would be string(#) "current title"
    // Example:
    // (you would want to change $post->ID to however you are getting the book order #,
    // but you can see how it works this way with global $post;)
    return 'Book Order #' . $post->ID;
}

Veja estes:

http://codex.wordpress.org/Function_Reference/the_title

http://codex.wordpress.org/Function_Reference/add_filter

Jared
fonte
Isso parece substituir todos os títulos. Como substituo apenas o título atual?
Petrus Theron
Você precisaria adicionar uma condição ao retorno de chamada, por exemploif ($post->ID == 45) { ... }
Nick Barrett
3
the_titleO filtro não funciona mais nas versões mais recentes do Wordpress, use document_title_partsou pre_get_document_titlefiltra conforme detalhado em outras respostas.
Brendan Nee
8

No Wordpress 4.4, você pode usar o filtro do Wordpress document_title_partspara alterar o título.

Adicione o seguinte a functions.php:

add_filter('document_title_parts', 'my_custom_title');
function my_custom_title( $title ) {
  // $title is an array of title parts, including one called `title`

  $title['title'] = 'My new title';

  if (is_singular('post')) {
    $title['title'] = 'Fresh Post: ' . $title['title'];
  }

  return $title;
}
Brendan Nee
fonte
mas onde você passa o parâmetro para um filtro?
Tintinabulator Zea
A função acima modifica a maneira the_title()como as get_the_title()funções funcionam - portanto, não é necessário passar nenhum parâmetro.
Brendan Nee
5

Para aqueles que desejam alterar o titleatributo do documento , descobri que o uso do wp_titlefiltro não funciona mais. Em vez disso, use o pre_get_document_titlefiltro :

add_filter("pre_get_document_title", "my_callback");
function my_callback($old_title){
    return "My Modified Title";
}

Fonte

O que outras pessoas estão dizendo
fonte
1
obrigado por voltar anos mais tarde para publicar esta atualização. Eu usava o wp_title em um plugin meu por anos e não percebi que não estava mais funcionando até agora e sua resposta me salvou muito esforço. Então, obrigado!
MatthewLee 11/01/19
@MatthewLee Fico feliz em ouvir isso ajudou você :)
Nathan ReinstateMonica Arthur
2

Realmente depende se você deseja exibir um título personalizado para a página atual (ou seja, o conteúdo do <title></title> tag no cabeçalho) ou filtrar o título das páginas no corpo da página ou nas listagens.

No primeiro caso (o título da página atual), tente adicionar um filtro para wp_title()o seguinte: http://codex.wordpress.org/Plugin_API/Filter_Reference/wp_title

Se você deseja modificar os títulos das páginas, a filtragem the_title()fará o seguinte: http://codex.wordpress.org/Plugin_API/Filter_Reference/the_title

nickb
fonte
Na verdade, na minha experiência, você precisa filtrar ambos wp_titlee the_titlecobrir os dois.
Geoffrey
Não tenho certeza se é por causa da depreciação, mas isso não funciona para mim. Eu tentei combinações e filtros inline e os novos apply_filters ('pre_get_document_title', string $ title)
chegaram a
infelizmente, também não funcionou para mim.
Debbie Kurth
Esta resposta tem quase 6 anos; como o pôster (e alguém que não trabalha mais com o WP), sugiro examinar a documentação mais recente.
Nickb
1

Ao ativar o Yoast, você precisa substituir o título da seguinte forma:

add_filter('wpseo_title', 'custom_titles', 10, 1);
function custom_titles() {

  global $wp;
  $current_slug = $wp->request;

  if ($current_slug == 'foobar') {

    return 'Foobar';
  }
}
leymannx
fonte
-1

Deseja alterar o título por página? Em primeiro lugar, a configuração de uma postagem personalizada encontrou uma caixa. A Revista Smashing cobriu isso recentemente: http://wp.smashingmagazine.com/2011/10/04/create-custom-post-meta-boxes-wordpress/ . Em seguida, você pode criar uma função simples para substituir o título se a caixa meta personalizada tiver um valor.

Existem vários plugins de SEO que também fornecem essa funcionalidade. Experimente o Yoast SEO para obter exemplos: http://wordpress.org/extend/plugins/wordpress-seo/

Espero que isto ajude.

Chris Mooney
fonte
1
Essas soluções não alteram o título "dinamicamente", mas "manualmente".
29515 Gustavo
1
pior solução de sempre
Vishal Kumar Sahu 10/10