Я иногда сталкиваюсь с этой проблемой и не уверен, что ее вызывает, какие-то идеи?
<?php get_header(); ?> <div class="content" role="main"> <h1><?php the_title(); ?></h1> <?php get_template_part( 'loop', 'index' ); ?> </div> <?php get_footer(); ?>
Для нормальной страницы the_title возвращает «Название страницы».
Но для блога (используя loop.php, как в индексном файле выше) он возвращает «Заголовок первой записи».
Есть идеи?
the_title
– это тег Loop. Он «Отображает или возвращает заголовок текущего сообщения», и предполагается, что он используется внутри цикла, а не за его пределами.
То, что вы делаете – вызывая его за пределами Loop – не совсем правильно, и вы получаете непоследовательные результаты. Что происходит, так это:
$post
устанавливается на первое сообщение в Loop в начале загрузки страницы. Для некоторых страниц, таких как страницы с одиночными сообщениями, в которых есть только одна запись в Loop, это означает, что $post
– это «страница, на которой вы находитесь» – более или менее. Для архивных страниц это первая страница в Loop. Вы можете поместить var_dump($post);
перед wp_head
и убедитесь, что переменная уже установлена. the_title
используют глобальную переменную $post
. Вы должны проследить его через пару функций, чтобы добраться туда, но в конце концов вы попадаете в функцию get_post
и вы можете видеть в источнике, что это так. В этом случае цепочка – это the_title
-> get_the_title
-> get_post
Итак, то, что вы описываете, именно то, что должно происходить. Вы неправильно используете тег. Он иногда работает так, как вы хотите, только из-за причуды кода. На самом деле это не должно работать так, как мне кажется.
Если вы хотите, чтобы страница, на которой вы находитесь, вам иногда нужно использовать get_queried_object
, но смотрите ее, поскольку она возвращает разные виды данных в зависимости от страницы, а для некоторых страниц возвращает NULL
. В других случаях вам лучше использовать is_home
, is_category
и т. Д., Чем вы в зависимости от данных запроса. На самом деле, в большинстве случаев вам лучше с этими условностями или просто с вызовом wp_title
как предлагает toscho, но контекст, который вы пытаетесь использовать, заставляет меня задаться вопросом, правильно ли это. Кроме того, вывод wp_title
может быть и часто управляется плагинами (например, плагинами SEO), которые могут или не могут быть тем, что вы хотите.
На страницах архива – блоге, году, категории и т. Д. – используйте wp_title()
чтобы получить заголовок страницы. the_title()
полагается на данные одного сообщения.
На страницах архива – блоге, году, категории и т. Д. – используйте single_cat_title()
чтобы получить заголовок страницы. Надеюсь, это поможет вам
Сегодня просто поразила то же самое, но я нашел отличное решение:
<?php if ( is_front_page() ) { echo "Home"; } else if (is_single()) { // POST, not needed for my site echo ""; } else if (is_page()) { // PAGE echo get_the_title(); } else if(is_category()) { $arr = get_the_category(); if ( ! empty( $arr ) ) { echo esc_html( $arr[0]->name ); } }