2013-06-07 10 views
6

Nel mio sito Wordpress, ho utilizzare questo codice get_posts:get_posts età non superiore a X giorni - Wordpress

get_posts(
     array (
      'numberposts' => 5, 
      'orderby'=>'comment_count', 
      'order'=>'DESC', 
      'post_type' => array ('post') 
     ) 

Come faccio a filtrare in modo che i posti non sono più vecchi di 10 giorni? Quindi dovrebbe solo elencare i post degli ultimi 10 giorni.

risposta

24

Come di 3.7 è possibile utilizzare date_query http://codex.wordpress.org/Class_Reference/WP_Query#Date_Parameters

Quindi sarebbe simile:

$args = array(
    'posts_per_page' => 5, 
    'post_type' => 'post', 
    'orderby' => 'comment_count', 
    'order' => 'DESC', 
    'date_query' => array(
     'after' => date('Y-m-d', strtotime('-10 days')) 
    ) 
); 
$posts = get_posts($args); 
2

The exemple from the doc dovrebbe funzionare bene. get_posts() utilizza WP_Query() dietro la scena per effettuare la richiesta effettiva. Per il vostro caso l'esempio modificato dovrebbe essere simile a questo:

// Create a new filtering function that will add our where clause to the query 
function filter_where($where = '') { 
    // posts in the last 30 days 
    $where .= " AND post_date > '" . date('Y-m-d', strtotime('-10 days')) . "'"; 
    return $where; 
} 

add_filter('posts_where', 'filter_where'); 
$query = get_posts(array (
      'numberposts' => 5, 
      'orderby'=>'comment_count', 
      'order'=>'DESC', 
      'post_type' => array ('post') 
     )); 
remove_filter('posts_where', 'filter_where'); 
+0

non riesco a capire come integrare questo soluzione al mio codice attuale. Ho aggiornato la mia domanda con il mio codice completo, puoi gentilmente dare un'occhiata e dimostrare come la tua soluzione potrebbe funzionare con il mio codice? Se funziona, accetterò certamente questa risposta come corretta. –

+1

@HenrikPetterson: la mia soluzione rimarrebbe praticamente invariata con il vostro codice completo. Quello che fai è 1 - definire un filtro personalizzato che fa ciò che vuoi (la funzione "filter_where()" nella mia risposta, che limita gli ultimi dieci giorni), 2 - aggiungi il filtro a tutte le query da ora in poi usando add_filter, 3 - esegui la query, il get_post() chiamerà wp_query() che applicherà il tuo filtro, 4 - rimuovi il filtro con remove_filter(), quindi non verrà applicato ad altre query che potrebbero/potrebbero seguire. L'unica modifica sarebbe quella di rinominare $ query in $ post. – Lepidosteus

+0

Sai che ho capito la soluzione proprio mentre ho postato quel commento. Bella risposta. Accettato. –

Problemi correlati