Ordonare după câmp personalizat de tip dată în ordine crescătoare (ASC)

26 iul. 2012, 20:23:44
Vizualizări: 28.1K
Voturi: 0

Am găsit mai multe întrebări similare, dar niciuna nu explică de ce codul de mai jos nu-mi returnează nimic când folosesc ordinea ASC. Funcționează doar cu DESC.

În principiu, este o interogare care ar trebui să listeze postările unde valorile câmpului personalizat sunt egale sau mai mari decât data curentă, apoi să le aranjeze în ordine inversă, astfel încât prima postare să fie cea al cărei câmp personalizat este cel mai apropiat de data curentă.

<?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 // Obține data de astăzi ?>
        <?php $todays_date = date("Y/m/j"); ?>
        <?php // Convertește data în timestamp ?>
        <?php $today = strtotime($todays_date); ?>
        <?php // Obține data din câmpul personalizat ?>
        <?php $exp_date = get_post_meta('mydate'); ?>
        <?php // Convertește data de expirare în timestamp ?>
        <?php $expiration_date = strtotime($exp_date); ?>
        <?php // Verifică dacă data de expirare este mai mare sau egală cu data curentă ?>
        <?php if ($expiration_date >= $today) { ?>

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

De asemenea, am încercat multe interogări diferite, dar niciuna nu a funcționat, scriptul de mai sus este ultima versiune pe care o am.

0
Toate răspunsurile la întrebare 3
0

După ce am căutat puțin mai mult pe 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; ?> 

Sper că va ajuta și pe alții!

26 iul. 2012 21:36:02
0

După ce am căutat mai multe postări similare, am creat o soluție din părți ale altor postări de pe Stack Overflow, sperând că poate ajuta pe altcineva.

Aveam un câmp meta personalizat numit "date" (o convenție de denumire proastă, știu), iar această interogare afișează toate postările cu un câmp meta "date" personalizat în viitor, sortându-le de la cele mai apropiate de ziua de astăzi.

$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

Pentru alții care caută această informație, există și o metodă integrată mai simplă de a face asta, puteți folosi eventDisplay în interogarea dumneavoastră cu valorile upcoming (viitoare), past (trecute) sau custom (personalizat). Documentația Tribe Events este puțin dezorganizată, așa că nu se știe exact ce face opțiunea custom. Dacă utilizați tribe_get_events(), implicit se presupune că sunt afișate evenimentele viitoare, iar anumite interogări sunt automat redirecționate pentru a afișa evenimentele viitoare.

Iată un exemplu care afișează 4 evenimente viitoare, ordonate după data de început, de la cele mai apropiate în timp.

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