WordPress网站运行状况如何,为了让读者一目了然,需要一些统计信息,例如已发布的文章总数、通过审核的评论总数、注册用户总数等等,本文总结了一些网站信息统计代码。
目录
获取文章(post)总数
获取文章总数应该使用WordPress API中wp_count_posts()函数,通常能使用API获取的信息,就不要直接去查询,除非使用API实现资源消耗太大。
$count_posts = wp_count_posts(); $published_posts = $count_posts->publish; //已发布文章的总数 $future_posts = $count_posts->future; //定时发布的文章(尚未发布)总数 $draft_posts = $count_posts->draft; //草稿总数 $pending_posts = $count_posts->pending; //等待复审的文章的总数 $private_posts = $count_posts->private; //私密文章的总数 $trashed_posts = $count_posts->trash; //回收站中文章的总数 $auto_draft = $count_posts->{'auto-draft'}; //自动草稿总数 $inherit = $count_posts->inherit; //文章修订版(revisions)的总数
关于自动草稿,可以阅读这篇文章。
计算文章总数时剔除某些分类下的文章
如果统计时想剔除某些分类下的文章,可以这样,假设计算时不想算ID为5的分类下的文章,注意,如果该分类还有子分类,那么子分类也将被剔除,代码如下。
$total_posts = new WP_Query( "posts_per_page=1&cat=-5"); echo '文章总数:'. $total_posts->found_posts;
或者直接用SQL查询语句
global $wpdb; $exclude_ids = '5'; $sql = <<<SQL SELECT COUNT(*) FROM {$wpdb->posts} WHERE 1=1 AND post_type = 'post' AND ( post_status = 'publish' OR post_status = 'private') AND {$wpdb->posts}.ID NOT IN ( SELECT object_id FROM $wpdb->term_relationships WHERE term_taxonomy_id IN ( SELECT term_taxonomy_id FROM $wpdb->term_taxonomy WHERE taxonomy = 'category' AND ( term_id IN( {$exclude_ids} ) OR parent IN ( {$exclude_ids} ) ) ) ) SQL; $numposts = $wpdb->get_var($sql); echo '文章总数:'. $numposts;
这两种方法消耗资源都不多。
计算文章总数时剔除某些标签下的文章
方法与剔除分类相同,例如计算时剔除ID为66的标签下的所有文章
$total_posts = new WP_Query( array( 'tag__not_in' => array( 66 ), 'posts_per_page' => 1 )); echo '文章总数:'. $total_posts->found_posts;
置顶文章总数
$total_posts = new WP_Query( array( 'posts_per_page' => 1,'post__in' => get_option( 'sticky_posts' ) ); echo '置顶文章总数:'. $total_posts->found_posts;
今日发布的新文章总数
$today = getdate(); $total_posts = new WP_Query( 'year=' . $today["year"] . '&monthnum=' . $today["mon"] . '&day=' . $today["mday"] . '&posts_per_page=1' ); echo '今日发布的新文章数:'. $total_posts->found_posts;
获取页面(Page)总数
$count_posts = wp_count_posts('page'); $published_posts = $count_posts->publish; //已发布页面的总数 ... //可以获取的信息与post总数相同,请参考第一段代码
获取自定义类型文章的总数
wp_count_posts()第一个参数是post_type,post_type既可以是post、page,也可以是用户自定义的文章类型,要获取某个custom post type总数,只要传递custom post type的名称即可。例如,要获取名为movie的custom post type总数
$count_posts = wp_count_posts('movie');
可以获取的信息与post相同,请参考第一段代码
获取评论统计信息
$comments_count = wp_count_comments(); echo "全站评论统计信息 <br />"; echo "待审核的评论: " . $comments_count->moderated . "条<br />"; echo "审核通过的评论: " . $comments_count->approved . "条<br />"; echo "垃圾评论: " . $comments_count->spam . "条<br />"; echo "被丢进回收站的评论: " . $comments_count->trash . "条<br />"; echo "评论总数(不包括垃圾评论): " . $comments_count->total_comments . "<br />";
注意最后一条评论总数,是除了垃圾评论以外的总数,如果要计算包含垃圾评论的总数,使用下面的SQL语句
echo $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->comments");
如果在functions中使用$wpdb,不要忘记写上
global $wpdb;
获取用户统计信息
使用count_users()函数获取
$result = count_users(); echo '用户总数:'. $result['total_users'] . '<br />'; echo '管理员:' . $result['avail_roles']['administrator'] . '<br />'; echo '编辑:' . $result['avail_roles']['editor'] . '<br />'; echo '作者:' . $result['avail_roles']['author'] . '<br />'; echo '投稿者:' . $result['avail_roles']['contributor'] . '<br />'; echo '订阅:者' . $result['avail_roles']['subscriber'] . '<br />' ;
获取分类总数
使用wp_count_terms()函数
echo '分类总数:' . wp_count_terms('category');
获取标签总数
echo '标签总数:' . wp_count_terms('post_tag');
获取链接数目
要获取所有链接的数目,无论属于哪个分类,可以
$total_links = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->links WHERE link_visible = 'Y'"); echo $total_links;
要获取某个分类下的链接总数,假设该分类的ID为2
$total_links = get_term( 2, 'link_category') ; echo $total_links;
所不同的是用SQL语句可以排除私密链接,get_term返回的是所有链接总数,包括私密链接。