J'ai supprimé mon ancien message ici, car la méthode posts_where est obsolète.
Grâce à kaiser, c’est maintenant facile de lister la plupart des publications commentées dans un laps de temps donné:
<?php
$popular = new WP_Query( array(
'post_type' => array( 'post' ),
'showposts' => 6,
'cat' => 'MyCategory',
'ignore_sticky_posts' => true,
'orderby' => 'comment_count',
'order' => 'dsc',
'date_query' => array(
array(
'after' => '1 week ago',
),
),
) );
?>
<?php while ( $popular->have_posts() ): $popular->the_post(); ?>
<?php the_title(); ?>
<?php endwhile; ?>
Remarque: cette option permet de trier les articles les plus commentés publiés dans les X dates , de ne pas vérifier tous les articles, puis de rechercher le plus grand nombre de commentaires au cours de cette période parmi tous les articles. . Aucune idée de comment faire le second, ni de son poids.
La classe WP_Comment_Query
a le filtre suivant pour ses clauses:
$pieces = array( 'fields', 'join', 'where', 'orderby', 'order', 'limits', 'groupby' );
$clauses = apply_filters_ref_array( 'comments_clauses', array( compact( $pieces ), &$this ) );
Cela signifie que vous pouvez vous connecter à comments_clauses
et filtrer la partie $clauses['where']
.
Depuis WP 3.7, nous avons une classe WP_Date_Query
. Cela fonctionne comme suit (exemples simplifiés):
Les valeurs par défaut utilisées lors de WP_Query
- récupérées via les vars de requête:
array(
'year' => '',
'monthnum' => '',
'week' => '',
'day' => '',
'hour' => '',
'minute' => '',
'second' => '',
)
Comment faire un date_query
: Exemple de code copié de ici
$dateQuery = new WP_Query( array(
'date_query' => array(
'column' => 'optional, column to query against, default is post_date',
'compare' => 'optional, see WP_Date_Query::get_compare()',
'relation' => 'optional, OR or AND, how the sub-arrays should be compared, default is AND',
array(
'column' => 'see above',
'compare' => 'see above',
'after' => 'string or array, see WP_Date_Query::build_mysql_datetime()',
'before' => 'string or array, see WP_Date_Query::build_mysql_datetime()',
'inclusive' => 'boolean, for after/before, whether exact value should be matched or not',
'year' => '4 digit int',
'month' => 'int, 1-12',
'week' => 'int, 0-53',
'day' => 'int, 1-31',
'hour' => 'int, 0-23',
'minute' => 'int, 0-60',
'second' => 'int, 0-60',
),
),
// ... other query args
) );
Vous pouvez également effectuer un WP_Date_Query()
simple et récupérer la chaîne SQL résultante pour une utilisation ultérieure dans les filtres de clauses:
$dateQuery = WP_Date_Query( array( /* your query */ ) );
$whereDate = $dateQuery->get_sql();
// Inspect result
var_dump( $whereDate );
À présent Même source une requête de date pour un article et ses commentaires:
// All comments that are within the past week
$some_comments = get_comments( array(
'post_ID' => get_the_ID(), // Can be omited as well
'date_query' => array(
array(
'after' => '1 week ago',
),
),
'count' => true // return only the comment count
) );
Pas testé ...
global $wp_query;
$daysQuery = new WP_Query( array(
'post_type' => array( 'post' ),
'showposts' => 6,
'cat' => 'mycat',
'ignore_sticky_posts' => true,
'orderby' => 'comment_count date',
'date_query' => array(
array(
'after' => array(
'year' => date( "Y" ),
'month' => date( "m" ),
'day' => "01",
),
'before' => array(
'year' => date( "Y" ),
'month' => date( "m", strtotime( "-1 Months" ) ),
'day' => date( "t", strtotime( "-1 Months" ) ),
),
// 'inclusive' => true,
'month' => date( "m" ),
),
),
) );