Benutzerdefinierte Post -Typ 'Ereignis': Chronologische Liste der wiederkehrenden Ereignisse von Meta_Values ​​in Array

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

Frage

Ich habe einen benutzerdefinierten Post -Typ 'Ereignisse'. Jedes Ereignis (Post) kann mehrere Daten haben. Die Daten (Datum, Uhrzeit, Ort) werden als Array gespeichert. ich brauche ein Abfrage, die eine chronologische Liste aller Ereignisse erstellt aus den Meta -Daten (Ereignisse können mehrmals auftreten).

Die benutzerdefinierte Meta-Box sieht so aus:

Add Dates

Der resultierende Datenbankeintrag in wp_postmeta hat die meta_key '_Events_termine' mit folgendem meta_value (mit 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";}}}

Ich zeige die Daten für ein einzelnes Ereignis mit dem folgenden Code an:

<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>

Die Ausgabe sieht so aus:

Output

Also funktioniert alles einwandfrei, außer dass ich keine Ahnung habe, wie ich eine Seite erstellen kann, auf der alle Ereignisse (Titel, Datum, Ort) in chronologischer Reihenfolge aufgeführt sind, bei denen ein einzelnes Ereignis mehrmals auftreten kann.

Jede Hilfe wird sehr geschätzt!

(Es tut mir leid, dass ich zuvor eine ähnliche Frage gestellt habe, aber ich kam zu einer Sackgasse und musste von vorne anfangen.)

War es hilfreich?

Lösung

Hier ist der Code, der endlich für mich funktioniert hat:

<?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>

Andere Tipps

Christoph,

So erstellen Sie eine Hauptseite, auf der alle auflistet (Seite> Ereignisse) ... Sie müssten Ihre eigene "Schleife" erstellen ... siehe Codex für Die Schleife ...

Sobald Sie dies getan haben, kann der Code, den Sie oben haben, an so etwas wie folgt geändert werden:

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)
    }
}

REVISION

Obwohl das obige Beispiel es Ihnen ermöglicht, alle Ereignisse auf einer einzelnen Seite aufzulisten, wäre es nicht chronologisch ... Sie müssen möglicherweise einige Filterung der Daten durchführen, bevor Sie sie auf der Seite auflisten, z. Dies berücksichtigt die Seiten und jedes der Ereignisse pro Seite und deren Daten. Sie müssten das Datum abschließen und eine Sortierung durchführen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit wordpress.stackexchange
scroll top