web-dev-qa-db-fra.com

Obtenir des messages aléatoires entre des dates spécifiques/d'un âge spécifique

Je dois obtenir des identifiants de publication à partir d'un type de publication personnalisé de manière aléatoire et les publications sont publiées dans un délai de 30 jours.
Mais je ne trouve pas vraiment de solution. Comment puis-je le faire?

Ceci est ma requête.

query_posts("post_type='random_posts'&order='DESC'&posts_per_page=10");
//shuffle(query_posts())
1
pulla

Deux notes à l'avance:

  1. Il n'y a pas (sauf si vous avez créé un CPT) un type de messagerandom_posts.

  2. N'utilisez pas query_posts .

Cela étant dit, ce qui suit fera ce que vous voulez:

Juste le hasard

$args = array(
     'posts_per_page' => '10',
     'orderby' => 'Rand' 
);
$random_posts = get_posts( $args );

foreach( $random_posts as $random_post ) {
    // do something
    echo $random_post->ID . '<br />\n'; // access Post ID, for instance
}

Référence: get_posts

Dates antérieures à 3.7

Jusqu'ici, votre restriction de 30 jours après l'âge n'était pas facilement réalisable en une seule requête. Vous pouvez facilement récupérer les publications du mois en cours uniquement de la manière suivante:

$args = array(
     'posts_per_page' => '10',
     'orderby' => 'Rand',
     'monthnum' => intval( date( 'n' ) )
);
// rest same as above

Ce qui fonctionnerait bien pour vous à la fin d’un mois donné, mais renverrait de mauvais résultats (c’est-à-dire rien) le premier jour du mois.

L'autre option aurait été de rechercher beaucoup plus de messages que le 10 requis et de vérifier les dates tout en parcourant les résultats. Se sent aussi hacky.
Heureusement, WP 3.7 est au coin de la rue ...

Dates à partir de WP 3.7

WordPress 3.7 introduira le paramètre date_query . (Ce qui est génial génial.)
-> Utilisation

Cela rendra votre exigence simple comme bonjour:

$args = array(
    'posts_per_page' => '10',
    'orderby' => 'Rand',
    'date_query' => array(
        array(
            'column' => 'post_date_gmt',
            'after'  => '1 month ago'
        )
    )
);
// rest same as above   
2
Johannes Pille