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 $previousday
langsung 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 $previousday
terhadap mana $currentday
global 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_date
filter ke output khusus Anda. Ini juga menggunakan pengaturan date_format
opsi default sebagai default - yang digunakan oleh the_date()
juga. Dan itu menghindari apa pun before
dan after
nilai - lagi, persis seperti the_date()
fungsinya.