web-dev-qa-db-fra.com

Calendrier des événements tout-en-un: requête personnalisée - Obtention de chaque instance d'événement

J'utilise le calendrier des événements tout-en-un de Timely et j'aimerais afficher les événements à venir du calendrier dans un carrousel sur une page distincte et obtenir les informations relatives à ces événements.

J'utilise les helpers ai1ec et get_events_between pour obtenir les événements dans une plage de dates donnée (entre aujourd'hui et un an), et je peux voir dans le tableau (à partir de get_events_between que j'ai parcouru pour obtenir les ID de publication) que je reçois. la quantité correcte d'événements (chaque objet est un objet).

Ensuite, j'utilise une requête WP pour afficher les informations avec Ai1ec_Events_Helper. Je peux obtenir la date de début, l'heure, etc.

Vous pouvez voir le code ici: http://Pastebin.com/dhJjyw1y

Cependant, le problème est que, même si le tableau des événements contient plus de 50 événements, je ne reçois que 7 messages de ma requête WP - les 7 événements individuels que j'ai créés, indiquant la date de début de l'événement ( C'est-à-dire que si un événement a commencé le 6 mars et qu'il se répète une fois par mois, je ne reçois l'événement qu'une fois avec la date du 6 mars). Le lien vers la page de détail de chaque événement renvoie également à la date d'origine ("? Instance_id =" dans l'URL est vide).

Est-ce que quelqu'un sait comment je peux obtenir chaque instance de chaque événement pour que je puisse afficher les 50 événements et plus?

Merci!


ETA:

Voici le résultat obtenu de $ get_events pour le premier objet tableau:

tableau (56) {[0] => objet (Ai1ec_Event) # 389 (51) {["post"] => objet (stdClass) # 388 (23) {["ID"] => string (3) "220 "[" post_author "] => string (1)" 1 "[" post_date "] => string (19)" 2013-03-06 14:00:18 "[" post_date_gmt "] => string (19)" 2013-03-06 19:00:18 "[" post_content "] => string (440)" Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus nunc dolor, Accumsan quis condimentum, quis tortor. Consectetur adipiscing elit. Etiam odio purus, imperdiet ac. Duis quis risus a odio sodales bibendum. Dans adipiscing quam est. " ["post_title"] => string (17) "Un autre nouvel événement" ["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- événement "[" to_ping "] => chaîne (0)" "[" pinged "] => chaîne (0)" "[" post_modified "] => chaîne (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 "] => string (94)" ... com/wp /? post_type = ai1ec_event & p = 220 & instance_id = "[" menu_order "] => string (1)" 0 "[" post_type "] => string (11) "ai1ec_event" ["post_mime_type"] => chaîne (0) "" ["commentaire_count"] => chaîne (1) "0"} ["post_id"] => chaîne (3) "220" [" instance_id "] => string (3)" 582 "[" start "] => int (1363838400) [" end "] => int (1363924800) [" start_truncated "] => NULL [" end_truncated "] => NULL ["allday"] => string (1) "1" ["instant_event"] => NULL ["recurrence_rules"] => string (23) "FREQ = MENSUEL; B Yday = 3TH; " ["exception_rules"] => string (0) "" ["recurrence_dates"] => string (0) "" ["exception_dates"] => string (0) "" ["venue"] => string (12) "L'emplacement" ["pays"] => chaîne (9) "Australie" ["adresse"] => chaîne (44) "L'adresse, Hope Island QLD 4212, Australie" ["ville"] => chaîne (11 ) "Hope Island" ["province"] => chaîne (10) "Queensland" ["code postal"] => chaîne (4) "4212" ["show_map"] => chaîne (1) "1" ["show_coordinates "] => NULL [" longitude "] => NULL [" latitude "] => NULL [" facebook_eid "] => NULL [" facebook_user "] => NULL [" facebook_status "] => NULL [" contact_name "] => chaîne (12) "Nom du contact" ["contact_phone"] => chaîne (12) "123-456-7890" ["contact_email"] => chaîne (10) "[email protected]" ["contact_url" ] => NULL ["cost"] => string (6) "10,00 €" ["ticket_url"] => NULL ["ical_feed_url"] => string (0) "" ["ical_source_url"] => string (0) "" ["ical_organizer"] => NULL ["ical_contact"] => NULL ["ical_uid"] => string (0) "" ["tags"] => NULL ["catégories"] => NULL ["feed "] => NULL [" category_colors ":" Ai1ec_Event ": privé] => NULL [" col or_style ":" Ai1ec_Event ": private] => NULL [" category_text_color ":" Ai1ec_Event ": private] => NULL [" category_bg_color ":" Ai1ec_Event ": privé] => NULL [" faded_color ":" Ai1ec_Event ": privé ] => NULL ["rgba_color": "Ai1ec_Event": privé] => NULL ["tags_html": "Ai1ec_Event": privé] => NULL ["category_blocks_html": "Ai1ec_Event": privé] => NULL ["category_inline_html" : "Ai1ec_Event": private] => NULL ["_is_multiday": "Ai1ec_Event": private] => NULL ["request": "Ai1ec_Event": private] => NULL}

L'événement a juste des données de remplissage. Comme vous pouvez le voir dans la boucle foreach à partir du code auquel j'ai lié, je peux obtenir l'ID de publication et l'ID d'instance des événements, les stocker dans des tableaux et les imprimer. Donc, je peux voir qu'il capture plus de 7 événements. Les ID de publication sont dupliqués et les ID d'instance sont uniques.

J'ai essayé de modifier la boucle foreach en deux pour essayer de parcourir les objets (si c'est le moyen de le faire?!), Mais cela ne cracherait pas des choses comme l'ID d'instance, bien que je puisse obtenir le titre et guid de l'article. En outre, dans l'objet, il n'a pas les dates de début/fin correctes des événements (["start"] => int (1363838400) ["end"] => int (1363924800)), donc je me demande si je dois-je utiliser la requête WP et le Ai1ec_Events_Helper pour obtenir les dates au format correct?


ETA 2:

Après avoir examiné de plus près ce que $ get_events est en fait me donnant, j'ai modifié la boucle foreach dans la Pastebin ci-dessus pour:

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>';
}

Je peux obtenir le titre de l'événement, l'ID, l'ID d'instance, le GUID et combiner le GUID et l'ID d'instance pour créer une URL propre à l'événement approprié, sans utiliser la requête WP du tout. Yay! Ils semblent également être classés correctement par date (bien que les événements de la journée s'affichent en premier).

Je peux aussi obtenir les dates et heures des événements avec $ event-> start et $ event-> end et les exécuter avec la fonction date ().

Il semble que j'ai répondu à ma propre question ... Je posterai mon code final comme réponse une fois qu'il sera terminé.

3
CourtFantinato

Enfin avoir une chance de poster ma solution. Notez que les événements affichent d’abord les événements Toute la journée, s’il en existe. Malheureusement, je ne sais pas comment contourner ce problème car il est ainsi codé dans une requête SQL dans l'un des fichiers de plug-in (et il est même indiqué dans le fichier que les événements de la journée entière sont les premiers).

J'utilise également les informations sur les événements collectées dans les attributs de données d'image, comme pour un carrousel utilisant Cycle2. Mais vous pouvez simplement changer cette partie pour faire écho aux informations ou comme vous voulez les formater.

J'espère que cela aidera quelqu'un d'autre s'il s'avère nécessaire d'obtenir des événements depuis le plugin 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