陈果 發表於 2023-6-16 00:00:00

WordPress中获取指定分类及其子分类下的文章数目

<p>
<strong>获取特定分类文章数</strong></p>
<p>
 有时候我们想获取某个分类(category)下的文章数目,以便在博客的某个地方显示出来。下面就提供几个获取特定分类的文章数的方法,你可以根据个人喜好选择:</p>
<p>
方法一:</p>
<p>
     将以下PHP代码放置在主题目录下的functions.php中:</p>
<div>
<div>
<div id="highlighter_356219">
<div>
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td>
<div>
1</div>
<div>
2</div>
<div>
3</div>
<div>
4</div>
<div>
5</div>
<div>
6</div>
<div>
7</div>
<div>
8</div>
<div>
9</div>
<div>
10</div>
<div>
11</div>
<div>
12</div>
<div>
13</div>
<div>
14</div>
<div>
15</div>
<div>
16</div>
</td>
<td>
<div>
<div>
<code>function</code> <code>wt_get_category_count(</code><code>$input</code> <code>= </code><code>''</code><code>) {</code>
</div>
<div>
<code> </code><code>global</code> <code>$wpdb</code><code>;</code>
</div>
<div>
 </div>
<div>
<code> </code><code>if</code><code>(</code><code>$input</code> <code>== </code><code>''</code><code>) {</code>
</div>
<div>
<code>  </code><code>$category</code> <code>= get_the_category();</code>
</div>
<div>
<code>  </code><code>return</code> <code>$category</code><code>-&gt;category_count;</code>
</div>
<div>
<code> </code><code>}</code>
</div>
<div>
<code> </code><code>elseif</code><code>(</code><code>is_numeric</code><code>(</code><code>$input</code><code>)) {</code>
</div>
<div>
<code>  </code><code>$SQL</code> <code>= </code><code>"SELECT $wpdb-&gt;term_taxonomy.count FROM $wpdb-&gt;terms, $wpdb-&gt;term_taxonomy WHERE $wpdb-&gt;terms.term_id=$wpdb-&gt;term_taxonomy.term_id AND $wpdb-&gt;term_taxonomy.term_id=$input"</code><code>;</code>
</div>
<div>
<code>  </code><code>return</code> <code>$wpdb</code><code>-&gt;get_var(</code><code>$SQL</code><code>);</code>
</div>
<div>
<code> </code><code>}</code>
</div>
<div>
<code> </code><code>else</code> <code>{</code>
</div>
<div>
<code>  </code><code>$SQL</code> <code>= </code><code>"SELECT $wpdb-&gt;term_taxonomy.count FROM $wpdb-&gt;terms, $wpdb-&gt;term_taxonomy WHERE $wpdb-&gt;terms.term_id=$wpdb-&gt;term_taxonomy.term_id AND $wpdb-&gt;terms.slug='$input'"</code><code>;</code>
</div>
<div>
<code>  </code><code>return</code> <code>$wpdb</code><code>-&gt;get_var(</code><code>$SQL</code><code>);</code>
</div>
<div>
<code> </code><code>}</code>
</div>
<div>
<code>}</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div id="codetool">
<div>
<textarea></textarea>
</div>
</div>
</div>
<p>
然后在需要的地方调用该函数即可,该函数提供三种调用方式:</p>
<p>
1、在主循环中调出该函数,且不提供参数,则返回第一个分类的文章数:</p>
<div>
<div>
<div id="highlighter_747656">
<div>
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td>
<div>
1</div>
</td>
<td>
<div>
<div>
<code>&lt;?php </code><code>echo</code> <code>wt_get_category_count(); ?&gt;</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div id="codetool">
<div>
<textarea></textarea>
</div>
</div>
</div>
<p>
2、提供的参数为数字,且该数字为分类的ID号,则返回对应ID的分类的文章数:</p>
<div>
<div>
<div id="highlighter_307403">
<div>
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td>
<div>
1</div>
</td>
<td>
<div>
<div>
<code>&lt;?php </code><code>echo</code> <code>wt_get_category_count(1); ?&gt;</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div id="codetool">
<div>
<textarea></textarea>
</div>
</div>
</div>
<p>
3、提供分类的别名,则返回对应缩略名(别名)的分类文章数:</p>
<div>
<div>
<div id="highlighter_301570">
<div>
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td>
<div>
1</div>
</td>
<td>
<div>
<div>
<code>&lt;?php </code><code>echo</code> <code>wt_get_category_count(</code><code>'hello-world'</code><code>); ?&gt;</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div id="codetool">
<div>
<textarea></textarea>
</div>
</div>
</div>
<p>
     该函数对于含有子分类的分类,文章数统计上会有稍许误差。对于分类文章数为0的情况统计得也不是很好。</p>
<p>
方法二:</p>
<p>
     其实我们可以直接使用WordPress的内置函数wp_list_categories(),只是传递函数的时候注意一下就行了:</p>
<div>
<div>
<div id="highlighter_483860">
<div>
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td>
<div>
1</div>
</td>
<td>
<div>
<div>
<code>&lt;?php </code><code>echo</code> <code>strip_tags</code><code>(wp_list_categories(</code><code>'include=3&amp;hide_empty=0&amp;use_desc_for_title =0&amp;echo=0&amp;show_count=1&amp;style=none&amp;hierarchical =0&amp;title_li='</code><code>)); ?&gt;</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div id="codetool">
<div>
<textarea></textarea>
</div>
</div>
</div>
<p>
     参数include的等号后面3改成你想要统计文章数的分类ID即可,最终输出形式为 分类名称(文章数)</p>
<p>
方法三:</p>
<p>
     使用WordPress内置函数get_category_by_slug()</p>
<div>
<div>
<div id="highlighter_20264">
<div>
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td>
<div>
1</div>
<div>
2</div>
<div>
3</div>
<div>
4</div>
</td>
<td>
<div>
<div>
<code>&lt;?php</code>
</div>
<div>
<code> </code><code>// 将以下category-name改成你的分类别名即可</code>
</div>
<div>
<code> </code><code>echo</code> <code>get_category_by_slug(</code><code>'category-name'</code><code>)-&gt;</code><code>count</code><code>; </code>
</div>
<div>
<code>?&gt;</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div id="codetool">
<div>
<textarea></textarea>
</div>
</div>
</div>
<p>
方法四:</p>
<p>
     使用WordPress内置函数get_category</p>
<div>
<div>
<div id="highlighter_886482">
<div>
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td>
<div>
1</div>
<div>
2</div>
<div>
3</div>
<div>
4</div>
</td>
<td>
<div>
<div>
<code>&lt;?php</code>
</div>
<div>
<code> </code><code>// 将以下cat_ID改成你的分类ID即可</code>
</div>
<div>
<code> </code><code>echo</code> <code>get_category(cat_ID)-&gt;</code><code>count</code><code>; </code>
</div>
<div>
<code>?&gt;</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div id="codetool">
<div>
<textarea></textarea>
</div>
</div>
</div>
<p>
总结:</p>
<p>
     方法一、三、四可以获取到单纯的文章数量,就代码量来说,方法一的代码是最多的,方法三、四的代码是最少的。就执行效率来说,方法一执行时间约为0.002秒,效率最高;方法四次之,执行时间约为0.004秒;方法三最差,执行时间约为0.008秒。执行效率之所以会有这么大的差异,原因在于方法一专注于一件事,就是查找文章数量,只执行一次数据库查询,而方法三和方法四的是WordPress内置函数,虽然只需一行代码,但是他们并不是专门为查询分类文章数而设计的,而是用于获取分类的全部信息!另外,这三种方法都不会统计子分类下的文章数。</p>
<p>
     以上所有方法不存在孰优孰劣之分,执行时间所差的几毫秒根本感觉不出来,你可以根据个人喜好来选择相关的方法。</p>
<p>
<strong>获取指定分类及其子分类文章数</strong></p>
<p>
可能有些时候我们还要获取指定分类及其所有子分类的文章数,下面我们来看一下相关实现办法。<br>
首先,定义实现函数,将以下php代码复制到当前主题的functions.php中:</p>
<div>
<div>
<div id="highlighter_966601">
<div>
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td>
<div>
1</div>
<div>
2</div>
<div>
3</div>
<div>
4</div>
<div>
5</div>
<div>
6</div>
<div>
7</div>
<div>
8</div>
<div>
9</div>
<div>
10</div>
<div>
11</div>
<div>
12</div>
<div>
13</div>
<div>
14</div>
<div>
15</div>
<div>
16</div>
</td>
<td>
<div>
<div>
<code>function</code> <code>ludou_get_cat_postcount(</code><code>$id</code><code>) {</code>
</div>
<div>
<code> </code><code>// 获取当前分类信息</code>
</div>
<div>
<code> </code><code>$cat</code> <code>= get_category(</code><code>$id</code><code>);</code>
</div>
<div>
 </div>
<div>
<code> </code><code>// 当前分类文章数</code>
</div>
<div>
<code> </code><code>$count</code> <code>= (int) </code><code>$cat</code><code>-&gt;</code><code>count</code><code>;</code>
</div>
<div>
 </div>
<div>
<code> </code><code>// 获取当前分类所有子孙分类</code>
</div>
<div>
<code> </code><code>$tax_terms</code> <code>= get_terms(</code><code>'category'</code><code>, </code><code>array</code><code>(</code><code>'child_of'</code> <code>=&gt; </code><code>$id</code><code>));</code>
</div>
<div>
 </div>
<div>
<code> </code><code>foreach</code> <code>(</code><code>$tax_terms</code> <code>as</code> <code>$tax_term</code><code>) {</code>
</div>
<div>
<code>  </code><code>// 子孙分类文章数累加</code>
</div>
<div>
<code>  </code><code>$count</code> <code>+=</code><code>$tax_term</code><code>-&gt;</code><code>count</code><code>;</code>
</div>
<div>
<code> </code><code>}</code>
</div>
<div>
<code> </code><code>return</code> <code>$count</code><code>;</code>
</div>
<div>
<code>}</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div id="codetool">
<div>
<textarea></textarea>
</div>
</div>
</div>
<p>
使用示例</p>
<p>
好了,函数定义完毕,在使用的时候只需给ludou_get_cat_postcount函数传递分类id参数即可,下面是使用示例:</p>
<div>
<div>
<div id="highlighter_263041">
<div>
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td>
<div>
1</div>
<div>
2</div>
<div>
3</div>
</td>
<td>
<div>
<div>
<code>&lt;?php</code>
</div>
<div>
<code> </code><code>echo</code> <code>'ID为123的分类及其子孙分类的文章数量为:'</code> <code>. ludou_get_cat_postcount(123);</code>
</div>
<div>
<code>?&gt;</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div id="codetool">
<div>
<textarea></textarea>
</div>
</div>
</div>
頁: [1]
查看完整版本: WordPress中获取指定分类及其子分类下的文章数目