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.
Jangan gunakan
the_date()
, sebaliknya gunakanthe_time()
.the_date mengembalikan tanggal saja, the_time mengembalikan tanggal + waktu. Saya tidak tahu alasan mengapa wordpress tidak akan mengembalikan lebih dari satu tanggal ketika
the_date
digunakan dalam satu lingkaran. Tetapi itu ada hubungannya dengan fakta bahwa nilainya sama. Jika Anda menggunakanthe_time
nilai tidak pernah sama, karena itu selalu mengembalikan nilainya. Jadi, Anda dapat mencetak sesuatu seperti<?php the_time('F j, Y'); ?>
Tautan ini dari kodeks, menjelaskan cara kerja the_date jauh lebih baik daripada saya.
sumber
Brute paksa itu.
Bekerja untuk saya, menampilkan tanggal penuh, waktu untuk setiap posting terlepas dari apakah itu tanggal yang sama atau tidak.
sumber
Itu hanya muncul sekali karena itulah cara buku harian akan bekerja. Ini akan menunjukkan tanggal di bagian atas dan Anda akan menulis entri Anda di bawahnya. Saya menggunakan kode ini, menampilkannya tanggal untuk setiap posting menggunakan the_time.
Untuk info lebih lanjut saya menulis tutorial tentang hal itu di sini: Mengapa the_date () Berfungsi di WordPress Hanya Muncul Sekali pada Posting Pertama
sumber