我试图获取过去7,30和365天中wordpress的帖子列表.
这是即时通讯使用的代码:
$args = array(
'posts_per_page'=>10,
'post_status'=>'publish',
'post_type'=>'post'
);
if(isset($_GET['group'])){
switch($_GET['group']){
case 'week':
$time = date('Y-m-d h:i:s',strtotime('-1 week'));
break;
case 'month':
$time = date('Y-m-d h:i:s',strtotime('-1 month'));
break;
case 'year':
$time = date('Y-m-d h:i:s', strtotime('-1 year'));
break;
default:
$time = '';
break;
}
if($time!=''){
$args['pub_date'] = '>= "'.$time.'"';
}
}
$query = new WP_Query( $args );
如果我error_log参数数组,我可以看到设置的时间戳.但是当我error_log WP_Query对象时,我可以看到SQL查询:
sql_CALC_FOUND_ROWS wp_posts.* FROM wp_posts INNER JOIN wp_postMeta ON (wp_posts.ID = wp_postMeta.post_id) WHERE 1=1 AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish') GROUP BY wp_posts.ID ORDER BY wp_postMeta.Meta_value desc LIMIT 0, 10
此查询不包含我设置的pub_date日期范围.我该如何实现?
解决方法:
在wp.org论坛上,MichaelH在this Thread年获得了荣誉.您可以修改它以满足您的要求.
<?PHP
function filter_where($where = '') {
//posts in the last 30 days
//$where .= " AND post_date > '" . date('Y-m-d', strtotime('-30 days')) . "'";
//posts 30 to 60 days old
//$where .= " AND post_date >= '" . date('Y-m-d', strtotime('-60 days')) . "'" . " AND post_date <= '" . date('Y-m-d', strtotime('-30 days')) . "'";
//posts for march 1 to march 15, 2009
$where .= " AND post_date >= '2009-03-01' AND post_date <= '2009-03-15'";
return $where;
}
add_filter('posts_where', 'filter_where');
query_posts($query_string);
?>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。