Neden gösterilmiyor?
the_date()
İşlevin kaynağına baktığınızda, iki global fark edeceksiniz:
global $currentday, $previousday;
Ve sonra gösterilecek bir tarih varsa bir kural var ... ya da değil. Kontrol aşağıdakilerle yapılana benzer is_new_day()
:
if ( $currentday != $previousday ) {
// show date
// Set global
$previousday = $currentday;
}
// else
return null;
Gördüğünüz gibi, $previousday
anında ayarlanır $currentday;
. Böylece bir kez yankılanır. Bundan hemen sonra, her iki gün aynıdır ve kontrol başarısız olacaktır. İlk yayınınızın görüntülenmesinin nedeni budur, ancak diğerleri bunu göstermez.
Neden gösteriyor?
Kendinize bunun neden birden fazla tarih gösterdiğini sorarsanız, küresel euqalized olduktan sonra, bir gözsetup_postdata()
atmanız gerekir . Bu işlev çağrılır the_post();
ve döngüdeki tek bir gönderi için her şeyi ayarlamaktan sorumludur.
if ( have_posts() )
{
while ( have_posts() )
{
the_post(); # <-- Calls setup_postdata( $post );
// your loop stuff here
}
}
İç kısımlarını setup_postdata()
anlamak oldukça kolaydır (en azından küresellerin belirlediği şeye):
$currentday = mysql2date('d.m.y', $post->post_date, false);
$currentmonth = mysql2date('m', $post->post_date, false);
Yani hareketli kısım, küresel olanın $previousday
konulduğu $currentday
ve kontrol edildiği yerdir. Olmadıkça Ve yeni güne , the_date()
hiçbir şey göstermez.
Sadece yayınlarınızı tamamen farklı günlere ayarlayın ve aniden her yazıda tarihin göründüğünü göreceksiniz.
Bunun arkasındaki fikir nedir?
Aslında fikir v0.7.1'den beri oldukça basit ve mevcut - en azından phpDocBlock'un belirttiği şey: Neden bir arşivdeki her gönderinin tarihini görüntülemek istersiniz? Bir arşiv şöyle görünür:
+--------------+
| 28.10.2014 |
+--------------+
| Post Title A |
| Post Title B |
+--------------+
| 29.10.2014 |
+--------------+
| Post Title C |
| Post Title D |
+--------------+
Buna katılmıyor musunuz? O zaman, tamamen farklı bir şey olması amaçlanan bir işlevi kullanıyorsunuz.
Neden get_the_date()
çalışır ve doğru şekilde nasıl kullanılır
the_date()
İşlevdeki if / else işlevinden etkilenmez (genel denetim). Ayrıca filtreye sahip değildir . Bunu nasıl düzeltirim? Basit:
echo apply_filters( 'the_date', get_the_date(), get_option( 'date_format' ), '', '' );
Bu, the_date
filtreye iliştirilmiş tüm geri aramaları özel çıktınıza ekler . Ayrıca varsayılan date_format
olarak varsayılan seçenek ayarını kullanır - bu da tarafından kullanılır the_date()
. Ve herhangi bir değerden before
ve after
değerlerden kaçınır - tekrar, tam olarak the_date()
işlev olarak.