Отображение заголовка страницы в index.php

29 дек. 2014 г., 14:45:22
Просмотры: 30.9K
Голосов: 4

У меня страница записей настроена как index.php, и на ней есть главный заголовок (как и на всех страницах).

У меня возникли проблемы с отображением заголовка страницы. Страница называется 'Blog' в WordPress и установлена как страница записей.

Если я вывожу заголовок страницы с помощью wp_title('');, я получаю название страницы — 'Blog' — но с названием сайта после него (возможно, из-за плагина Yoast SEO).

Если я использую the_title(), то получаю заголовок самой последней записи блога, даже несмотря на то, что вызываю функцию вне цикла.

Поэтому мне пришлось прибегнуть к простому жесткому кодированию <h1>Blog</h1>, что далеко не идеальное решение.

Есть ли способ динамически получить название страницы, но только сам заголовок страницы без дополнительных элементов?

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

Во-первых, wp_title() используется для отображения и подключения к элементу title документа. Во-вторых, вам вообще не следует вызывать the_title() вне цикла. В-третьих, предоставьте исходный код index.php. the_title() работает корректно при правильном использовании ;-)

tacudtap tacudtap
16 февр. 2015 г. 03:10:50

Могу подтвердить, что сталкиваюсь с таким же специфическим поведением. А именно: заголовок самой последней записи блога используется как заголовок страницы вместо собственного заголовка страницы.

Clarus Dignus Clarus Dignus
16 сент. 2019 г. 00:30:27
Все ответы на вопрос 6
4

Странно. Вне цикла функция 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();
}

Просто чтобы посмотреть, что произойдет.

16 февр. 2015 г. 02:20:14
Комментарии

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

User User
21 мая 2015 г. 15:08:23

Почему бы не использовать объект wp_query? $wp_query->query[pagename]

nodws nodws
3 мая 2019 г. 02:12:36

single_post_title(); дает желаемый результат.

Clarus Dignus Clarus Dignus
16 сент. 2019 г. 00:29:32

Определенно single_post_title().

Dragi Postolovski Dragi Postolovski
30 янв. 2021 г. 02:37:44
0

Это верно, что 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

5 янв. 2016 г. 19:53:50
2
$our_title = get_the_title( get_option('page_for_posts', true) ); // Получаем заголовок страницы блога
7 июл. 2017 г. 13:33:08
Комментарии

Пожалуйста, [отредактируйте] ваш ответ и добавьте объяснение: почему это может решить проблему?

fuxia fuxia
7 июл. 2017 г. 16:35:26

это работает! ха-ха

Iggy Iggy
2 июн. 2019 г. 05:42:15
0

Сначала необходимо проверить, является ли это страницей блога. Затем, если условие верно, использовать функцию single_post_title().

( ( !is_front_page() && is_home() ) ? single_post_title() : the_title() );

Здесь предполагается, что страница блога не является главной страницей.

is_page() не будет работать, так как страница блога в WordPress больше не считается страницей.

21 мар. 2024 г. 23:15:35
0

Я знаю, что с момента оригинального поста прошло много времени, но надеюсь, это поможет другим, кто пришел сюда в поисках того же решения.

Функция single_post_title() работает для страниц, но перестает работать на страницах блога и категорий (а также, предположительно, на страницах товаров и меток в WooCommerce).

Поэтому сначала просто проверяем, является ли это страницей, в противном случае используем функцию wp_title:

if (is_page()) {
    single_post_title();
} else {
    echo rtrim(wp_title('', false), '- ');
}

Мне действительно пришлось убрать название сайта из настроек, но я в любом случае добавлял его вручную по обе стороны от этой функции.

28 мар. 2018 г. 12:39:47
0

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

7 июн. 2021 г. 03:58:57