web-dev-qa-db-ja.com

オールインワンイベントカレンダー:カスタムクエリ - 各イベントインスタンスの取得

私はタイムリーでオールインワンイベントカレンダーを使用しています、そして、私は別のページのカルーセルでイベントカレンダーから今後のイベントを表示したいです、そして、私はイベント情報を得る必要があります。

Ai1ecヘルパーとget_events_betweenを使用して特定の日付範囲内(今日から1年後まで)のイベントを取得しています。取得した配列(get_events_betweenからループして投稿IDを取得する)を確認できます。正しい量のイベント(それぞれがオブジェクトです)。

それからAi1ec_Events_Helperで情報を表示するためにWPクエリを使います。開始日、時間などを取得できます.

あなたはここでコードを見ることができます: http://Pastebin.com/dhJjyw1y

しかし、問題は、一連のイベントに50を超えるイベントが含まれている場合でも、WPクエリから7つしか得られないということです。これは、作成した7つの個々のイベントです。つまり、あるイベントが3月6日に始まり、それが月に1回繰り返される場合、そのイベントは3月6日の日付で1回だけ取得されます。各イベント詳細のページへのリンクは、元の日付にもリンクしています(URLの "?instance_id ="は空です)。

50以上のすべてのイベントを表示するように、各イベントの各インスタンスを取得する方法を誰かが知っていますか?

ありがとうございます。


ETA:

これは、最初の配列オブジェクトに対して$ get_eventsから取得した出力です。

array(56){[0] => object(Ai1ec_Event)#389(51){["post"] => object(stdClass)#388(23){["ID"] => string(3) "220 "[" post_author "] =>文字列(1)" 1 "[" post_date "] =>文字列(19)" 2013-03-06 14:00:18 "[" post_date_gmt "] =>文字列(19)" 2013-03-06 19:00:18 "[" post_content "] => string(440)" Loremイプサムdolor座ってamet、conittetur adipiscing elit、Vivamus nunc dolor、アキュサンquis condimentum ut、quis tortor。 odio purus、不法ac、Duis quis risus、odio sodales bibendum。 ["post_title"] => string(17) "その他の新しいイベント" ["post_excerpt"] => string(0) "" ["post_status"] => string(7) "publish" ["comment_status"] => string(6) "closed" ["ping_status"] => string(6) "closed" ["post_password"] => string(0) "" ["post_name"] => string(17) "another-new- event "[" to_ping "] =>文字列(0)" "["固定 "] =>文字列(0)" "[" post_modified "] =>文字列(19)" 2013-03-07 14:21:45 "[" post_modified_gmt "] => string(19)" 2013-03-07 19:21:45 "[" post_content_filtered "] => string(0)" "[" post_parent "] => string(1)" 0 "[" guid "] =>文字列(94)" ... com/wp /?post_type = ai1ec_event&p = 220&instance_id = "[" menu_order "] =>文字列(1)" 0 "[" post_type "] =>文字列(11) "ai1ec_event" ["post_mime_type"] =>文字列(0) "" ["comment_count"] =>文字列(1) "0"} ["post_id"] =>文字列(3) "220" [" instance_id "] =>文字列(3)" 582 "[" start "] => int(1363838400)[" end "] => int(1363924800)[" start_truncated "] => NULL [" end_truncated "] => NULL ["allday"] =>文字列(1) "1" ["instant_event"] => NULL ["recurrence_rules"] =>文字列(23) "FREQ = MONTHLY; B Yday = 3TH;」 ["exception_rules"] =>文字列(0) "" ["recurrence_dates"] =>文字列(0) "" ["exception_dates"] =>文字列(0) "" ["開催地"] =>文字列(12) "場所" ["国"] =>文字列(9) "オーストラリア" ["住所"] =>文字列(44) "住所、ホープアイランドQLD 4212、オーストラリア" ["市"] =>文字列(11) ""希望の島 "["県 "] =>文字列(10)"クイーンズランド州 "["郵便番号 "] =>文字列(4)" 4212 "[" show_map "] =>文字列(1)" 1 "[" show_coordinates "] => NULL ["経度 "] => NULL ["緯度 "] => NULL [" facebook_eid "] => NULL [" facebook_user "] => NULL [" facebook_status "] => NULL [" contact_name "] =>文字列(12) "連絡先名" ["contact_phone"] =>文字列(12) "123-456-7890" ["contact_email"] =>文字列(10) "[email protected]" ["contact_url" ] => NULL ["cost"] =>文字列(6) "$ 10.00" ["ticket_url"] => NULL ["ical_feed_url"] =>文字列(0) "" ["ical_source_url"] =>文字列(0) "" ["ical_organizer"] => NULL ["ical_contact"] => NULL ["ical_uid"] =>文字列(0) "" ["タグ"] => NULL ["カテゴリ"] => NULL ["フィード"] => NULL [" category_colors ":" Ai1ec_Event ":private] => NULL [" col or_style ":" Ai1ec_Event ":private] => NULL [" category_text_color ":" Ai1ec_Event ":private] => NULL [" category_bg_color ":" Ai1ec_Event ":プライベート] => NULL [" faded_color ":" Ai1ec_Event " ] => NULL ["rgba_color": "Ai1ec_Event":private] => NULL ["tags_html": "Ai1ec_Event":private] => NULL ["category_blocks_html": "Ai1ec_Event": "NULL [" category_inline_html " : "" Ai1ec_Event ":private] => NULL [" _is_multiday ":" Ai1ec_Event ":private] => NULL ["リクエスト ":" Ai1ec_Event ":>プライベート] => NULL}

イベントにはフィラーデータしかありません。リンクしたコードからforeachループを見るとわかるように、イベントの投稿IDとインスタンスIDを取得し、それらを配列に格納して、それらを出力することができます。それで私はそれが7つ以上のイベントをつかんでいるのを見ることができます、そして投稿IDは重複しています、そしてインスタンスIDはユニークです。

オブジェクトを反復処理するためにforeachループを2つに変更しようとしました(そうするのであれば?!)が、投稿IDとguidを取得することはできましたが、インスタンスIDのようなものは吐き出しませんでした。また、オブジェクトでは、イベントの適切な開始日/終了日(["start"] => int(1363838400)["end"] => int(1363924800))がありません。適切な形式で日付を取得するために、WPクエリとAi1ec_Events_Helperを使用する必要がありますか。


ETA 2:

$ get_eventsがで実際にであるものをよく見てから、上記のPastebinのforeachループを次のように修正しました。

foreach($get_events as $event) {
    echo '<p>Event: ' . $event->post->post_title . '<br />';
    echo 'ID: ' . $event->post->ID . '<br />';
    echo 'Instance: ' . $event->instance_id . '<br />';
    echo 'Guid: ' . $event->post->guid . '<br />';
    echo 'Link: <a href="' . $event->post->guid . $event->instance_id . '">Go to event</a></p>';
}

GUIDクエリを使用せずに、イベントのタイトル、ID、インスタンスID、GUIDを取得し、WPとインスタンスIDを組み合わせて正しいイベントへの適切なURLを作成することができます。まったくわーい!また、日付順に並べられているようです(終日イベントが最初に表示されますが)。

$ event-> startと$ event-> endでイベントの日付と時刻を取得し、それらをdate()関数を通して実行することができます。

私は自分自身の質問に答えたようです…それが完成したら、私は最終的なコードを答えとして投稿します。

3
CourtFantinato

最後に私の解決策を投稿する機会があります。イベントがある場合は、最初に終日イベントが表示されます。残念ながら、プラグインファイルの1つの中のSQLクエリでこのようにコード化されているので(これは終日イベントが最初であるというコメントでさえされている)、これを回避する方法はわかりません。

Cycle2を使用したカルーセルの場合と同様に、画像データ属性に収集されたイベント情報も使用しています。しかし、その部分を変更して情報をエコーアウトすることも、フォーマットすることもできます。

AI1ECプラグインからイベントを取得する必要性に遭遇した場合、これが他の誰かに役立つことを願っています!

<?php

    // Gets localized time
    $time = $ai1ec_events_helper->gmt_to_local( Ai1ec_Time_Utility::current_time() );
    $bits = $ai1ec_events_helper->gmgetdate( $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, $filter, $spanning = false);

    date_default_timezone_set('America/Toronto'); // Match timezone settings in WP

    // For each event
    foreach($get_events as $event) {

        // Event ID
        $eventID = $event->post->ID;

        // Event Title
        $eventTitle = $event->post->post_title;

        // Event URL
        $eventURL = $event->post->guid . $event->instance_id;

        // Event Date
        $eventMonth = date( 'M', $event->start );
        $eventDay = date( 'd', $event->start );

        // Event Image
        $imgID = get_post_thumbnail_id( $eventID );

        // Event Time
        if( $event->allday == 1 ) {
            $timeSpan = 'All Day';
        } else {
            $startTime = date( 'g:ia', $event->start );
            $endTime = date( 'g:ia', $event->end );
            $timeSpan = $startTime . ' - ' . $endTime;
        }

        $attr = array(
            'alt' => get_post_meta( $imgID , '_wp_attachment_image_alt', true ), 
            'data-name' => $eventTitle, 
            'data-month' => $eventMonth,
            'data-day' => $eventDay,
            'data-time' => $timeSpan,
            'data-url' => $eventURL
        );
        echo get_the_post_thumbnail( $eventID, 'full', $attr );
    }
?>
8
CourtFantinato