我正在尝试使用get_posts在wordpress页面中显示前三个未来的帖子预览,所以我做了:
/* function.php */
function filter_where( $where = '' ) {
global $wp_query;
if (is_array($wp_query->query_vars['post_status'])){
if ( in_array('publish',$wp_query->query_vars['post_status'])){
// posts today into the future
$where .= " AND post_date > '" . date('Y-m-d', strtotime('now')) . "'";
}
}
return $where;
}
function textdomain_future_posts( $query ) {
//$query->set('numberposts','3');
//$query->set('category','1');
//$query->set('post_status','publish');
$query->set('orderby','post_date');
$query->set('order','ASC');
add_filter('posts_where','filter_where');
return $query;
}
/* index.php */
global $post;
add_action('pre_get_posts','textdomain_future_posts');
$myposts = get_posts('numberposts=3&category=1');
$i=1;
foreach($myposts as $post) :
setup_postdata($post);
.
.
.
.
但看起来它并没有真正过滤日期>今天......我可能错过了什么吗?
提前谢谢! 干杯 路易答案 0 :(得分:0)
pre_get_posts
应该用于修改主循环,而不是get_posts()
。
请尝试以下方法:
$myposts = get_posts( array(
'cat' => 1,
'no_found_rows' => true,
'order' => 'ASC',
'order_by' => 'post_date',
'posts_per_page' => 3,
'post_status' => 'future',
) );
在这里,您不需要使用自定义查询位置。根据日期(升序),您将收到3个标记为未来的帖子。
答案 1 :(得分:0)
好的,我自己解决了:
我在functions.php中输入了这个函数:
function show_future_posts($posts)
{
global $wp_query, $wpdb;
if(is_single() && $wp_query->post_count == 0)
{
$posts = $wpdb->get_results($wp_query->request);
}
return $posts;
}
add_filter('the_posts', 'show_future_posts');
因此,通过这种方式,我可以使用get_posts列出未来的帖子(' ... post_status = future ..');并毫无问题地打开它们
感谢所有人
干杯, 路易