WordPress获取特定分类文章数

日期: 标签:WordPress教程 29 条留言
如需帮忙改代码,或者WordPress二次开发、PHP网站建设等需求,可联系我购买付费服务:  点此联系我
文章目录

     有时候我们想获取某个分类(category)下的文章数目,以便在博客的某个地方显示出来。下面就提供几个获取特定分类的文章数的方法,你可以根据个人喜好选择:

方法一:

     将以下PHP代码放置在主题目录下的functions.php中:

function wt_get_category_count($input = '') {
	global $wpdb;

	if($input == '') {
		$category = get_the_category();
		return $category[0]->category_count;
	}
	elseif(is_numeric($input)) {
		$SQL = "SELECT $wpdb->term_taxonomy.count FROM $wpdb->terms, $wpdb->term_taxonomy WHERE $wpdb->terms.term_id=$wpdb->term_taxonomy.term_id AND $wpdb->term_taxonomy.term_id=$input";
		return $wpdb->get_var($SQL);
	}
	else {
		$SQL = "SELECT $wpdb->term_taxonomy.count FROM $wpdb->terms, $wpdb->term_taxonomy WHERE $wpdb->terms.term_id=$wpdb->term_taxonomy.term_id AND $wpdb->terms.slug='$input'";
		return $wpdb->get_var($SQL);
	}
}

然后在需要的地方调用该函数即可,该函数提供三种调用方式:

1、在主循环中调出该函数,且不提供参数,则返回第一个分类的文章数:

<?php echo wt_get_category_count(); ?>

2、提供的参数为数字,且该数字为分类的ID号,则返回对应ID的分类的文章数:

<?php echo wt_get_category_count(1); ?>

3、提供分类的别名,则返回对应缩略名(别名)的分类文章数:

<?php echo wt_get_category_count('hello-world'); ?>

     该函数对于含有子分类的分类,文章数统计上会有稍许误差。对于分类文章数为0的情况统计得也不是很好。

方法二:

     其实我们可以直接使用WordPress的内置函数wp_list_categories(),只是传递函数的时候注意一下就行了:

<?php echo strip_tags(wp_list_categories('include=3&hide_empty=0&use_desc_for_title =0&echo=0&show_count=1&style=none&hierarchical =0&title_li=')); ?>

     参数include的等号后面3改成你想要统计文章数的分类ID即可,最终输出形式为 分类名称(文章数) ,如 教程指南(20)

方法三:

     使用WordPress内置函数get_category_by_slug()

<?php
    // 将以下category-name改成你的分类别名即可
    echo get_category_by_slug('category-name')->count; 
?>

方法四:

     使用WordPress内置函数get_category

<?php
    // 将以下cat_ID改成你的分类ID即可
   echo get_category(cat_ID)->count; 
?>

总结:

     方法一、三、四可以获取到单纯的文章数量,就代码量来说,方法一的代码是最多的,方法三、四的代码是最少的。就执行效率来说,方法一执行时间约为0.002秒,效率最高;方法四次之,执行时间约为0.004秒;方法三最差,执行时间约为0.008秒。执行效率之所以会有这么大的差异,原因在于方法一专注于一件事,就是查找文章数量,只执行一次数据库查询,而方法三和方法四的是WordPress内置函数,虽然只需一行代码,但是他们并不是专门为查询分类文章数而设计的,而是用于获取分类的全部信息!另外,这三种方法都不会统计子分类下的文章数。

     以上所有方法不存在孰优孰劣之分,执行时间所差的几毫秒根本感觉不出来,你可以根据个人喜好来选择相关的方法。

 

文章参考:

-- 完 --

本文采用 「CC BY-NC-SA 4.0」创作共享协议,转载请标注以下信息:
原文出处:露兜博客 https://www.ludou.org/wordpress-get-category-count.html
露兜
kaapass@outlook.com  QQ 825533758

业余编程爱好者,主业是淘宝店主,卖些工艺品,感兴趣可以到我的淘宝店看看(旺旺不提供技术咨询):西西弗sisyphe

29 条留言

点此留言
  1. Dawnson

    学习了!

  2. eagle

    不错,正是我想要的

  3. 免费资源部落

    个人推荐用方法二最好了。

  4. Tmd

    这个可以实现单个分类统计

    不知道怎么实现多个分类下的文章统计?

    合在一起的统计

  5. 爱蝌蚪

    很明显第二个方法最方便

  6. 总字辈的理想

    博主,请问可不可以实现分类id自动识别呢?或者有其他什么方法吗?谢谢

  7. 大盗贼

    多谢楼主的分享··找到了自己想要的东西··

  8. 特品网

    在分类页面怎么显示该分类下的文章数量呢?比如你的网站在wordpress分类页面ludou.org/category/wordpress在这个分类页面里面 wordpress名称的旁边显示它下面的文章数量。
    如果所属下面的文章有多个分类用方法一显示的文章数量会出现差错,我想在分类页面应该能代码判断知道这个分类的id,如果能知道id了,用这个调用<?php echo wt_get_category_count(1); ?>就能自动判断里面的id=什么,不知道这个思路对不对,我不知道该怎么写代码。你能弄一下吗?

    • Ludou

      @特品网 当前分类id:
      global $wp_query;
      $catID = $wp_query->query_vars[cat];

      • 特品网

        @Ludou <?php echo wt_get_category_count(global $wp_query;
        $catID = $wp_query->query_vars[cat];
        ); ?>

        调用代码是这样写吗?

        • Ludou

          @特品网 先定义你的函数,哪找的去哪看:

          <?php
          function wt_get_category_count(..) {

          }

          global $wp_query;
          $catID = $wp_query->query_vars[cat];

          echo wt_get_category_count($catID);

          ?>

          建议花一天时间,先学学php的基础知识。勿急功近利!

  9. genab

    楼主你好,因为Bae下Wordpress无法正确显示上下页,查看代码后发现是无法正确获取 $wp_query->max_num_pages; 的值!

    我的解决思路是通过获取相应的值,而解决这个问题,即:
    if (is_home()){
    $count_posts = wp_count_posts();
    $max_page= ceil($count_posts->publish/10);
    }
    elseif (is_category()){
    $category = get_the_category();
    $max_page= ceil($category[0]->category_count/10);
    }

    请问 标签和搜索结果 如何统计他们的数量?谢谢!

    • Ludou

      @genab 标签:
      $term = get_term_by('name', single_tag_title('', false), 'post_tag');
      $max_page = ceil($term->count/10);

      搜索:
      $allsearch = &new WP_Query("s=$s&showposts=-1");
      $max_page = ceil($allsearch->post_count/10);

  10. genab

    百度BAE下存在一个发邮件的函数
    public function mail($queueName, $message, $address, $optional = array ())
    其中$optional 可选参数数组,可以设置的非必须参数的key包括:
    Bcms::VERSION(API版本,一般不需要填) Bcms::FROM(邮件发送者) Bcms::MAIL_SUBJECT(邮件主题)

    我想利用它作Wordpress的邮件提醒,可惜邮件地址是bms-noreply@baidu.com而非我设置$email="mail@chfdaogen.net",请帮我看看是哪里出错了吗?谢谢!

    function wp_mail( $to, $subject, $message, $headers = '', $attachments = array() ) {
    require_once ABSPATH . WPINC . '/Bcms.class.php';
    $bcms = new Bcms () ;
    $email="mail@chfdaogen.net"
    $ret = $bcms->mail ( BCMS_QUEUE, "<!–HTML–>".$message, array($to), array(Bcms::VERSION,Bcms::FROM =>$email,Bcms::MAIL_SUBJECT => $subject)) ;
    if ( false === $ret ) {
    return false;
    } else {
    return true;
    }
    }

    百度关于MAIL函数的说明:http://developer.baidu.com/wiki/index.php?title=docs/cplat/mq/sdk/php

    • Ludou

      @genab 从你的代码来看没什么问题。
      需要注意的是,即使你设置的FROM,有些邮箱还是会显示代发者,而不是你设置的发件人,如163邮箱

      • genab

        @Ludou 可能是吧!我调试了一下午,结果还是没能让它显示mail@chaogen.net为发件人!谢谢你的回复 !

    • ccc

      @genab 刚试了下 bae上的mail函数 貌似跑不动 不知道楼上的 mail 还能用吗

  11. 萝卜客

    如果想获取该分类下一个月内的文章数,应该怎么写呢

  12. zhjiaoyu

    有没有更简单的方法呀?

  13. 悠远晴空

    如果我要调用特定分类下的第一篇和第二篇文章怎么实现呢?求教!

    • Ludou

      @悠远晴空 WP_Query,指定参数cat和posts_per_page即可,下面是文档,请自行研究:
      http://codex.wordpress.org/Class_Reference/WP_Query#Pagination_Parameters

      • 悠远晴空

        @Ludou 非常感谢

  14. daidai

    这个代码不能调用一个父分类里一共有多少篇文章吗?

  15. daidai

    这个只可以调用单个分类下的文章数,可以调用父分类下的所有的文章数吗?

  16. chengwei

    我的文章分类和贴标签功能无法使用是怎么回事,文章有分类,但每个类别下的文章为0,给文章重新分类,效果消失。

  17. Quu

    如何获取整个父分类下的所有文章数呢?

  18. 耐腐蚀泵

    已经用上了,正是我想要用,用的是第一种方法。感谢ludou.

发表留言