Как установить заголовок страницы динамически?

19

Можно ли изменить заголовок страницы с помощью кода?

Например, скажем, имя страницы - «Заказать ваш заказ», но я хочу изменить его на «Заказ книги # 123».

Я погуглил немного и посмотрел здесь и ничего не увидел. Кто-нибудь знает плагин или взломать?

wp_title возвращает заголовок страницы, но не позволяет установить заголовок страницы: http://codex.wordpress.org/Function_Reference/wp_title

Алекс Кук
источник
Откуда взялась бы ценность? что имеет на этой странице значение # 123?
Sagive SEO

Ответы:

23

На нем нет документации, но вы всегда можете применить фильтр, the_titleнапример:

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

Смотрите эти:

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

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

Джаред
источник
Это, кажется, отменяет все названия. Как переопределить только текущий заголовок?
Петрус Терон
Вы должны были бы добавить условие обратного вызова, напримерif ($post->ID == 45) { ... }
Ник Барретт
3
the_titleФильтр больше не работает в последних версиях Wordpress, использовать document_title_partsили pre_get_document_titleфильтры, как описано в других ответах.
Брендан Ни
8

Начиная с Wordpress 4.4, вы можете использовать фильтр Wordpress document_title_partsдля изменения заголовка.

Добавьте следующее к 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;
}
Брендан Ни
источник
но где вы передаете параметр в фильтр?
Tintinabulator Zea
Вышеуказанная функция изменяет способ the_title()и get_the_title()функции работы - поэтому нет необходимости передавать какие-либо параметры.
Брендан Ни
5

Для желающих изменить titleатрибут документа я обнаружил, что использование wp_titleфильтра больше не работает. Вместо этого следует использовать в pre_get_document_titleфильтр :

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

Источник

Натан Восстановить Моника Артур
источник
1
спасибо, что пришли спустя годы, чтобы опубликовать это обновление. Я годами использовал wp_title в своем плагине и не осознавал, что он больше не работает до сих пор, и ваш ответ сэкономил мне много усилий. Так что спасибо тебе!
Мэтью Ли
@MatthewLee Рад слышать, что это помогло вам :)
Натан ReinstateMonica Arthur
2

Действительно зависит от того, хотите ли вы отобразить пользовательский заголовок для текущей страницы (т.е. содержимое <title></title>тега в заголовке) или отфильтровать заголовок страниц в теле страницы или в списках.

В первом случае (заголовок текущей страницы) попробуйте добавить фильтр wp_title()примерно так: http://codex.wordpress.org/Plugin_API/Filter_Reference/wp_title

Если вы хотите изменить заголовки страниц по всем направлениям, фильтрация the_title()сделает свое дело: http://codex.wordpress.org/Plugin_API/Filter_Reference/the_title

nickb
источник
На самом деле, по моему опыту, вам нужно отфильтровать и то, wp_titleи the_titleдругое.
Джеффри
Я не уверен, если это из-за устаревания, но это не работает для меня. Я пробовал комбинации и встроенные фильтры и новые apply_filters ('pre_get_document_title', строка $ title)
приземлился
к сожалению, у меня тоже не получилось.
Дебби Курт,
Этому ответу почти 6 лет; в качестве автора (и человека, который больше не работает с WP), я бы посоветовал взглянуть на последнюю документацию.
nickb
1

Когда Yoast включен, вам нужно переопределить заголовок следующим образом:

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

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

  if ($current_slug == 'foobar') {

    return 'Foobar';
  }
}
leymannx
источник
-2

Итак, вы хотите изменить заголовок для каждой страницы? Во-первых, настроить пользовательский пост встретил коробку. Журнал Smashing Magazine недавно освещал этот вопрос: http://wp.smashingmagazine.com/2011/10/04/create-custom-post-meta-boxes-wordpress/ . Затем вы можете создать простую функцию, чтобы заменить заголовок, если в пользовательском мета-поле есть значение.

Есть несколько плагинов SEO, которые также предоставляют эту функциональность. Попробуйте Yoast SEO для примеров: http://wordpress.org/extend/plugins/wordpress-seo/

Надеюсь это поможет.

Крис Муни
источник
1
Эти решения не изменяют название «динамически», но «вручную».
Густаво
1
худшее решение из всех
Вишал Кумар Саху