On this day PHP code

时间:2012-05-27 作者:Pat

我正在为一篇“今天”类型的帖子编写这段代码片段。然而,它只显示了过去1年的情况。我希望能将其自动化,以便在2009年、2010年、2011年的今天显示出来。。。随着岁月的流逝,让这些岁月不断展现。按照a-1,-2的编写方式,它将是动态的“一年前”,而不是静态的“2009年”。

有没有一种方法可以使这一过程自动化,可以追溯到2、3、4年前,而不必为(-2、-3、-4等)复制代码?

function on_this_day() {
$on_this_day = get_posts(\'year=\'.(date(\'Y\')-1).\'&monthnum=\'.date(\'n\').\'&day=\'.date(\'j\'));
if( $on_this_day ) {
    echo \'<a class="on-this-day" href="\'.get_day_link( (date(\'Y\')-1), date(\'m\'), date(\'d\')).\'" title="On This Day in \'.(date(\'Y\')-1).\'">\';
    echo \'On this day in \'.(date(\'Y\')-1);
    echo \'</a>\';
} else {
    echo \'<span class="on-this-day-none">\'.\'On this day in <span>\'.(date(\'Y\')-1).\'</span></span>\';
}

2 个回复
最合适的回答,由SO网友:Pat 整理而成

我从@moraleida获得了答案所提供的代码,并对其进行了改进,以便它可以查看发布日期,而不是服务器日期。

我还对其进行了修改,以便它可以查找该帖子每月和每天的所有帖子,并链接到它们,只要它不是显示在上面的同一个帖子ID。毕竟,既然你已经阅读了2012年1月31日的帖子,就不需要链接到自己。例如,2012年的帖子应该显示2011年的链接,2011年的帖子应该显示2012年的链接。如果你每天发布超过一次,这也是有益的。它将在当天显示这两个帖子,即使是同一年发布的。

我把它变成了一个可以变成函数的函数。php。要在模板中显示此内容,请使用<?php on_this_day(); ?> 在模板文件中。

function on_this_day(){
$on_this_day = array(
    // Build the array using post date, and omit the year
    \'monthnum\' => get_the_date(\'n\'),
    \'day\' => get_the_date(\'j\')
);

add_filter( \'posts_where\', \'filter_where\' );
$query = new WP_Query( $on_this_day );
remove_filter( \'posts_where\', \'filter_where\' );

    if( $query->have_posts() ) {
        // Uncomment this next line to echo an On this day prefix to the years.
        // echo "On this day in ";
        $postYear = get_the_date(\'Y\');

        while ($query->have_posts()) {
            $query->the_post();
            $year = get_the_time(\'Y\'); 
            $queryYear = get_the_date(\'Y\');
            $month = get_the_time(\'m\'); 
            $day = get_the_time(\'d\');  
            if ($queryYear == $postYear) { 
                // I use permalinks to link to. If you\'d rather link to the day archive list, use get_day_link($year, $month, $day) instead of get_permalink.
                // This line compares the query year to the post year. If it\'s the same year, then add "Also from" so that it doesn\'t look like a duplicate link. 
                echo \'<a class="on-this-day" href="\'.get_permalink($query->ID).\'" title="On this day in \'.$year.\' - \'.get_the_title().\'">Also from \'.$year.\' - \'.get_the_title().\'</a><br> \';
            } else {
                echo \'<a class="on-this-day" href="\'.get_permalink($query->ID).\'" title="On this day in \'.$year.\' - \'.get_the_title().\'">\'.$year.\' - \'.get_the_title().\'</a><br> \';
            }
        } 
    // Reset post data so it displays the original post. 
    wp_reset_postdata();    
     } else {
     // No posts to show
     echo "No Historical Posts On This Day";
    }
}


// Create a new filtering function that will add our where clause to the query
function filter_where( $where = \'\' ) {
    // Posts for all years before the current post date.
    //$where .= " AND post_date < \'" . get_the_date(\'Y-m-d\') . "\'";
    // Filter on post ID instead
    $where .= " AND ID <> \'" . get_the_ID() . "\'";
    return $where;
}

SO网友:moraleida

改编from the Codex, 调整WP\\u查询以获取在此之前的所有年份。

未经测试,但应该有效。

$on_this_day = array(
    // remove the year from the first query array
    \'monthnum\' => date(\'n\'),
    \'day\' => date(\'j\');
);


// Create a new filtering function that will add our where clause to the query
function filter_where( $where = \'\' ) {
    // posts for all years before this year
    $where .= " AND post_date < " . date(\'Y\');
    return $where;
}

add_filter( \'posts_where\', \'filter_where\' );
$query = new WP_Query( $on_this_day );
remove_filter( \'posts_where\', \'filter_where\' );

if( $query->have_posts() ) : while ($query->have_posts()) : $query->the_post();
    $year = get_the_time(\'Y\'); 
    $month = get_the_time(\'m\'); 
    $day = get_the_time(\'d\');            
    echo \'<a class="on-this-day" href="\'.get_day_link($year, $month, $day).\'" title="On This Day in \'.$year.\'">\';
    echo \'On this day in \'.$year;
    echo \'</a>\';

endwhile;
endif;
UPDATE更新了完整循环的代码。现在,它应该输出过去几年的链接列表,省去那些当天没有帖子的年份;

结束

相关推荐

在unctions.php中按getPostView对帖子进行排序

我在函数中有以下函数。php,允许按字母顺序或按近距排序。我想把字母顺序改为按浏览量最大的排序。这是我为分拣机准备的代码,它是一个下拉选择菜单:function sorter($wp_query) { if(mysql_real_escape_string($_REQUEST[\"sorting\"]) == \"date\"){ usort($wp_query->posts, \'cmp_date\'); }