web-dev-qa-db-ja.com

The_time関数とthe_date関数を使用するときの違い

WordPressの the_date() 関数が general-template.php に定義されている仕組みについて疑問があります。

このコードスニペットを使って、投稿アーカイブをページにまとめてループを表示します。

<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>                              

    <header>

        <h3 class="entry-title">
                <a href="<?php the_permalink(); ?>" 
                   title="<?php printf(__('Permalink to %s', 'your-theme'), the_title_attribute('echo=0')); ?>"
                   rel="bookmark"><?php the_date("d/m/Y");  echo " - "; the_title(); ?>
                </a>

        </h3>

    </header>

</article>  <!-- #post-<?php the_ID(); ?> -->

問題は、いくつかの投稿では the_date() 関数が投稿の日付を教えてくれるし、他の投稿ではそうではないということです。

私が得たもののスクリーンショットを添付します。

enter image description here

ご覧のとおり、いくつかの投稿は次のように表示されます。 DATE - POST TITLE しかし他の投稿は POST TITLE なしで表示されます投稿タイトルの前の日付。

すべての投稿に公開日があるため、これは私には非常に奇妙に思えます。

だから私はデバッガを使ってみて、 the_date() 関数がこのコードを持っているとどうなるか見てみましょう:

function the_date( $d = '', $before = '', $after = '', $echo = true ) {
    global $currentday, $previousday;

    if ( $currentday != $previousday ) {
        $the_date = $before . get_the_date( $d ) . $after;
        $previousday = $currentday;

        /**
         * Filter the date a post was published for display.
         *
         * @since 0.71
         *
         * @param string $the_date The formatted date string.
         * @param string $d        PHP date format. Defaults to 'date_format' option
         *                         if not specified.
         * @param string $before   HTML output before the date.
         * @param string $after    HTML output after the date.
         */
        $the_date = apply_filters( 'the_date', $the_date, $d, $before, $after );

        if ( $echo )
            echo $the_date;
        else
            return $the_date;
    }

    return null;
}

そしてそれはこの条件付きステートメントを含みます:

if ( $currentday != $previousday ) {

そして、いくつかの投稿では $ currentday $ previousday の値は同じなので関数 nullを返す

私が見つけることができる関数のドキュメントも読んでください。

/**
 * Display or Retrieve the date the current post was written (once per date)
 *
 * Will only output the date if the current post's date is different from the
 * previous one output.
 *
 * i.e. Only one date listing will show per day worth of posts shown in the loop, even if the
 * function is called several times for each post.
 *
 * HTML output can be filtered with 'the_date'.
 * Date string output can be filtered with 'get_the_date'.

それで、正確に何が2変数を表しますか?そして、それらが同じであると日付が返されないのはなぜですか?この問題を解決して日付を表示する方法を教えてください。

1
AndreaNobili

歴史的なブログの理由から、WordPressのthe_dateは同じ日付を2回続けて表示しません。これはグループ化の目的のためです。

修正は簡単です。代わりにthe_timeを使用してください。これはthe_dateと全く同じように振る舞いますが、内部の歴史的な論理はありません。また、複雑なコードを書き換える必要もなく、3文字を変更するだけです。 :)

注:the_timeにはbefore、after、echoの各パラメータがありませんが、実際には必要ないので問題ありません。それは常に反響しており、前後のパラメータを簡単に囲むことができます。私が言ったように、the_dateの操作上の振る舞いには歴史的な理由がありますが、一般的にはもう適用されない特定の状況を除いて意味がありません。

2
Otto

それが正しく言うのと同様に、そのインラインドキュメントがあります - 関数は結果を「一日に一回」だけ出力することを意図しています。投稿の典型的な時系列のループでは、同じ日に投稿された投稿に対しては「崩壊」します。それほど典型的ではないループでは、それはかなり奇妙な出力につながるかもしれません。

バージョン管理の歴史を深く掘り下げると、その理由を掘り下げることができるかもしれません。

実用的な観点からは、ソースを覗いて、get_the_date()が同じものをすべて「一回」のロジックに含まないものにしてください。

1
Rarst