2013-05-16 14 views
8

Sto lottando per ottenere una soluzione di lavoro con questo wp_query. Al momento ho alcune impostazioni personalizzate che vengono assegnate ai post, una è se il post è o meno "in primo piano" e il secondo è una data e un'ora per la fine del post (non viene più visualizzato nei risultati). Ho la query di lavoro con la funzione, ma solo bisogno di lavorare in questo data di fine in esso, ecco il lavoro ricerca find con il 'caratterizzato':Query dei post che includono meta e maggiore della data

WP_Query('meta_key=skyali_feature&showposts=4&orderby=post_date'); 

La data di fine viene impostata nella tabella wp_postmeta dove meta_key è 'the_date' e l'aspetto meta_values è simile a questo '05/16/2013 05:24 '. Vorrei modificare la query precedente, in cui se "the_date" è stato impostato, i post sono inclusi solo se "the_date" è maggiore della data e dell'ora di oggi.

Ecco il mio tentativo fallito:

WP_Query(
    'meta_key=skyali_feature&meta_key=the_date&meta_compare=>=&meta_value=' 
    .date('d/m/Y H:i') 
    .'&showposts=4&orderby=post_date&orderby=the_date' 
); 

risposta

13

che dovevo fare qualcosa di molto simile di recente e ha finito per dover utilizzare la proprietà meta_query invece. Avrai voglia di fare qualcosa di simile:

$today = date('Ymd'); 
$args = array(
    'post_type' => 'post', 
    'posts_per_page' => '4', 
    'meta_key' => 'the_date', 
    'meta_query' => array(
     array(
      'key' => 'skyali_feature' 
     ), 
     array(
      'key' => 'the_date', 
      'value' => $today, 
      'compare' => '>=' 
     ) 
    ), 
    'orderby' => 'meta_value_num', 
    'order' => 'ASC' 
); 

$your_custom_query = new WP_Query($args); 

Alcune note ...

  • Ho solo bisogno di filtrare in base alla data nel mio esempio, ma sembra che sarà necessario fai data/ora nel tuo. (Puoi semplicemente regolare la prima riga per la variabile $today usando il formato che desideri).

  • Utilizzare posts_per_page anziché showposts. showposts è deprecato.

  • Notate che ho incluso il meta_key due volte (una volta al livello superiore della matrice e una volta come un elemento della matrice meta_query. C'è un bug noto in cui non è possibile ordinare i risultati per la chiave se don 't comprendono in questo modo. ho combattuto che uno per un po' troppo!

Spero che questo aiuti, buon divertimento!

[modifica] dimenticato aggiungere la chiave skyali_feature indietro nel array.

+0

Ciao grazie per la tua risposta, l'ho provato ma non ho ottenuto risultati. Ecco la mia versione: $ today = date ('d/m/Y H: i'); $ args = array ( 'post_type' => 'post', 'posts_per_page' => '4', 'meta_key' => 'The Date', 'meta_query' => array ( matrice chiave ( ' '=> 'The Date', 'valore'=> $ oggi, 'confrontare'=> '> =' ) ), 'orderby'=> 'meta_value_num', 'ordine'=> 'ASC' ); – Paul

+0

Oh, penso di vedere il problema. Stiamo cercando di confrontare i valori di * string * (l'output di 'date ('d/m/YH: i')' non sarà comparabile in questo modo come una stringa. Come stai memorizzando la data/ora in il tuo post? È un campo di testo a mano libera e stai solo assicurandoti di inserire la data e l'ora in quel formato? Oppure lo sta effettivamente archiviando come un campo data/ora (o data/ora) nel database? –

+0

Sei stato azzeccato il mio formato della data è stato schifoso Grazie !! – Paul

4

per le persone che utilizzano il plug-in avanzato campo personalizzato con un tipo di dati aggiornati, questo è quello che serve per le date maggiore o uguale a oggi:

$today = date('Ymd'); 
    $args = array(
     'post_type' => 'post',    
     'meta_key' => 'end-date', 
     'meta_query' => array(
      array(
       'key' => 'end-date' 
      ), 
      array(
       'key' => 'end-date', 
       'value' => $today, 
       'compare' => '>=' 
      ) 
     ), 
     'orderby' => 'meta_value', 
     'order' => 'ASC' 
    ); 
    $your_custom_query = new WP_Query($args); 
+0

Non riesco a ottenere Ecco i miei argomenti di ricerca. È dovuto al formato della data? http://pastie.org/9433564 Vorrei che ACF memorizzasse sia la data amichevole che un timestamp per queste situazioni. –

+0

Questo ha funzionato perfettamente per me utilizzando Advanced Custom Fields Pro v5. Grazie. –

1

per le persone che utilizzano Custom metadata manager troverete che un campo datepicker è memorizzato come timestamp.

Quindi, in un caso simile, l'esempio precedente non funziona e si può avere php risolvere il valore che è necessario confrontare con.E il timestamp per un giorno prima alle 23:59:59 si farà il lavoro:

$yesterday = strtotime('yesterday 23:59:59'); 
    $args = array(
     'post_type' => 'post',    
     'meta_key' => 'end-date', 
     'meta_query' => array(
      array(
       'key' => 'end-date' 
      ), 
      array(
       'key' => 'end-date', 
       'value' => $yesterday, 
       'compare' => '>=' 
      ) 
     ), 
     'orderby' => 'meta_value', 
     'order' => 'ASC' 
    ); 
    $your_custom_query = new WP_Query($args); 

Se anche voi volete tenere conto della impostazione del fuso orario per il blog utilizzare current_time() come nel seguente esempio:

$now = current_time('timestamp'); 
    $yesterday = mktime(23, 59, 59, date('n',$now), date('j',$now)-1); 
Problemi correlati