Domanda

Ho un tipo di messaggio personalizzato 'eventi'. Ogni evento (post) può avere più date. Le date (data, ora, posizione) vengono memorizzati come array. Ho bisogno di un query che crea un elenco cronologico di tutti gli eventi dai metadati (eventi possono verificarsi più volte).

Gli sguardi custom-meta-box come questo:

Aggiungere Date

La voce del database con conseguente wp_postmeta ha il meta_key '_events_termine' con il seguente meta_value (utilizzando 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";}}}

I visualizzare le date per un singolo evento con il seguente codice:

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

Gli sguardi di uscita come questo:

Uscita

Quindi, tutto funziona bene tranne che non ho idea di come creare una pagina che elenca tutti gli eventi (titolo, data, posizione) in ordine cronologico in cui un singolo evento può verificarsi più volte.

Ogni aiuto è molto apprezzato!

(mi dispiace ho fatto una domanda simile prima, ma sono arrivato a un punto morto e ha dovuto ricominciare da capo.)

È stato utile?

Soluzione

Ecco il codice che finalmente ha funzionato per me:

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

Altri suggerimenti

Christoph,

Per creare una pagina principale che elenca tutti (pagina> Eventi) ... si avrebbe bisogno di creare il proprio "Loop" ... vedere il codice per The loop ...

Una volta fatto questo, allora il codice che avete sopra potrebbe essere modificato per qualcosa di simile al seguente:

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

REVISIONE

Anche se l'esempio precedente avrebbe permesso di elencare tutti gli eventi su una sola pagina, non sarebbe cronologico ... potrebbe essere necessario fare un po 'di filtraggio dei dati prima della quotazione sulla pagina, ad esempio, la costruzione di una serie personalizzata, che tenga conto delle pagine e ciascuno degli eventi per pagina e le loro date. Si avrebbe bisogno di digitare fuori della data e fare un po 'di smistamento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a wordpress.stackexchange
scroll top