Ordinare per data usando un campo personalizzato in ordine crescente (ASC)

26 lug 2012, 20:23:44
Visualizzazioni: 28.1K
Voti: 0

Ho trovato diverse domande simili ma nessuna di queste spiega perché il codice seguente non funziona con l'ordinamento ASC. Funziona solo con DESC.

In pratica, è una query che dovrebbe elencare i post dove i valori dei campi personalizzati sono uguali o maggiori della data corrente, quindi organizzarli in ordine inverso, così che il primo post dovrebbe essere quello con il campo personalizzato più vicino alla data corrente.

<?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"); // Ottiene la data odierna ?>
        <?php $today = strtotime($todays_date); // Converte la data in timestamp ?>
        <?php $exp_date = get_post_meta('mydate'); // Ottiene la data dal campo personalizzato ?>
        <?php $expiration_date = strtotime($exp_date); // Converte la data del campo personalizzato in timestamp ?>
        <?php if ($expiration_date >= $today) { // Controlla se la data è maggiore o uguale a oggi ?>

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

Inoltre, ho provato molte query diverse ma nessuna di queste ha funzionato, lo script sopra è l'ultimo che ho testato.

0
Tutte le risposte alla domanda 3
0

Con qualche ricerca in più su Google:

<?php
$today = date("Y/m/j");
query_posts(array(
'post_type' => 'custompost',
'posts_per_page' => 4,
'meta_key' => 'mydate',
'orderby' => 'meta_value',
'order' => 'ASC',
    'meta_query' => array(
        array(
           'key' => 'mydate',
           'meta-value' => $value,
           'value' => $today,
           'compare' => '>=',
           'type' => 'CHAR'
       )
)
));
if (have_posts()) :
while (have_posts()) : the_post();
?>
    <a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a>

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

Spero che possa essere utile ad altri!

26 lug 2012 21:36:02
0

Dopo aver cercato tra diversi post simili, ho assemblato una soluzione prendendo parti da vari altri post su Stack Overflow, spero possa essere d'aiuto a qualcun altro.

Avevo un campo meta personalizzato chiamato "date" (convenzione di denominazione poco appropriata, lo so), e questa query mostra tutti i post con un campo meta "date" personalizzato nel futuro, ordinandoli dal più vicino a oggi.

$args = array(
        'post_type' => 'training-course', // Tipo di post: corso di formazione
        'posts_per_page' => '-1', // Mostra tutti i post
        'meta_key' => 'date', // Chiave meta: data
        'orderby' => 'meta_value', // Ordina per valore meta
        'order' => 'ASC', // Ordine crescente
        'meta_query' => array(
            array(
                'key' => 'date', // Chiave meta: data
                'value' => date("YYmmdd"), // Valore: data odierna nel formato AAmmgg
                'compare' => '<=' // Confronto: minore o uguale
            )                   
         )
    );
5 mar 2019 16:27:01
0

Per altri che fanno riferimento a questa domanda, esiste anche un modo integrato per fare questo che è più semplice, puoi usare eventDisplay nella tua query con i valori upcoming, past, o custom. La documentazione di Tribe Events è un po' carente quindi chissà cosa fa "custom". Se usi tribe_get_events(), assume "upcoming" di default, e credo che certe query vengano automaticamente modificate per mostrare gli eventi futuri.

Ecco un esempio che mostra 4 eventi futuri, ordinati per data di inizio, dal più vicino al futuro.

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