好久没更新了,今天看到一道友提出这样的问题:
wordpress获取指定多少天内的热评文章列表
https://zhidao.baidu.com/question/988123512698910379.html
很长一段时间都没有看到道友能提出wordpress有质量的问题了,决定亲自分享下自己测试的方法及代码,不废话,直接看以下说明:
一、焦点
1、指定天数
这个可以通过指定日志的日期期间实现,比如
post_date <= '2017-05-18' and post_date >= '2017-05-01'
即可查询出这十几天内的文章
2、热评
统计日志评论数降序排列即可实现热评的效果
二、实现
1、方法一:使用mysql原生语句实现
global $wpdb; $sql = "select * from $wpdb->posts where post_date <= '2017-05-18' and post_date >= '2017-05-01' and ID in ( SELECT comment_post_ID FROM $wpdb->comments group by comment_post_ID ORDER BY count(comment_post_ID) DESC) LIMIT 0, 20"; // SELECT comment_post_ID FROM $wpdb->comments group by comment_post_ID ORDER BY count(comment_post_ID) DESC // 统计日志评论数降序排列并返回对应的日志ID $r = $wpdb->get_results( $sql ); //var_dump($wpdb); if ( ! is_wp_error($r) ) { foreach ($r as $key => $post) { printf('%s
', get_the_title( $post->ID )) ; } }
2、方法二:使用WP_Query和WP_Date_Query实现
$post_ids = $wpdb->get_col("SELECT comment_post_ID FROM $wpdb->comments group by comment_post_ID ORDER BY count(comment_post_ID) DESC"); $query_vars = array( // https://core.trac.wordpress.org/ticket/18694#comment:4 'date_query' => array( array( 'before' => '2017-05-18', 'after' => '2017-05-01', 'inclusive' => true, ) ), 'posts_per_page' => 20 ); if ( $post_ids ) $query_vars['post__in'] = $post_ids; global $wp_query; $wp_query = new WP_Query($query_vars); //var_dump($wp_query); while( have_posts() ) : the_post(); the_title( '', '
' ); endwhile; wp_reset_query();
代码中关于date_query,可以参考官网#ticket18694中的说明
比较两种方法发现,原生语句的实现较为便捷,这主要取决于生产环境下的需求。
(完)