« Événement » Type message personnalisé: Liste chronologique des événements récurrents de valeurs méta en tableau

wordpress.stackexchange https://wordpress.stackexchange.com/questions/11842

Question

i ont un type de poste personnalisé 'événements'. Chaque événement (post) peut avoir plusieurs dates. Les dates (date, heure, lieu) sont stockés sous forme de tableau. Je besoin d'un requête qui crée une liste chronologique de tous les événements à partir des données méta (événements peuvent se produire plusieurs fois).

Les regards méta-boîte personnalisée comme ceci:

Ajouter des dates

L'entrée de base de données résultant en wp_postmeta a la meta_key '_events_termine' avec la meta_value suivante (en utilisant WPAlchemy):

a:1:{s:12:"termin_group";a:2:{i:0;a:3:{s:11:"termin_date";s:10:"2011/03/14";s:11:"termin_time";s:5:"19.30";s:15:"termin_location";s:15:"Max-Reger-Halle";}i:1;a:3:{s:11:"termin_date";s:10:"2011/03/15";s:11:"termin_time";s:5:"20.00";s:15:"termin_location";s:15:"Max-Reger-Halle";}}}

afficher les dates pour un événement unique avec le code suivant:

<table>
    <?php global $events_meta_termine;
    $meta = get_post_meta(get_the_ID(), $events_meta_termine->get_the_id(), TRUE);
    foreach ($meta['termin_group'] as $termin)
    { ?>
    <tr>
      <td><?php echo mysql2date('D', $termin['termin_date'], true); ?></td>
      <td><?php echo mysql2date('j. F Y', $termin['termin_date'], true); ?></td>
      <td><?php echo $termin['termin_time']; ?> Uhr</td>
      <td><?php echo $termin['termin_location']; ?></td>
    </tr>
    <?php } ?>
</table>

Les regards de sortie comme ceci:

Sortie

Donc, tout fonctionne bien sauf que je ne sais pas comment créer une page qui répertorie tous les événements (titre, date, lieu) dans l'ordre chronologique où un seul événement peut se produire plusieurs fois.

Toute aide est très appréciée!

(je suis désolé j'ai posé une question similaire avant, mais je suis arrivé à une impasse et a dû recommencer.)

Était-ce utile?

La solution

Voici le code qui a finalement fonctionné pour moi:

<?php 
global $events_meta_termine;
$today = getdate();
$my_query = new WP_Query('post_type=events&posts_per_page=-1&monthnum='.$today["mon"]);
$events=array();
while ($my_query->have_posts()) : $my_query->the_post();
    $do_not_duplicate = $post->ID;
    $meta = get_post_meta(get_the_ID(), $events_meta_termine->get_the_id(), TRUE);
    foreach ($meta['termin_group'] as $termin)
    { 
        $event=array();
        $event['title']=get_the_title();
        $event['date']=$termin['termin_date'];
        $event['time']=$termin['termin_time'];
        $event['location']=$termin['termin_location'];
        $events[]=$event;
    } 
endwhile; 
wp_reset_query();

$i=0;
usort($events, "cmp"); 
function cmp($a, $b){ 
return strcmp($a['date'],$b['date']); 
} ?>

<table>
<?php $current_month='';
 foreach ($events as $event){   
     if ($current_month!=mysql2date('F Y', $event['date'], true))
     {
         $current_month=mysql2date('F Y', $event['date'], true);
         echo '<tr><td colspan="5">'.$current_month.'</td></tr>';
     } ?>
    <tr>
      <td><?php echo $event['title']; ?></td>
      <td><?php echo mysql2date('D', $event['date'], true); ?></td>
      <td><?php echo mysql2date('j. F Y', $event['date'], true); ?></td>
      <td><?php echo $event['time']; ?> Uhr</td>
      <td><?php echo $event['location']; ?></td>
    </tr>
<?php } ?>
</table>

Autres conseils

Christoph,

Pour créer une page principale qui répertorie tous les (page> événements) ... vous devez créer votre propre "Loop" ... voir le codex pour The Loop ...

Une fois que vous avez fait cela, alors le code que vous avez ci-dessus pourrait être modifié à quelque chose comme ce qui suit:

global $events_meta_termine;

$my_query = new WP_Query([GET-ONLY-THE-PAGES-THAT-USE-THE-META-BOX]);

while ($my_query->have_posts())
{
    $my_query->the_post();

    // echo page stuff

    $meta = $events_meta_termine->the_meta(get_the_ID());

    foreach ($meta['termin_group'] as $termin) 
    {
        // echo event stuff (for the current page)
    }
}

Révision

Bien que l'exemple ci-dessus vous permettra de lister tous les événements sur une seule page, il ne serait pas chronologique ... vous devrez peut-faire du filtrage des données avant l'inscription sur la page, par exemple la construction d'un tableau personnalisé qui prend en compte les pages et chacun des événements par page et leurs dates. Vous devez entrer hors de la date et faire un peu de tri.

Licencié sous: CC-BY-SA avec attribution
Non affilié à wordpress.stackexchange
scroll top