这有点复杂,但我们可以通过使用posts_where
.
我们将从查询元值为今天日期的帖子开始,假设日期格式为yyyy-mm-dd
:
$date_today = date(\'Y-m-d\');
$args = array(
\'posts_per_page\' => -1,
\'meta_query\' => array(
array(
\'key\' => \'died_date\',
\'value\' => $date_today,
\'compare\' => \'=\',
\'type\' => \'DATE\'
)
)
);
$results = new WP_Query( $args );
如果我们看看
WHERE
子句,我们将看到相关位:
AND ( (wp_postmeta.meta_key = \'died_date\'
AND CAST(wp_postmeta.meta_value AS DATE) = \'2013-02-14\') )
为了实现这一点,我们想修改最后一行以使用MySQL的
DAYOFYEAR 在比较中。
这是我们的过滤器:
function wpa86916_filter_where( $where ){
global $wpdb;
$date_today = date(\'Y-m-d\');
$parts = explode( \'AND CAST\', $where );
$new_where = " AND DAYOFYEAR( CAST( $wpdb->postmeta.meta_value AS DATE ) ) = DAYOFYEAR( \'$date_today\' ) ) )";
$where = $parts[0] . $new_where;
remove_filter( \'posts_where\', __FUNCTION__ );
return $where;
}
如果我们返回到原始查询,现在可以在查询之前添加此筛选器,并且我们应该获得所有具有匹配日期的帖子,无论年份:
add_filter( \'posts_where\', \'wpa86916_filter_where\' );
$results = new WP_Query( $args );
至于您关于从日期提取年份的问题,我们可以使用PHP的
date
和
strtotime
要进行任何日期提取和转换:
$date = \'2013-02-14\';
echo date( \'Y\', strtotime( $date ) );
// prints \'2013\'