Как динамически изменить заголовок страницы?
Возможно ли изменить заголовок страницы с помощью кода?
Например, допустим, название страницы "Оформить заказ", но я хочу изменить его на "Заказ #123".
Я поискал в Google и посмотрел здесь, но ничего не нашел. Кто-нибудь знает подходящий плагин или способ?
wp_title возвращает заголовок страницы, но не позволяет его установить: http://codex.wordpress.org/Function_Reference/wp_title
Хотя официальной документации по этому поводу нет, вы всегда можете применить фильтр к the_title
следующим образом:
add_filter('the_title','some_callback');
function some_callback($data){
global $post;
// где $data будет строкой(#) "текущий заголовок"
// Пример:
// (вам нужно будет заменить $post->ID на способ получения номера заказа книги,
// но здесь показан принцип работы с global $post;)
return 'Номер заказа книги #' . $post->ID;
}
Смотрите также:

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

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

Начиная с 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;
}

Для тех, кто хочет изменить атрибут title
документа, я обнаружил, что использование фильтра wp_title
больше не работает. Вместо этого используйте фильтр pre_get_document_title
:
add_filter("pre_get_document_title", "my_callback");
function my_callback($old_title){
return "Мой изменённый заголовок";
}

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

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

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

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

Если вы используете All In One Seo версии 4 и выше, используйте этот фильтр:
add_filter( 'aioseo_title', 'aioseo_filter_title' );
function aioseo_filter_title( $title ) {
if ( is_singular() ) {
return $title . 'дополнительный текст для заголовка здесь';
}
return $title;
}

На самом деле, самый простой способ сделать это — использовать одну строку JavaScript.
Поместите следующий код в шаблон:
<script>document.title = "<?php echo $new_title; ?>";</script>
Этот код не обязательно должен находиться в заголовке HTML, его можно поместить в тело HTML.
