WordPress 教程:网站信息统计调用代码大全

[ 博客 ]

WordPress 网站运行状况如何,为了让读者一目了然,需要一些统计信息,例如已发布的文章总数、通过审核的评论总数、注册用户总数、标签总数、分类总数、链接总数、最后更新时间、今日发布的新文章总数、置顶文章总数等等,本文汇总了一些网站信息统计代码。

1. 文章总数

<?php $count_posts = wp_count_posts(); echo $published_posts = $count_posts->publish;?>

可根据需求选择显示不同状态的文章:

$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)的总数

获取文章总数应该使用 WordPress API 中 wp_count_posts() 函数,通常能使用API获取的信息,就不要直接去查询,除非使用API实现资源消耗太大。

2. 草稿数目

<?php $count_posts = wp_count_posts(); echo $draft_posts = $count_posts->draft; ?>

3. 计算文章总数时剔除某些分类下的文章:

如果统计时想剔除某些分类下的文章,可以这样,假设计算时不想算ID为5的分类下的文章,注意,如果该分类还有子分类,那么子分类也将被剔除,代码如下。

<?php
$total_posts = new WP_Query( "posts_per_page=1&cat=-5");
echo '文章总数:'. $total_posts->found_posts;
?>

或者直接用SQL查询语句

<?php
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;
?>

这两种方法消耗资源都不多。

4. 计算文章总数时剔除某些标签下的文章

方法与剔除分类相同,例如计算时剔除ID为66的标签下的所有文章

<?php
$total_posts = new WP_Query( array( 'tag__not_in' => array( 66 ), 'posts_per_page' => 1 ));
echo '文章总数:'. $total_posts->found_posts;
?>

5. 置顶文章总数

<?php
$total_posts = new WP_Query( array( 'posts_per_page' => 1,'post__in' => get_option( 'sticky_posts' ) );
echo '置顶文章总数:'. $total_posts->found_posts;
?>

6. 今日发布的新文章总数

<?php
$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;
?>

7. 获取自定义类型文章的总数

wp_count_posts() 第一个参数是 post_type,post_type 既可以是 post、page,也可以是用户自定义的文章类型,要获取某个 custom post type 总数,只要传递 custom post type 的名称即可。例如,要获取名为 movie 的 custom post type 总数

<?php $count_posts = wp_count_posts('movie');?>

可以获取的信息与post相同,请参考第一段代码。

8. 评论总数

使用 wp_count_comments() 函数

$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语句

<?php echo $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->comments");?>

如果在functions中使用$wpdb,不要忘记写上

global $wpdb;

9. 建站天数

<?php echo floor((time()-strtotime("2010-01-01"))/86400); ?>

记得修改 2010-01-01 为你的建站日期

10. 标签总数

<?php echo $count_tags = wp_count_terms('post_tag'); ?>

11. 页面总数

<?php $count_pages = wp_count_posts('page'); echo $page_posts = $count_pages->publish; ?>

12. 分类总数

<?php echo $count_categories = wp_count_terms('category'); ?>

13. 链接总数

要获取所有链接的数目,无论属于哪个分类,可以

<?php $link = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->links WHERE link_visible = 'Y'"); echo $link; ?>

要获取某个分类下的链接总数,假设该分类的ID为2

$total_links = get_term( 2, 'link_category') ;
echo $total_links;

所不同的是用SQL语句可以排除私密链接,get_term返回的是所有链接总数,包括私密链接。

14. 用户总数

<?php $users = $wpdb->get_var("SELECT COUNT(ID) FROM $wpdb->users"); echo $users; ?>

获取具体用户统计信息:

使用 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 />' ;

15. 最后更新

<?php $last = $wpdb->get_results("SELECT MAX(post_modified) AS MAX_m FROM $wpdb->posts WHERE (post_type = 'post' OR post_type = 'page') AND (post_status = 'publish' OR post_status = 'private')");$last = date('Y-n-j', strtotime($last[0]->MAX_m));echo $last; ?>

根据自己的需要使用吧。

发表评论

电子邮件地址不会被公开。

随机