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

7 нояб. 2011 г., 20:40:15
Просмотры: 87.1K
Голосов: 27

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

Например, допустим, название страницы "Оформить заказ", но я хочу изменить его на "Заказ #123".

Я поискал в Google и посмотрел здесь, но ничего не нашел. Кто-нибудь знает подходящий плагин или способ?

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

1
Комментарии

Откуда берется значение? Что на этой странице содержит значение #123?

Sagive Sagive
7 нояб. 2011 г. 20:51:20
Все ответы на вопрос 7
3
27

Хотя официальной документации по этому поводу нет, вы всегда можете применить фильтр к the_title следующим образом:

add_filter('the_title','some_callback');
function some_callback($data){
    global $post;
    // где $data будет строкой(#) "текущий заголовок"
    // Пример:
    // (вам нужно будет заменить $post->ID на способ получения номера заказа книги,
    // но здесь показан принцип работы с global $post;)
    return 'Номер заказа книги #' . $post->ID;
}

Смотрите также:

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

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

7 нояб. 2011 г. 20:55:50
Комментарии

Похоже, это переопределяет все заголовки. Как переопределить только текущий заголовок?

Petrus Theron Petrus Theron
29 мар. 2017 г. 19:47:45

Вам нужно добавить условие в callback-функцию, например if ($post->ID == 45) { ... }

Nick Barrett Nick Barrett
9 июл. 2018 г. 06:55:42

Фильтр the_title больше не работает в последних версиях WordPress, используйте фильтры document_title_parts или pre_get_document_title, как описано в других ответах.

Brendan Nee Brendan Nee
15 нояб. 2018 г. 04:48:07
2
17

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

Добавьте следующий код в functions.php:

add_filter('document_title_parts', 'my_custom_title');
function my_custom_title( $title ) {
  // $title — это массив частей заголовка, включая часть под названием `title`

  $title['title'] = 'Мой новый заголовок';

  if (is_singular('post')) {
    $title['title'] = 'Свежая запись: ' . $title['title'];
  }

  return $title;
}
15 нояб. 2018 г. 04:46:35
Комментарии

но куда передается параметр в фильтр?

Tintinabulator Zea Tintinabulator Zea
22 дек. 2018 г. 07:38:33

Приведенная выше функция изменяет работу функций the_title() и get_the_title() - поэтому передавать параметры не нужно.

Brendan Nee Brendan Nee
25 дек. 2018 г. 21:51:51
2

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

add_filter("pre_get_document_title", "my_callback");
function my_callback($old_title){
    return "Мой изменённый заголовок";
}

Источник

12 авг. 2018 г. 22:41:37
Комментарии

спасибо, что вернулись спустя годы, чтобы опубликовать это обновление. Я годами использовал wp_title в своем плагине и не осознавал, что он больше не работает, пока не увидел ваш ответ, который спас мне кучу времени. Так что спасибо!

MatthewLee MatthewLee
11 янв. 2019 г. 18:35:47

@MatthewLee Рад, что это вам помогло :)

Nathan Arthur Nathan Arthur
11 янв. 2019 г. 20:52:20
0

При использовании Yoast необходимо переопределить заголовок следующим образом:

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

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

  if ($current_slug == 'foobar') {

    return 'Foobar';
  }
}
14 апр. 2019 г. 23:29:15
4

Всё зависит от того, хотите ли вы отображать пользовательский заголовок для текущей страницы (т.е. содержимое тега <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

16 дек. 2013 г. 00:32:47
Комментарии

По моему опыту, нужно фильтровать и wp_title, и the_title, чтобы охватить оба случая.

Geoffrey Geoffrey
26 мар. 2015 г. 10:59:48

Не уверен, связано ли это с устареванием, но у меня это не работает. Я пробовал комбинации и встроенные фильтры, а также новый apply_filters( 'pre_get_document_title', string $title )

landed landed
18 янв. 2017 г. 20:00:11

К сожалению, у меня тоже ничего не сработало.

Debbie Kurth Debbie Kurth
8 июн. 2019 г. 08:46:46

Этот ответ был дан почти 6 лет назад; как автор (и человек, который больше не работает активно с WP), я бы рекомендовал обратиться к последней документации.

nickb nickb
9 июн. 2019 г. 22:33:46
0

Если вы используете All In One Seo версии 4 и выше, используйте этот фильтр:

add_filter( 'aioseo_title', 'aioseo_filter_title' );

function aioseo_filter_title( $title ) {
   if ( is_singular() ) {
      return $title . 'дополнительный текст для заголовка здесь';
   }
   return $title;
}
29 окт. 2021 г. 14:04:28
2
-1

На самом деле, самый простой способ сделать это — использовать одну строку JavaScript.

Поместите следующий код в шаблон:

<script>document.title = "<?php echo $new_title; ?>";</script>

Этот код не обязательно должен находиться в заголовке HTML, его можно поместить в тело HTML.

5 сент. 2020 г. 08:14:55
Комментарии

Это не очень хорошо для SEO.

Alex Cook Alex Cook
21 нояб. 2020 г. 02:57:00

@AlexCook Ты абсолютно прав. Я работал над быстрым исправлением для чего-то, где SEO не имело значения. Теперь я совсем забыл, для чего это использовалось. Лол.

Feng Jiang Feng Jiang
21 нояб. 2020 г. 17:29:12