Почему это не показывает?
Когда вы посмотрите на источник 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()
функция.
Не используйте
the_date()
, вместо этого используйтеthe_time()
.the_date возвращает только дату, the_time возвращает дату + время. Я не знаю, почему WordPress не будет возвращать более чем одну дату , когда
the_date
используется в цикле. Но это связано с тем, что значение одинаково. Если вы используетеthe_time
значение, никогда не бывает одинаковым, поэтому оно всегда возвращает значение. Таким образом, вы можете напечатать что-то вроде<?php the_time('F j, Y'); ?>
Эта ссылка из кодекса объясняет, как the_date работает намного лучше, чем я.
источник
Грубая сила это.
Работал для меня, отображает полную дату, время для каждого сообщения независимо от того, совпадает ли это дата или нет.
источник
Он появляется только один раз, потому что так будет работать дневник. Она будет отображать дату вверху, а вы будете писать свои записи под ней. Я использую этот код для отображения даты каждого сообщения, используя the_time.
Для получения дополнительной информации я написал об этом здесь: Почему функция the_date () в WordPress отображается только один раз в первом посте
источник