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

时间:2015-01-23 15:54:33

标签: wordpress

我正在尝试使用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);
.
.
.
.

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

提前谢谢! 干杯 路易

2 个答案:

答案 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 ..');并毫无问题地打开它们

感谢所有人

干杯, 路易