以下函数查询当前显示的帖子类型(单篇或归档)的最长和最短日期。它可以在管理UI以及前端/主题中工作。它只需要一组有限的post status
如果要排除以下状态,则需要更改/扩展pending
, future
, 等等。
function get_copyright_daterange()
{
global $wpdb;
static $range = array();
if ( ! empty( $range ) )
return $range;
return $range = array_shift( $wpdb->get_results( $wpdb->prepare( "
SELECT
MIN( YEAR( post_date ) ) AS first_year,
MIN( MONTH( post_date ) ) AS first_month,
MIN( DAY( post_date ) ) AS first_day,
MAX( DAY( post_date ) ) AS last_day,
MAX( MONTH( post_date ) ) AS last_month,
MAX( YEAR( post_date ) ) AS last_year
FROM
{$wpdb->posts}
WHERE
post_type = %s
AND NOT post_status = \'auto-draft\'
AND NOT post_status = \'inherit\'
AND NOT post_status = \'trash\'
",
is_admin() ? get_current_screen()->post_type : get_queried_object()->post_type
) ) );
}
您可以这样简单地称之为:
$date_range = get_copyright_daterange();
printf(
\'© %s — %s\',
date_i18n(
get_option( \'date_format\' ),
strtotime( "{$date_range->first_year}-01-01" ),
true // GMT
),
date_i18n(
get_option( \'date_format\' ),
strtotime( "{$date_range->last_year}-01-01" ),
true // GMT
)
);
执行查询的函数将其保存到静态变量中,因此您可以在单个页面上多次调用它,而无需执行多个DB查询。
如你所见,我为date_i18n()
, 这是GMT偏移,到true
. 如果您不想这样,但仍然有GMT偏移量,您也可以使用post_date_gmt
在查询内部。
正如@s\\u ha\\u dum所指出的,上面的查询将导致一种“奇怪”的行为:它会清楚地查询年、月和日。因此,当您试图从中构建实际的第一个/最后一个日期时,查询将不起作用。But 如果你只是在搜索其中的一个,它就会起作用。最初,我确实将其用于基于日期的导航/分页。