なぜ表示されないのですか?
the_date()関数のソースを見ると、2つのグローバルに気付くでしょう。
global $currentday, $previousday;
そして、表示する日付があるかどうかのルールがあります... このチェックは、次のチェックと同様is_new_day()です。
if ( $currentday != $previousday ) {
    // show date
    // Set global
    $previousday = $currentday;
}
// else
return null;
ご覧のように、$previousdayすぐにに設定され$currentday;ます。したがって、一度エコーされます。その直後、両方の日が同じであり、チェックは失敗します。それが最初の投稿が表示する理由ですが、他の投稿は表示しません。
なぜ表示されるのですか?
グローバルが正常化された後、なぜ複数の日付を表示するのかを自問する場合は、を確認setup_postdata()する必要があります。この関数はによって呼び出されthe_post();、ループ内の単一の投稿のすべてを設定します。
if ( have_posts() )
{
    while ( have_posts() )
    {
        the_post(); # <-- Calls setup_postdata( $post );
        // your loop stuff here
    }
}
の内部構造setup_postdata()は非常に簡単に理解できます(少なくともグローバルが設定されるものまで):
$currentday = mysql2date('d.m.y', $post->post_date, false);
$currentmonth = mysql2date('m', $post->post_date, false);
したがって、可動部分は$previousday、$currentdayグローバルが設定およびチェックされる対象です。そして、新しい日がない限り、the_date()何も表示しません。
投稿をまったく別の日に設定するだけで、突然各投稿に日付が表示されます。
その背後にある考え方は何ですか?
実際には、v0.7.1以降、アイデアは非常にシンプルであり、少なくともこれはphpDocBlockの状態です:アーカイブ内の各投稿の日付を表示したいのはなぜですか?アーカイブは次のようになります。
+--------------+
| 28.10.2014   |
+--------------+
| Post Title A |
| Post Title B |
+--------------+
| 29.10.2014   |
+--------------+
| Post Title C |
| Post Title D |
+--------------+
あなたはそれに同意しませんか?さて、あなたは単にまったく違うものを意図した関数を使用しています。
なぜ機能しget_the_date()、それを正しい方法で使用するか
the_date()関数内のif / elseの影響を受けません(グローバルチェック)。また、フィルターもありません。それを修正する方法は?シンプル:
echo apply_filters( 'the_date', get_the_date(), get_option( 'date_format' ), '', '' );
これにより、the_dateフィルターにアタッチされたコールバックがカスタム出力に追加されます。また、デフォルトのdate_formatオプション設定をデフォルトとして使用します。これもthe_date()同様に使用されます。そして、それは任意の回避beforeとafterまったく同じように、再び-値をthe_date()機能。