Comment définir dynamiquement le titre de la page?

19

Est-il possible de changer le titre de la page avec du code?

Par exemple, supposons que le nom de la page soit "Réservez votre commande", mais je souhaite le remplacer par "Commande de livre n ° 123".

J'ai fait un peu de recherche sur Google et j'ai regardé ici sans rien voir. Quelqu'un connaît un plugin ou un hack?

wp_title renvoie le titre de la page mais ne permet pas de définir le titre de la page: http://codex.wordpress.org/Function_Reference/wp_title

Alex Cook
la source
D'où proviendrait la valeur? qu'est-ce qui a dans cette page la valeur de # 123?
Sagive SEO

Réponses:

23

Il n'y a pas de documentation à ce sujet mais vous pouvez toujours appliquer un filtre the_titlecomme celui-ci:

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;
}

Voir ces:

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

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

Jared
la source
Cela semble remplacer tous les titres. Comment remplacer uniquement le titre actuel?
Petrus Theron
Vous devez ajouter une condition au rappel, par exempleif ($post->ID == 45) { ... }
Nick Barrett
3
the_titlefiltre ne fonctionne plus dans les dernières versions de Wordpress, utilisez document_title_partsou pre_get_document_titlefiltres comme détaillé dans d'autres réponses.
Brendan Nee
8

Depuis Wordpress 4.4, vous pouvez utiliser le filtre Wordpress document_title_partspour changer le titre.

Ajoutez ce qui suit à 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
la source
mais où passez-vous le paramètre à un filtre?
Tintinabulator Zea
La fonction ci-dessus modifie le fonctionnement the_title()et les get_the_title()fonctions - donc pas besoin de passer de paramètres.
Brendan Nee
5

Pour ceux qui souhaitent changer l' titleattribut du document , j'ai trouvé que l'utilisation du wp_titlefiltre ne fonctionne plus. Utilisez plutôt le pre_get_document_titlefiltre :

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

La source

Nathan ReinstateMonica Arthur
la source
1
merci d'être revenu des années plus tard pour publier cette mise à jour. J'utilisais wp_title dans un de mes plugins depuis des années et je n'avais pas réalisé que cela ne fonctionnait plus jusqu'à présent et votre réponse m'a fait économiser beaucoup d'efforts. Alors merci!
MatthewLee
@MatthewLee Heureux d'entendre que cela vous a aidé :)
Nathan ReinstateMonica Arthur
2

Cela dépend vraiment si vous cherchez à afficher un titre personnalisé pour la page actuelle (c'est-à-dire le contenu de la <title></title>balise dans l'en-tête) ou à filtrer le titre des pages dans le corps de la page ou dans les listes.

Dans le premier cas (le titre de la page actuelle), essayez d'ajouter un filtre wp_title()comme ceci: http://codex.wordpress.org/Plugin_API/Filter_Reference/wp_title

Si vous souhaitez modifier les titres de page dans tous les domaines, le filtrage the_title()fera l'affaire: http://codex.wordpress.org/Plugin_API/Filter_Reference/the_title

nickb
la source
En fait, d'après mon expérience, vous devez filtrer les deux wp_titleet the_titlecouvrir les deux.
Geoffrey
Je ne sais pas si c'est à cause de la dépréciation, mais cela ne fonctionne pas pour moi. J'ai essayé des combinaisons et des filtres en ligne et les nouveaux apply_filters ('pre_get_document_title', string $ title)
atterri le
malheureusement, ni l'un ni l'autre n'ont fonctionné pour moi non plus.
Debbie Kurth
Cette réponse a presque 6 ans; comme l'affiche (et quelqu'un qui ne travaille plus activement avec WP), je suggère plutôt de consulter la dernière documentation.
nickb
1

Lorsque Yoast est activé, vous devez remplacer le titre comme suit:

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

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

  if ($current_slug == 'foobar') {

    return 'Foobar';
  }
}
leymannx
la source
-2

Vous souhaitez donc modifier le titre page par page? Tout d'abord, configurer un message personnalisé a rencontré une boîte. Smashing Magazine a récemment couvert ce sujet: http://wp.smashingmagazine.com/2011/10/04/create-custom-post-meta-boxes-wordpress/ . Vous pouvez ensuite créer une fonction simple pour remplacer le titre si la méta-boîte personnalisée a une valeur.

Il existe plusieurs plugins SEO qui offrent également cette fonctionnalité. Essayez Yoast SEO pour des exemples: http://wordpress.org/extend/plugins/wordpress-seo/

J'espère que cela t'aides.

Chris Mooney
la source
1
Ces solutions ne changeront pas le titre "dynamiquement" mais "manuellement".
Gustavo
1
pire solution de tous les temps
Vishal Kumar Sahu