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