web-dev-qa-db-fra.com

Dernier message mis à jour (messages mis à jour au cours des 24 dernières heures)

J'ai du mal à trouver un exemple sur la création d'une boucle avec des messages mis à jour au cours des 24 dernières heures.

Mon idée est d’avoir une page de publications ou peut-être sur index.php une liste de publications qui ont été mises à jour le dernier jour (24 heures à partir du moment où la requête est terminée)

Est-ce possible ? Est-il possible d'effectuer cette requête?

Merci d'avance

1
user16562
<?php
$timelimit=1 * 86400; //days * seconds per day
$post_age = date('U') - get_post_time('U');
if ($post_age < $timelimit) {
echo 'this post is within my time limits '; //DO SOMETHING
}
?>
1
krembo99

Selon vous souhaitez afficher vos messages, la solution variera. Si vous souhaitez filtrer votre page d'accueil principale, cette solution fera:

/**
 * Conditionally add a posts_where filter based on the current query
 *
 * @param object $query
 * @return void
 */
function wpse_53599_24h_pre_get_posts( $query ) {
    if ( is_admin() || ! $query->is_main_query() || ! $query->is_home() )
        return;

    add_filter( 'posts_where', 'wpse_53599_filter_last_24h' );
}
add_action( 'pre_get_posts', 'wpse_53599_24h_pre_get_posts' );

/**
 * Add a clause to posts_where to restrict posts to the last 24h
 *
 * @param string $where
 * @return string
 */
function wpse_53599_filter_last_24h( $where = '' ) {
    $where .= " AND post_date >= '" . date( 'Y-m-d H:i:s', time() - DAY_IN_SECONDS ) . "'";
    remove_filter( 'posts_where', 'wpse_53599_filter_last_24h' );
    return $where;
}

Notez que nous supprimons le filtre car nous ne voulons pas limiter toutes les requêtes de publication exécutées sur le site. Seuls nos pertinents.

Si vous souhaitez filtrer une requête autre que la requête principale, modifiez simplement la condition dans la fonction pre_get_posts.

Si vous souhaitez filtrer une sous-requête, c'est encore plus simple, ajoutez simplement le filtre posts_where avant votre instanciation de WP_Query, supprimez-le immédiatement après et ignorez le bit pre_get_posts.

0
Matthew Boynes