Чому це не відображається?
Якщо ви подивитесь на джерело 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()
робота і як використовувати його на правильний шлях
На нього не впливає the_date()
функція if / else (перевірка глобалів). Він також робить НЕ має фільтра. Як це виправити? Простий:
echo apply_filters( 'the_date', get_the_date(), get_option( 'date_format' ), '', '' );
Це додає будь-які зворотні дзвінки, приєднані до the_date
фільтра, до вашого власного виводу. Він також використовує date_format
параметр опції за замовчуванням як за замовчуванням - який також використовується the_date()
. І це уникає будь-яких before
і after
значень - знову ж таки, саме як the_date()
функція.