WordPress插件-在while循环中插入多个帖子ID

时间:2018-06-19 16:14:58

标签: arrays wordpress

我正在使用自定义帖子类型smart-event,并且具有带有帖子元sevent-date的WP_Query。在同一日期可能有多个帖子。我想在日期相同的数组。可能有一个,两个或多个帖子。以下是我要尝试的内容。

$args = array(
        'posts_per_page' => -1,
        'post_type' => 'smart-event',
        'meta_query'=> array(
            'key' => 'sevent_date',
            'value'=> $this_month,
            'type'  => 'date',
            'compare'=> 'BETWEEN',
        ),
    );
$posts = new \WP_Query($args);

$postdateid = array();
if($posts->have_posts()){
    while ($posts->have_posts()) {
        $posts->the_post();

        $date = get_post_meta( get_the_ID(), 'sevent_date', true);
        $postdateid[date('d', strtotime($date))] = 
            array( 
                'date' => date('Y-m-d', strtotime($date)), 
                'id' => array(get_the_ID()), //Here i want to insert multiple ids if available
            ); 
    }wp_reset_postdata();
}

但是我每天只收到一个帖子。但是有一个日期有两个帖子。我想在'id'

中插入所有ID。

1 个答案:

答案 0 :(得分:0)

我通过array_key_exists()检查了第一个数组键,然后使用了array_push()。现在它可以正常工作了。

        $args = array(
            'posts_per_page' => -1,
            'post_type' => 'smart-event',
            'meta_query'=> array(
                'key' => 'sevent_date',
                'value'=> $this_month,
                'type'  => 'date',
                'compare'=> 'BETWEEN',
            ),
        );
    $posts = new \WP_Query($args);

    $postdateid = array();
    if($posts->have_posts()){
        while ($posts->have_posts()) {
            $posts->the_post();

            $date = get_post_meta( get_the_ID(), 'sevent_date', true);
            if(array_key_exists(date('d', strtotime($date)), $postdateid)){
                array_push( $postdateid[date('d', strtotime($date))]['id'], get_the_ID());
            }else{
                $postdateid[date('d', strtotime($date))] = 
                array( 
                    'date' => date('Y-m-d', strtotime($date)), 
                    'id' => array(
                        get_the_ID()
                    ),
                );
            }
        }wp_reset_postdata();
    }