使用_time和_date函数时的区别

时间:2014-08-12 作者:AndreaNobili

我对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 是相同的,所以函数return 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\'.
那么,究竟是什么代表了S 2变量呢?如果它们相同,为什么不返回日期?如何解决此问题并显示日期?

2 个回复
SO网友:Otto

出于历史博客的原因,the_date 在WordPress中,不会连续两次显示同一日期。这是为了分组。

解决方法很简单:使用the_time 相反其行为与the_date, 但没有内在的历史逻辑。也不需要重写任何复杂的代码,只需更改三个字符即可

注:the_time 缺少before、after和echo参数,但这没关系,因为您确实不需要它们。它总是echo的,您可以很容易地将前后参数围绕在它周围。正如我所说,有历史原因导致the_date, 除非在通常不再适用的特定情况下,否则没有意义。

SO网友:Rarst

正如它所说,这里有它的内联文档-该函数的目的是“每个日期只输出一次”结果。在典型的按时间顺序循环的帖子中,对于当天发布的帖子,它会“崩溃”。在不太典型的循环中,它可能会导致非常奇怪的输出。

如果您在版本控制历史中挖掘得足够深入,您可能会找到它的原因。

从实际的角度来看,你应该只看源代码并去掉它get_the_date() 无需所有“一次一次”逻辑即可获得相同的内容。

结束

相关推荐

WordPress edit.php类别过滤器仅显示来自直接类别的帖子,而不显示来自其子类别的帖子

在管理编辑。php页面,当我按特定类别过滤帖子时(使用内置下拉列表),它会显示与该类别相关的所有帖子,以及“在”其子类别下的所有帖子。如何更改此功能,以便在按类别筛选时只显示该类别中的帖子,而不显示子类别中的帖子。非常感谢您的帮助,因为我在网上找不到有关此的任何信息。非常感谢。