Jak dynamicznie ustawić tytuł strony?

19

Czy można zmienić tytuł strony za pomocą kodu?

Załóżmy na przykład, że nazwa strony to „Zarezerwuj zamówienie”, ale chcę ją zmienić na „Zarezerwuj zamówienie nr 123”.

Google trochę zajrzałem i spojrzałem tutaj i nic nie widziałem. Czy ktoś zna wtyczkę lub hack?

wp_title zwraca tytuł strony, ale nie pozwala na ustawienie tytułu strony: http://codex.wordpress.org/Function_Reference/wp_title

Alex Cook
źródło
Skąd ta wartość? co ma na tej stronie wartość # 123?
Sagive SEO

Odpowiedzi:

23

Nie ma na nim dokumentacji, ale zawsze możesz zastosować filtr, aby the_titlepolubić to:

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

Zobacz te:

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

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

Jared
źródło
Wydaje się, że to zastępuje wszystkie tytuły. Jak zastąpić tylko bieżący tytuł?
Petrus Theron
Trzeba by dodać warunek do oddzwonienia, na przykładif ($post->ID == 45) { ... }
Nick Barrett
3
the_titleFiltr nie działa już w najnowszych wersjach Wordpress, użyj document_title_partslub pre_get_document_titlefiltrów, jak opisano w innych odpowiedziach.
Brendan Nee
8

Począwszy od Wordpress 4.4, możesz użyć filtru Wordpress, document_title_partsaby zmienić tytuł.

Dodaj następujące elementy 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
źródło
ale gdzie przekazujesz parametr do filtra?
Tintinabulator Zea
Powyższa funkcja modyfikuje sposób działania the_title()i get_the_title()funkcje - więc nie trzeba przekazywać żadnych parametrów.
Brendan Nee,
5

Dla tych, którzy chcą zmienić titleatrybut dokumentu , zauważyłem, że użycie wp_titlefiltru już nie działa. Zamiast korzystać z pre_get_document_titlefiltrów :

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

Źródło

Nathan Arthur
źródło
1
dzięki za powrót po latach, aby opublikować tę aktualizację. Używałem wp_title w mojej wtyczce od lat i nie zdawałem sobie sprawy, że do tej pory nie działało, a twoja odpowiedź zaoszczędziła mi dużo wysiłku. Więc dziękuję!
MatthewLee
@MatthewLee Cieszę się, że to pomogło :)
Nathan Arthur
2

Naprawdę zależy, czy chcesz wyświetlić niestandardowy tytuł dla bieżącej strony (tj. Zawartość <title></title>znacznika w nagłówku) lub filtrować tytuł stron w treści strony lub na listach.

W pierwszym przypadku (tytuł bieżącej strony) spróbuj dodać filtr wp_title()podobny: http://codex.wordpress.org/Plugin_API/Filter_Reference/wp_title

Jeśli chcesz zmodyfikować tytuły stron na całym forum, filtrowanie the_title()załatwi sprawę : http://codex.wordpress.org/Plugin_API/Filter_Reference/the_title

nickb
źródło
Z mojego doświadczenia wynika, że ​​musisz filtrować oba wp_titlei the_titleobejmować oba.
Geoffrey,
Nie jestem pewien, czy to z powodu zaniechania, ale to nie działa dla mnie. Próbowałem kombinacji i wbudowanych filtrów oraz nowych filtrów_zastosowania („pre_get_document_title”, ciąg $ title)
wylądowałem
niestety nie działało też dla mnie.
Debbie Kurth
Ta odpowiedź ma prawie 6 lat; jako plakat (i ktoś, kto już nie aktywnie współpracuje z WP), sugerowałbym zamiast tego przejrzeć najnowszą dokumentację.
nickb
1

Po włączeniu Yoast musisz zastąpić tytuł w następujący sposób:

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

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

  if ($current_slug == 'foobar') {

    return 'Foobar';
  }
}
leymannx
źródło
-2

Więc chcesz zmienić tytuł dla każdej strony? Najpierw skonfiguruj niestandardowy post spotkał pudełko. Smashing Magazine opisał ostatnio: http://wp.smashingmagazine.com/2011/10/04/create-custom-post-meta-boxes-wordpress/ . Następnie możesz utworzyć prostą funkcję zastępującą tytuł, jeśli niestandardowa meta-skrzynka ma wartość.

Istnieje kilka wtyczek SEO, które również zapewniają tę funkcjonalność. Wypróbuj Yoast SEO dla przykładów: http://wordpress.org/extend/plugins/wordpress-seo/

Mam nadzieję że to pomoże.

Chris Mooney
źródło
1
Te rozwiązania nie zmienią tytułu „dynamicznie”, ale „ręcznie”.
Gustavo
1
najgorsze rozwiązanie w historii
Vishal Kumar Sahu