正如我在评论中所说,您可以在一个查询中使用relative time and date functionality in PHP 也可在date_query
. 您只需要通过以下内容2 days ago
到after
中的参数date_query
从今天、昨天和两天前获得帖子。只需记住按排序modified
您可以尝试以下操作:(NOTE: 以下内容未经测试,需要PHP 5.4+)
$args = [
\'orderby\' => \'modified\',
\'category__in\' => [3, 7],
\'posts_per_page\' => -1,
\'date_query\' => [
[
\'column\' => \'post_modified_gmt\',
\'after\' => \'2 days ago\',
]
],
];
$q = new WP_Query( $args );
您面临的挑战是正确显示日期标题。我们需要使用helper函数来比较日期并返回差异。所有代码都进入
functions.php
/**
* function to return the difference as follow
* Today will be Today\'s
* Yesterday will be Yesterday\'s
* Any other day will be x Days ago
*
* @param $start The start date in unix timestamp to compare
* @param $end The end date in unix timestamp to compare
* @return (string) $days
*/
function get_relative_date_diff( $start, $end )
{
// Make sure we have date values, if not, return false
if ( !$start || !$end )
return false;
$diff = (int) abs( $start - $end );
$number_days = round( $diff / DAY_IN_SECONDS );
// Output the correct string according to $day
switch ( $number_days ) {
case \'0\':
$days = "Today\'s";
break;
case \'1\':
$days = "Yesterday\'s";
break;
default:
$days = "$number_days Days ago";
}
return $days;
}
现在设置完毕,我们可以相应地修改循环。我们将使用上面的循环
if ( $q->have_posts() ) {
// Set a variable to hold the current day number
$day_variable = \'\';
// Get the current date
$now_date = time();
echo \'<ul>\';
while ( $q->have_posts() ) {
$q->the_post();
$post_date_day = get_the_modified_date( \'d\' );
if ( !$day_variable // Check if $day_variable is empty
|| $day_variable != $post_date_day // Check if $day_variable is not the same as $post_date_day
) {
// We are now going to output our header
$diff = get_relative_date_diff( $now_date, get_the_modified_date( \'U\' ) );
echo \'<span>\' . $diff . \' Update \' . get_the_date( \'F j, Y\' ) . \'</span>\';
}
// Set the $day_variable variable to the $post_date_day variable
$day_variable = $post_date_day;
echo \'<li><a href="\'.get_permalink().\'">\' . get_the_title() . \'</a></li>\';
}
echo \'</ul>\';
wp_reset_postdata();
}
最后请注意,只有在发布日期少于一个月时,所有这些代码才能正常工作。
编辑我的代码有几个缺陷
缺少我的查询参数\'column\' => \'post_modified_gmt\',
和\'posts_per_page\' => -1
当我计算时差时,我使用了实际的发布日期(get_the_date
),而不是修改帖子的日期(get_the_modified_date( \'U\' )
)。这就是为什么标题中会输出有趣的日子
birgire让我想起了human_time_diff()
作用我没有使用该函数,因为您需要来自human_time_diff()
. 然而,我用中使用的一些逻辑重写了我的函数human_time_diff()
.
结论:我还没有对代码进行全面测试,但在最初的测试中,它似乎完成了工作。您可能需要对您的需要进行一个或多个小的调整,所以可以根据需要修改我的代码。如果有什么不清楚的地方,请随时发表评论