Отображение заголовка страницы в index.php
У меня страница записей настроена как index.php
, и на ней есть главный заголовок (как и на всех страницах).
У меня возникли проблемы с отображением заголовка страницы. Страница называется 'Blog' в WordPress и установлена как страница записей.
Если я вывожу заголовок страницы с помощью wp_title('');
, я получаю название страницы — 'Blog' — но с названием сайта после него (возможно, из-за плагина Yoast SEO).
Если я использую the_title()
, то получаю заголовок самой последней записи блога, даже несмотря на то, что вызываю функцию вне цикла.
Поэтому мне пришлось прибегнуть к простому жесткому кодированию <h1>Blog</h1>
, что далеко не идеальное решение.
Есть ли способ динамически получить название страницы, но только сам заголовок страницы без дополнительных элементов?
Странно. Вне цикла функция the_title() должна возвращать название текущей страницы, если вы действительно находитесь на странице, а не просматриваете конкретную запись. Если она возвращает название записи, это может означать, что вы каким-то образом находитесь внутри цикла. Но если бы это было так, wp_title не должен показывать "Blog".
Попробуйте другие варианты, чтобы проверить результат:
//the_title();
single_post_title();
echo $post->post_name; // Должно показывать название страницы для URL
Также проверьте с помощью is_page(). Можете попробовать тест is_page('Blog').
if (is_page('blog')) {
echo 'Blog';
}
else {
the_title();
}
Просто чтобы посмотреть, что произойдет.

извините за сильно запоздалый ответ, single_post_title();
похоже работает, я воспользуюсь этим! ;)

Это верно, что the_title()
на странице блога возвращает заголовок самой последней записи, поэтому его нельзя использовать.
Когда страница установлена как "страница записей" в настройках чтения, WordPress использует шаблонный файл home.php
(или index.php
, если home.php
не существует) вместо page.php
(см.: Иерархия шаблонов).
Таким образом, условный тег is_page()
не будет работать на странице блога, потому что это уже не страница.
Единственный способ вывести фактический заголовок страницы — использовать single_post_title();
single_post_title()
является частью файла general-template.php, где четко указано:
Если мы находимся на странице блога, и эта страница не является главной или отдельной страницей, назначенной как главная, используйте заголовок контейнерной страницы.
Вы можете ознакомиться с кодом и комментариями здесь: https://core.trac.wordpress.org/browser/tags/4.4/src/wp-includes/general-template.php#L871

Сначала необходимо проверить, является ли это страницей блога. Затем, если условие верно, использовать функцию single_post_title()
.
( ( !is_front_page() && is_home() ) ? single_post_title() : the_title() );
Здесь предполагается, что страница блога не является главной страницей.
is_page()
не будет работать, так как страница блога в WordPress больше не считается страницей.

Я знаю, что с момента оригинального поста прошло много времени, но надеюсь, это поможет другим, кто пришел сюда в поисках того же решения.
Функция single_post_title() работает для страниц, но перестает работать на страницах блога и категорий (а также, предположительно, на страницах товаров и меток в WooCommerce).
Поэтому сначала просто проверяем, является ли это страницей, в противном случае используем функцию wp_title:
if (is_page()) {
single_post_title();
} else {
echo rtrim(wp_title('', false), '- ');
}
Мне действительно пришлось убрать название сайта из настроек, но я в любом случае добавлял его вручную по обе стороны от этой функции.

В WordPress есть два способа получить заголовок записи/страницы.
get_the_title();
и the_title();
Как использовать get_the_title();
<h1 class="entry-header text-primary fst-italic"><?php echo esc_html( get_the_title() ); ?></h1>
Как использовать the_title();
the_title('<h1 class="entry-title text-primary fst-italic">', '</h1>');
В чем разница между get_the_title();
и the_title();
?
the_title();
выводит значение (echo), а get_the_title();
не выводит, а только возвращает значение.
Это стандарт для функций WordPress: функции, начинающиеся с the_
, выводят то, что возвращают соответствующие функции с префиксом get_
. У других функций есть параметр для выбора вывода или нет, а некоторые только возвращают значения.
