Wie lege ich den Seitentitel dynamisch fest?

19

Ist es möglich, den Seitentitel mit Code zu ändern?

Nehmen wir zum Beispiel an, die Seite heißt "Buchen Sie Ihre Bestellung", aber ich möchte sie in "Buchbestellung Nr. 123" ändern.

Ich googelte ein bisschen und schaute hier und sah nichts. Kennt jemand ein Plugin oder einen Hack?

wp_title gibt den Seitentitel zurück, erlaubt jedoch nicht das Festlegen des Seitentitels: http://codex.wordpress.org/Function_Reference/wp_title

Alex Cook
quelle
Woher würde der Wert kommen? Was hat auf dieser Seite den Wert von # 123?
Sagive SEO

Antworten:

23

Es gibt keine Dokumentation, aber Sie können jederzeit einen Filter anwenden, der Ihnen the_titlegefällt:

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

Siehe diese:

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

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

Jared
quelle
Dies scheint alle Titel zu überschreiben. Wie kann ich nur den aktuellen Titel überschreiben?
Petrus Theron
Sie müssen dem Rückruf eine Bedingung hinzufügen, z. B.if ($post->ID == 45) { ... }
Nick Barrett
3
the_titleFilter funktioniert nicht mehr in den neuesten Versionen von Wordpress, verwenden document_title_partsoder filtern pre_get_document_titlewie in anderen Antworten beschrieben.
Brendan Nee
8

Ab Wordpress 4.4 können Sie document_title_partsden Titel mit dem Wordpress-Filter ändern.

Fügen Sie Folgendes hinzu zu 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
quelle
aber wo übergeben Sie den Parameter an einen Filter?
Tintinabulator Zea
Die obige Funktion ändert die Art the_title()und Weise und die get_the_title()Funktionsweise - es müssen also keine Parameter übergeben werden.
Brendan Nee
5

Für diejenigen, die das titleAttribut des Dokuments ändern möchten , stellte ich fest, dass die Verwendung des wp_titleFilters nicht mehr funktioniert. Verwenden Sie stattdessen den pre_get_document_titleFilter :

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

Quelle

Nathan ReinstateMonica Arthur
quelle
1
Vielen Dank, dass Sie Jahre später wiederkommen, um dieses Update zu veröffentlichen. Ich hatte wp_title jahrelang in einem Plugin von mir verwendet und bis jetzt nicht bemerkt, dass es nicht mehr funktioniert, und Ihre Antwort ersparte mir viel Mühe. Also vielen Dank!
MatthewLee
@MatthewLee Freut mich zu hören, dass es dir geholfen hat :)
Nathan ReinstateMonica Arthur
2

Dies hängt davon ab, ob Sie einen benutzerdefinierten Titel für die aktuelle Seite anzeigen möchten (dh den Inhalt des <title></title>Tags in der Kopfzeile) oder den Seitentitel im Seitenkörper oder in Auflistungen filtern möchten.

Versuchen Sie im ersten Fall (Titel der aktuellen Seite), einen Filter wp_title()wie folgt hinzuzufügen : folgt http://codex.wordpress.org/Plugin_API/Filter_Reference/wp_title

Wenn Sie die Seitentitel allgemein ändern möchten, reicht die Filterung aus the_title(): http://codex.wordpress.org/Plugin_API/Filter_Reference/the_title

nickb
quelle
Eigentlich muss man meiner Erfahrung nach beides filtern wp_titleund the_titlebeides abdecken.
Geoffrey
Ich bin nicht sicher, ob es an der Abwertung liegt, aber es funktioniert nicht für mich. Ich habe Kombinationen ausprobiert und Inline - Filter und die neuen apply_filters ( ‚pre_get_document_title‘, string $ title)
gelandet
Leider hat auch keiner für mich gearbeitet.
Debbie Kurth
Diese Antwort ist fast 6 Jahre alt; Als Poster (und als jemand, der nicht mehr aktiv mit WP arbeitet) empfehle ich stattdessen die neueste Dokumentation.
NickB
1

Wenn Sie Yoast aktiviert haben, müssen Sie den Titel wie folgt überschreiben:

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

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

  if ($current_slug == 'foobar') {

    return 'Foobar';
  }
}
leymannx
quelle
-1

Sie möchten also den Titel pro Seite ändern? Zuerst ein benutzerdefiniertes Posting einrichten und eine Box treffen. Smashing Magazine hat kürzlich darüber berichtet: http://wp.smashingmagazine.com/2011/10/04/create-custom-post-meta-boxes-wordpress/ . Sie können dann eine einfache Funktion erstellen, um den Titel zu ersetzen, wenn das benutzerdefinierte Meta-Feld einen Wert enthält.

Es gibt mehrere SEO-Plugins, die diese Funktionalität ebenfalls bereitstellen. Probieren Sie Yoast SEO zum Beispiel aus: http://wordpress.org/extend/plugins/wordpress-seo/

Hoffe das hilft.

Chris Mooney
quelle
1
Diese Lösungen ändern den Titel nicht "dynamisch", sondern "manuell".
Gustavo
1
Die schlechteste Lösung aller Zeiten
Vishal Kumar Sahu