なぜ表示されないのですか?
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()
機能。