Aynı tarihte başka bir yayın varsa yayın tarihi göstermiyor


19

Özel yayın türüm "bas". ve bu türdeki yayınları sorgulayan bir sayfa şablonu oluşturdu. Yayınların yayınlanma tarihlerini göstermesi gerekir, ancak aynı tarihe sahip birden fazla yayın varsa, yalnızca ilk yayın tarihi gösterir, diğerleri yayınlamaz. Her gönderinin tarihini göstermenin bir yolu var mı?

resim açıklamasını buraya girin

<?php get_header(); ?>
<?php
$wp_query = new WP_Query();
$wp_query -> query('post_type=press&showposts=100');
while ($wp_query->have_posts()) : $wp_query->the_post(); ?>
<div id="press">
<div class="press-item cf">
<div class="press-img"><a href="<?php the_field('link'); ?>"><?php the_post_thumbnail('medium');?></a> </div>
<div class="press-content">
<div class="press-title"><a href="<?php the_field('link'); ?>"><?php echo get_the_title(); ?></a> </div>
<div class="press-excerpt"><?php the_excerpt(); ?> </div>
<div class="press-date"><?php the_date(); ?></div>
</div>
</div>
</div>
<?php endwhile;  ?>
<?php get_footer(); ?>

Yanıtlar:


40

Tarih fonksiyonumu değiştirdiğim için geçmişte benzer bir sorunla karşılaştım. Ve sonra yalnızca her gönderinin farklı bir tarihi varsa gönderiler tarih görüntülüyordu, aksi takdirde boş döndü.

<?php echo get_the_date(); ?>Bunun yerine eklemeyi deneyin .


26

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, $previousdayanı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 $previousdaykonulduğu $currentdayve 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_datefiltreye iliştirilmiş tüm geri aramaları özel çıktınıza ekler . Ayrıca varsayılan date_formatolarak varsayılan seçenek ayarını kullanır - bu da tarafından kullanılır the_date(). Ve herhangi bir değerden beforeve afterdeğerlerden kaçınır - tekrar, tam olarak the_date()işlev olarak.


1
Teşekkürler kaiser. Bu, bazen tarih yazdırmanın neden başarısız olduğunu açıklar. Çok teşekkürler.
Robert hue

1
Çok kapsamlı bir açıklama. Kabul edilen cevaptan daha iyi.
Nilambar Sharma

1
@Nilambar Kabul edilen cevap tl; dr sürümü ve mükemmel para cezası :)
kaiser

Bu @kaiser kazma sahne - böyle sıradan bir konuda hiç beklediğimden daha fazla fikir
serraosays

1
Bu cevap WP dokümanlarının açıklamasından daha iyidir.
Ian

10

Kullanmayın the_date(), kullanın the_time().

the_date yalnızca tarihi, the_time tarihi + saati döndürür. the_dateBir döngüde kullanıldığında wordpress'in birden fazla tarih döndürmemesinin nedenini bilmiyorum . Ancak, değerin aynı olması gerçeğiyle ilgilidir. the_timeDeğeri kullanırsanız asla aynı olmaz, bu nedenle her zaman değeri döndürür. Böylece şöyle bir şey yazdırabilirsiniz<?php the_time('F j, Y'); ?>

Kodeks Bu bağlantı , the_date benden daha iyi nasıl çalışır açıklar.


1

Kaba kuvvet onu.

<?php the_time('F j, Y'); ?> - <?php the_time(); ?>

Benim için çalıştı, aynı tarih olsun ya da olmasın, her yazı için tam tarih, saat görüntüler.


0

Sadece bir kez görünür, çünkü bir günlük böyle çalışır. En üstteki tarihi gösterir ve girişlerinizi altına yazarsınız. Ben bu kodu kullanarak ekran her yazı için the_time kullanarak tarihleri ​​kullanın.

<?php the_time(get_option('date_format')); ?>

Daha fazla bilgi için burada bir öğretici yazdım: Neden WordPress'teki the_date () işlevi sadece ilk yazıda bir kez görünüyor


Kendi ürününüzü / blogunuzu tanıtmak istiyorsanız , bağlılığınızı ifşa etmeniz gerektiğini lütfen unutmayın ; aksi takdirde yanıtınız spam olarak işaretlenebilir. Lütfen nasıl spam gönderilmez
DavidPostill
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.