Почему это не показывает?
Когда вы посмотрите на источник the_date()
функции, вы увидите две глобальные переменные:
global $currentday, $previousday;
И затем есть правило, если есть дата для отображения ... или нет. Проверка аналогична проверке, выполняемой с is_new_day()
:
if ( $currentday != $previousday ) {
// show date
// Set global
$previousday = $currentday;
}
// else
return null;
Как видите, $previousday
моментально устанавливается на $currentday;
. Так что это повторяется один раз. Сразу после этого оба дня совпадают, и проверка не пройдёт. Вот почему ваш первый пост отображает его, но другие не показывают его.
Почему это показывает?
Если вы спросите себя, почему тогда отображается более одной даты, после того, как глобализация будет эквализована, вам придется взглянуть наsetup_postdata()
нее . Эта функция the_post();
вызывается и отвечает за настройку всего для одного сообщения в цикле.
if ( have_posts() )
{
while ( have_posts() )
{
the_post(); # <-- Calls setup_postdata( $post );
// your loop stuff here
}
}
Внутренние setup_postdata()
элементы довольно просты для понимания (по крайней мере для того, что устанавливаются глобальные):
$currentday = mysql2date('d.m.y', $post->post_date, false);
$currentmonth = mysql2date('m', $post->post_date, false);
Таким образом, движущаяся часть - это то, $previousday
против чего $currentday
устанавливается и проверяется глобал. И если не будет нового дня , the_date()
ничего не будет отображаться.
Просто установите ваши сообщения на совершенно разные дни, и внезапно вы увидите дату появления на каждом сообщении.
Что за идея стоит за этим?
На самом деле идея довольно проста и присутствует начиная с v0.7.1 - по крайней мере, так говорит phpDocBlock: почему вы хотите отображать дату каждого поста в архиве? Архив выглядит так:
+--------------+
| 28.10.2014 |
+--------------+
| Post Title A |
| Post Title B |
+--------------+
| 29.10.2014 |
+--------------+
| Post Title C |
| Post Title D |
+--------------+
Вы не согласны с этим? Ну, тогда вы просто используете функцию, которая должна была быть чем-то совершенно другим.
Почему get_the_date()
работа и как использовать его на правильный путь
На него не влияет if / else в the_date()
функции (проверка глобалов). Он также делает не имеет фильтра. Как это исправить? Просто:
echo apply_filters( 'the_date', get_the_date(), get_option( 'date_format' ), '', '' );
Это добавляет любые обратные вызовы, прикрепленные к the_date
фильтру, к вашему пользовательскому выводу. Он также использует date_format
параметр по умолчанию как параметр по умолчанию - который также используется the_date()
. И он избегает любых before
и after
значений - опять же, в точности как the_date()
функция.