Tipo de publicación personalizado 'Evento': Lista cronológica de eventos recurrentes de Meta_Values ​​en la matriz

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

Pregunta

Tengo un tipo de publicación personalizado 'eventos'. Cada evento (publicación) puede tener múltiples fechas. Las fechas (fecha, hora, ubicación) se almacenan como matriz. necesito un consulta que crea una lista cronológica de todos los eventos de los meta datos (los eventos pueden ocurrir varias veces).

La caja personalizada se ve así:

Add Dates

La entrada de la base de datos resultante en wp_postmeta tiene el meta_key '_events_termine' con lo siguiente meta_value (Usando 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";}}}

Muestro las fechas para un solo evento con el siguiente código:

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

La salida se ve así:

Output

Por lo tanto, todo funciona bien, excepto que no tengo idea de cómo crear una página que enumera todos los eventos (título, fecha, ubicación) en orden cronológico donde puede ocurrir un solo evento varias veces.

¡Cualquier ayuda es muy apreciada!

(Lamento haber hecho una pregunta similar antes, pero llegué a un callejón sin salida y tuve que comenzar de nuevo).

¿Fue útil?

Solución

Aquí está el código que finalmente funcionó para mí:

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

Otros consejos

Christoph,

Para crear una página principal que enumera todos (página> eventos) ... necesitaría crear su propio "bucle" ... consulte el Codex para El lazo ...

Una vez que haya hecho eso, el código que tiene arriba podría modificarse a algo como lo siguiente:

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

REVISIÓN

Aunque el ejemplo anterior le permitiría enumerar todos los eventos en una sola página, no sería cronológico ... es posible que deba hacer un filtrado de los datos antes de enumerarlo en la página, por ejemplo, construir una matriz personalizada que tiene en cuenta las páginas y cada uno de los eventos por página y sus fechas. Deberías apagar la fecha y hacer alguna clasificación.

Licenciado bajo: CC-BY-SA con atribución
scroll top