将未来的帖子过滤器应用于 wordpress get_posts

Applying future posts filter to wordpress get_posts

我正在尝试使用 get_posts 在 wordpress 页面中显示前三个未来 post 预览,所以我做到了:

/* 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);
.
.
.
.

但看起来它并没有真正过滤日期 > 今天....我可能错过了什么吗?

提前致谢! 干杯 路易吉

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',
) );

在这里您不需要使用自定义的 where 查询。您收到 3 个标记为未来的帖子,按日期(升序)排序。

OK我自己解决了:

我输入了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..'); 列出未来的帖子并毫无问题地打开它们

感谢大家

干杯, 路易吉