Mengapa itu tidak muncul?
Ketika Anda melihat sumber the_date()fungsi, maka Anda akan melihat dua GLOBALS:
global $currentday, $previousday;
Dan kemudian ada aturan jika ada tanggal untuk tampilan ... atau tidak. Cek ini mirip dengan yang dilakukan dengan is_new_day():
if ( $currentday != $previousday ) {
// show date
// Set global
$previousday = $currentday;
}
// else
return null;
Seperti yang Anda lihat, pengaturan $previousdaylangsung diatur ke $currentday;. Jadi itu akan di-echo sekali. Tepat setelah itu, kedua hari itu sama dan cek akan gagal. Itulah alasan mengapa posting pertama Anda menampilkannya, tetapi yang lain tidak menunjukkannya.
Mengapa ini terlihat?
Jika Anda bertanya pada diri sendiri mengapa itu menunjukkan lebih dari satu tanggal, setelah global dinuadisasi, maka Anda harus melihatnyasetup_postdata() . Fungsi ini dipanggil oleh the_post();dan bertanggung jawab untuk mengatur segala sesuatu untuk satu posting di loop.
if ( have_posts() )
{
while ( have_posts() )
{
the_post(); # <-- Calls setup_postdata( $post );
// your loop stuff here
}
}
Internal setup_postdata()cukup mudah untuk dipahami (setidaknya untuk apa global ditetapkan):
$currentday = mysql2date('d.m.y', $post->post_date, false);
$currentmonth = mysql2date('m', $post->post_date, false);
Jadi bagian yang bergerak adalah $previousdayterhadap mana $currentdayglobal diatur dan diperiksa. Dan kecuali ada hari baru , the_date()tidak akan menampilkan apa pun.
Cukup atur posting Anda ke hari yang sama sekali berbeda dan tiba-tiba Anda akan melihat tanggal muncul di setiap posting.
Apa ide di balik itu?
Sebenarnya idenya cukup sederhana dan hadir sejak v0.7.1 - setidaknya ini adalah apa yang phpDocBlock menyatakan: Mengapa Anda ingin menampilkan tanggal untuk setiap posting di arsip? Arsip terlihat seperti ini:
+--------------+
| 28.10.2014 |
+--------------+
| Post Title A |
| Post Title B |
+--------------+
| 29.10.2014 |
+--------------+
| Post Title C |
| Post Title D |
+--------------+
Anda tidak setuju dengan itu? Nah, maka Anda hanya menggunakan fungsi yang dimaksudkan untuk menjadi sesuatu yang sama sekali berbeda.
Mengapa ini get_the_date()bekerja dan bagaimana menggunakannya dengan cara yang benar
Itu tidak terpengaruh oleh if / else dalam the_date()fungsi (global memeriksa). Itu juga tidak memiliki filter. Bagaimana cara memperbaikinya? Sederhana:
echo apply_filters( 'the_date', get_the_date(), get_option( 'date_format' ), '', '' );
Ini menambahkan semua panggilan balik yang dilampirkan pada the_datefilter ke output khusus Anda. Ini juga menggunakan pengaturan date_formatopsi default sebagai default - yang digunakan oleh the_date()juga. Dan itu menghindari apa pun beforedan afternilai - lagi, persis seperti the_date()fungsinya.