吵吵   2012-02-23  阅读:2,873

今天群里面的一个哥们吆喝着怎么输出一个分类下今日发表的文章数,本来以为是挺简单的活,想想之后也倒是未必了。一个分类下面的文章倒是容易搞定,再搞定今日输出的就有点困难了。说困难其实也容易,问题就在wp的文章的post表中是没有那个分类的id的,以至于不好限制,只能用循环。

那哥们给的代码是获取今天的文章数目,用$wpdb直接query却也挺简单。代码如下:
get_var
(“SELECT COUNT(*) FROM wp_posts WHERE to_days(post_date) = to_days(now()) AND post_type=’post’ AND post_status =’publish'”);
?>
乍一看之下,我们可以直接在sql语句后面加条件,比如post_cat=某个分类这样子的。但是当我们看到wp_posts这张表的时候,事情就变的复杂了,因为里面每篇文章都未存有属于的分类。事实上,wp不管分类和tag都是叫做term,即用另外的数据表存储了分类和文章id之间的对应关系。

那么现在如果要这么做的话必须这么做:先取出今天发表的文章,然后将文章id带入到term的表中去找cat id,如果这个分类的ID是我们要的分类,那么就记录一下数据。可是这是数据库额,要查也可以但是有想死的冲动,光取出数据、两次查询就想死了。

于是乎我们用wp提供给我们的函数接口来实现这个程序,怎么实现呢?思路如下:想用get_post()获取一个分类下的文章,一般选择输出10篇,或者看你一天最多更新多少篇。然后做一个循环,里面判断是不是今天发表的,如果是就+1,不是的话就可以跳出循环了,因为是按照时间循序输出的么。

好了,之后就是程序该怎么写了,如下:


$cat_ID=get_cat_ID('Category Name');
$args = array( 'numberposts' => 10, 'orderby' => 'post_date','order' => 'DESC', 'category' => $cat_ID );
$mycount=0;
$myposts = get_posts( $args );
foreach( $myposts as $post ) :
if( get_date_from_gmt($post->post_date, "Y-m-d")!=get_date_from_gmt(current_time('mysql'), "Y-m-d"))
{
break;
}
$mycount++;
endforeach;
echo $mycount;

吵吵微信朋友圈,请付款实名加入:

吵吵 吵吵

4条回应:“wp统计分类下今日发表文章数”

  1. 视频会议说道:

    好高科技啊!

  2. 25米说道:

    呵呵,不错哦,顶一下!

  3. 不错顶一下来了啊

  4. 这些东东都很不错。。

发表评论

电子邮件地址不会被公开。 必填项已用*标注