5

我正在使用此处找到的多合一事件日历:http
://wordpress.org/extend/plugins/all-in-one-event-calendar/ 我正在尝试仅显示即将发生的事件(所以没有过去事件)使用 WP_Query() 函数。我看到数据库中有一个“wp_ai1ec_events”表和一个名为“start”的列,其开始时间采用 yyyy-mm-dd hh:mm:ss 格式。我可以使用$currentTime = current_time('mysql')以相同的格式获取当前时间

这是我的查询到目前为止的样子:

    $frontpageevents='post_type=ai1ec_event&showposts=3&orderby=start&order=ASC&meta_value=yes';
$eventquery = new WP_Query($frontpageevents);

我尝试将 '&start>'.$currentTime 添加到 $frontpageevents 声明的末尾,但这不起作用。我希望有人知道如何处理这个问题。

4

2 回答 2

5

http://wordpress.org/support/topic/plugin-all-in-one-event-calendar-order-event-by-start-date?replies=3#post-2443756

我正在寻找类似的东西。我发现上面的帖子应该有帮助!

“事件是帖子,但事件开始/结束日期!= 发布日期。当您进行查询时,您必须进行事件查询,而不是发布查询。换句话说,您必须使用插件的 API 来检索按开始或排序的事件结束日期。感兴趣的函数是 get_events_between()。它位于 Ai1ec_Calendar_Helper 类中。该类位于:app/helper/class-ai1ec-calendar-helper.php 我对您的代码进行了一些修改。我没有测试它因此可能存在拼写错误或其他错误,但逻辑是相同的:http: //pastebin.com/SNp4TJij

更新!

所以我现在真的明白了……这是我设置的代码,用于获取今天和一年后的事件。


    global $ai1ec_calendar_helper, $ai1ec_events_helper;

    // gets localized time
    $bits = $ai1ec_events_helper->gmgetdate( $ai1ec_events_helper->gmt_to_local( time() ) );

    //sets start time to today
    $start = gmmktime(0,0,0,$bits['mon'],$bits['mday'],$bits['year']);

    //sets end time to a year from today i.e. $bits['year']+1
    $end = gmmktime(0,0,0,$bits['mon'],$bits['mday'],$bits['year']+1);

    //Look in class-ai1ec-calendar-helper.php for details
    $get_events = $ai1ec_calendar_helper->get_events_between($start,$end);

    //loop through results to get post_ids
    foreach($get_events as $event ):
        $post_ids[] = $event->post_id;
    endforeach;

    // The New Events Query
    $args = array(
        'posts_per_page'  => 4,
        'paged' => get_query_var('paged'),
        'post_type'=> 'ai1ec_event',
        'post__in' => $post_ids
    );

    $events_added = new WP_Query( $args );

    // The Loop
    while ( $events_added->have_posts() ) : $events_added->the_post();
        $event = Ai1ec_Events_Helper::get_event($post->ID);
        //Your code here
    endwhile;
    wp_reset_postdata();

您还可以使用带有 args 的函数 get_events_relative_to() 作为开始时间、结果数量的限制、页面偏移量(在他们的视图中用于 ai1ec 与 wp 分页不同)和过滤器......它返回事件对象的多维数组。我必须创建 $events = $get_events['events'] 并在我的 foreach 中使用 $events 来正确检索 post_ids。

我浏览了 ai1ec-themes 以查找如何显示事件数据的示例。
echo apply_filters( 'the_content', $event->post->post_content );
返回 HTML 格式的事件信息,如单个事件页面中显示的内容。

于 2012-07-24T14:55:13.420 回答
1

$post_ids 数组已按开始日期排序。在你的 $args 变量中添加 'orderby' => 'post__in'

 $args = array(
        'posts_per_page'  => 4,
        'paged' => get_query_var('paged'),
        'post_type'=> 'ai1ec_event',
        'post__in' => $post_ids,
        'orderby' => 'post__in'
    );
于 2013-02-25T03:33:07.407 回答