2013-06-07 15 views
6

In meinem Wordpress-Website, verwende ich diese get_posts Code:get_posts nicht älter als X Tage - Wordpress

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

Wie kann ich es so filtern, dass die Beiträge nicht älter als 10 Tage? Daher sollten nur Beiträge der letzten 10 Tage aufgelistet werden.

Antwort

24

Ab 3.7 können Sie date_query http://codex.wordpress.org/Class_Reference/WP_Query#Date_Parameters

verwenden So würde es wie folgt aussehen:

$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 sollte gut funktionieren. get_posts() verwendet WP_Query() hinter der Szene, um die eigentliche Anfrage zu stellen. Für Ihren Fall sollte das modifizierte Beispiel wie folgt aussehen:

// 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

Ich kann nicht verstehen, wie diese integrieren Lösung für meinen aktuellen Code. Ich habe meine Frage mit meinem vollständigen Code aktualisiert. Können Sie mir bitte einen Blick darauf werfen und demonstrieren, wie Ihre Lösung mit meinem Code funktionieren würde? Wenn es funktioniert, werde ich diese Antwort sicherlich als korrekt akzeptieren. –

+1

@HenrikPetterson: Meine Lösung würde mit Ihrem vollständigen Code ziemlich gleich bleiben. Was Sie tun ist 1 - definieren Sie einen benutzerdefinierten Filter, der was Sie wollen (die Funktion "filter_where()" in meiner Antwort, die auf die letzten zehn Tage), 2 - fügen Sie den Filter für alle Abfragen von nun an mit add_filter, 3 - führen Sie die Abfrage, die get_post() wird wp_query() aufrufen, die Ihren Filter anwenden wird, 4 - entfernen Sie den Filter mit remove_filter(), so dass es nicht auf andere Abfragen, die folgen/folgen wird. Die einzige Änderung wäre, $ query in $ posts umzubenennen. – Lepidosteus

+0

Sie wissen, dass ich die Lösung genau verstanden habe, als ich diesen Kommentar gepostet habe. Gute Antwort. Akzeptiert. –

Verwandte Themen