D'accord, j'essaie d'obtenir des publications qui ont été publiées au cours des x dernières heures, les options étant 8, 24 ou 72 heures. J'ai les variables qui sont passées à mon featureHandler.php via ajax, puis je retourne les posts, voici comment je le fais:
$vars = $_GET['vars'];
$time = $vars[0];
$order = $vars[1];
if ($time == 8 ) {
function filter_where($where = '') {
//posts in the last 8 Hours
$where .= " AND post_date > '".date('Y-m-d H:i:s', strtotime('-8 hours'))."'";
return $where;
}
add_filter('posts_where', 'filter_where', 10, $time);
} elseif ($time == 24) {
function filter_where($where = '') {
//posts in the last 24 Hours
$where .= " AND post_date > '".date('Y-m-d H:i:s', strtotime('-24 hours'))."'";
return $where;
}
add_filter('posts_where', 'filter_where', 10, $time);
} elseif ($time == 72) {
function filter_where($where = '') {
//posts in the last 72 Hours
$where .= " AND post_date > '".date('Y-m-d H:i:s', strtotime('-72 hours'))."'";
return $where;
}
add_filter('posts_where', 'filter_where', 10, $time);
}
?>
<div class="article-wrapper">
<?php
query_posts(array(
'post__not_in' => get_option('sticky_posts'),
));
$itemCount = 0;
while ( have_posts() ) : the_post();
Je pense que cela fonctionne presque, sauf que le message que je viens de créer n'apparaît que dans 24 ou 72, mais pas dans le cas où $ time == 8, pourquoi? Et comment puis-je rendre ce code plus efficace?
Merci sincèrement.
voici une version plus courte qui suppose le paramètre GET ? time = [entier] (par exemple? time = 8)
add_filter('posts_where', 'filter_where', 11);
function filter_where($where = '') {
if(isset($_GET['time'])){
$time = $_GET['time'];
$time=(int)$time; // only allow integers
if(in_array($time,array(8,24,72))){
$where .= " AND post_date > '".date('Y-m-d H:i:s', strtotime('-".$time." hours'))."'";
}
}
return $where;
}