Ordenar por fecha de campo personalizado con orden ASC

26 jul 2012, 20:23:44
Vistas: 28.1K
Votos: 0

He encontrado varias preguntas similares pero ninguna explica por qué lo siguiente no me da resultados con orden ASC. Funciona con DESC.

Básicamente es una consulta que debería listar posts donde los valores de campos personalizados son iguales o mayores a la fecha actual, luego ordenarlos en orden inverso, de modo que el primer post debería ser aquel cuyo campo personalizado esté más cercano a la fecha actual.

<?php query_posts($query_string . '&showposts=4&order=ASC&post_type=custompost&meta_key=mydate&orderby=meta_value'); ?>
    <?php if (have_posts()) : ?>
    <?php while (have_posts()) : the_post(); ?>

        <?php $todays_date = date("Y/m/j"); // Obtiene la fecha actual ?>
        <?php $today = strtotime($todays_date); // Convierte la fecha actual a timestamp ?>
        <?php $exp_date = get_post_meta('mydate'); // Obtiene la fecha del campo personalizado ?>
        <?php $expiration_date = strtotime($exp_date); // Convierte la fecha del campo a timestamp ?>
        <?php if ($expiration_date >= $today) { // Comprueba si la fecha es mayor o igual a hoy ?>

            <a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a>

    <?php } else { ?>
    <?php };?>

<?php endwhile; ?>
<?php else : ?>
<?php endif; ?> 

Además, he probado muchas consultas diferentes pero ninguna funcionó, el script anterior es el último que tengo.

0
Todas las respuestas a la pregunta 3
0

Con un poco más de búsqueda en Google:

<?php
$hoy = date("Y/m/j"); // Obtener la fecha actual en formato año/mes/día
query_posts(array(
'post_type' => 'custompost', // Tipo de post personalizado
'posts_per_page' => 4, // Mostrar 4 posts
'meta_key' => 'mydate', // Clave meta para ordenar
'orderby' => 'meta_value', // Ordenar por valor meta
'order' => 'ASC', // Orden ascendente
    'meta_query' => array( // Consulta meta
        array(
           'key' => 'mydate', // Clave meta
           'meta-value' => $value, 
           'value' => $hoy, // Comparar con fecha actual
           'compare' => '>=', // Mayor o igual que
           'type' => 'CHAR' // Tipo de dato
       )
)
));
if (have_posts()) : // Si hay posts
while (have_posts()) : the_post(); // Loop de WordPress
?>
    <a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a>

<?php endwhile; ?>
<?php else : ?>
<?php endif; ?> 

¡Espero que ayude a otros!

26 jul 2012 21:36:02
0

Después de buscar múltiples publicaciones similares, armé una solución con partes de varias otras publicaciones en SO, espero que pueda ayudar a alguien más.

Tenía un campo meta personalizado llamado "date" (mala convención de nombres, lo sé), y esta consulta muestra todas las publicaciones con un campo meta personalizado "date" en el futuro, ordenadas por las más cercanas a la fecha actual.

$args = array(
        'post_type' => 'training-course',
        'posts_per_page' => '-1',
        'meta_key' => 'date',
        'orderby' => 'meta_value',
        'order' => 'ASC',
        'meta_query' => array(
            array(
                'key' => 'date',
                'value' => date("YYmmdd"),
                'compare' => '<='
            )                   
         )
    );
5 mar 2019 16:27:01
0

Para otros que consulten esta pregunta, también hay una forma integrada de hacer esto que es más simple, puedes usar eventDisplay en tu consulta con los valores upcoming, past, o custom. La documentación de Tribe Events es un poco deficiente, así que quién sabe qué hace custom. Si usas tribe_get_events(), asume upcoming por defecto, y creo que ciertas consultas se modifican automáticamente para mostrar eventos futuros.

Aquí tienes un ejemplo que muestra 4 eventos próximos, ordenados por fecha de inicio, de los más cercanos a los más lejanos en el futuro.

array(
  'showposts' => 4,
  'post_type' => 'tribe_events',
  'orderby' => 'meta_value',
  'order' => 'ASC',
  'meta_key' => '_EventStartDate',
  'eventDisplay' => 'upcoming'
));
5 feb 2017 13:29:41