赵梓彤 發表於 2023-5-30 00:00:00

调用WordPress函数统计文章访问量及PHP原生计数器的实现

<p>
1.首先介绍WordPress的两款功能强大的插件:</p>
<p>
(1)Count per Day 是一个非常强大的访客数量统计插件,可以统计每天、昨天、每周、每月等等的访客数量(根据IP进行统计),统计在线访客数、浏览器、搜索词等等,自带多种调用简码、模板标签以及小工具,方便你自行调用和集成。<br>
(2)StatPressCN,实时显示blog的访问统计,完美支持中文(如搜索关键字等)。它可以集中显示来访者、爬虫、搜索关键字、订阅统计、浏览器、操 作系统等信息,方便您及时把握blog的访问情况,同时还提供了定制输出、统计权限、信息存储期等个性化设置选项。另外,您可以随时掌握blog被订阅的 情况并把它放在侧栏中显示,还可以获得所有页面(包括post、page、archive以及homepage)被访问的情况,还可以在侧栏中显示 blog中被访问最多的热门文章等。 增加了对中国大陆和港台地区的本地化语言支持(目前支持wp-config.php中设置为zh_CN、zh_HK和zh_TW)。<br>
安装插件的方式固然功能很强大,但是弊端也是显而易见的——容易影响网页加载速度,所以我放弃了这种方式。</p>
<p>
2.其次,是简单的几条代码,通过统计网页刷新的次数来记录访客数的,把以下代码放到function.php中:</p>
<div>
<div>
<div id="highlighter_920944">
<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>
<div>
17</div>
<div>
18</div>
<div>
19</div>
<div>
20</div>
<div>
21</div>
<div>
22</div>
<div>
23</div>
<div>
24</div>
<div>
25</div>
<div>
26</div>
<div>
27</div>
<div>
28</div>
<div>
29</div>
</td>
<td>
<div>
<div>
<code>/* 访问计数 */</code>
</div>
<div>
<code>function</code> <code>record_visitors()</code>
</div>
<div>
<code>{</code>
</div>
<div>
<code> </code><code>if</code> <code>(is_singular())</code>
</div>
<div>
<code> </code><code>{</code>
</div>
<div>
<code> </code><code>global</code> <code>$post</code><code>;</code>
</div>
<div>
<code> </code><code>$post_ID</code> <code>= </code><code>$post</code><code>-&gt;ID;</code>
</div>
<div>
<code> </code><code>if</code><code>(</code><code>$post_ID</code><code>)</code>
</div>
<div>
<code> </code><code>{</code>
</div>
<div>
<code> </code><code>$post_views</code> <code>= (int)get_post_meta(</code><code>$post_ID</code><code>, </code><code>'views'</code><code>, true);</code>
</div>
<div>
<code> </code><code>if</code><code>(!update_post_meta(</code><code>$post_ID</code><code>, </code><code>'views'</code><code>, (</code><code>$post_views</code><code>+1)))</code>
</div>
<div>
<code> </code><code>{</code>
</div>
<div>
<code> </code><code>add_post_meta(</code><code>$post_ID</code><code>, </code><code>'views'</code><code>, 1, true);</code>
</div>
<div>
<code> </code><code>}</code>
</div>
<div>
<code> </code><code>}</code>
</div>
<div>
<code> </code><code>}</code>
</div>
<div>
<code>}</code>
</div>
<div>
<code>add_action(</code><code>'wp_head'</code><code>, </code><code>'record_visitors'</code><code>);</code>
</div>
<div>
<code> </code>
</div>
<div>
<code>/// 函数名称:post_views</code>
</div>
<div>
<code>/// 函数作用:取得文章的阅读次数</code>
</div>
<div>
<code>function</code> <code>post_views(</code><code>$before</code> <code>= </code><code>'(点击 '</code><code>, </code><code>$after</code> <code>= </code><code>' 次)'</code><code>, </code><code>$echo</code> <code>= 1)</code>
</div>
<div>
<code>{</code>
</div>
<div>
<code> </code><code>global</code> <code>$post</code><code>;</code>
</div>
<div>
<code> </code><code>$post_ID</code> <code>= </code><code>$post</code><code>-&gt;ID;</code>
</div>
<div>
<code> </code><code>$views</code> <code>= (int)get_post_meta(</code><code>$post_ID</code><code>, </code><code>'views'</code><code>, true);</code>
</div>
<div>
<code> </code><code>if</code> <code>(</code><code>$echo</code><code>) </code><code>echo</code> <code>$before</code><code>, number_format(</code><code>$views</code><code>), </code><code>$after</code><code>;</code>
</div>
<div>
<code> </code><code>else</code> <code>return</code> <code>$views</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>
然后在需要显示的界面,比如footer.php或header.php等页面调用:</p>
<div>
<div>
<div id="highlighter_263421">
<div>
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td>
<div>
1</div>
</td>
<td>
<div>
<div>
<code>&lt;?php post_views(</code><code>' '</code><code>, </code><code>' 次'</code><code>); ?&gt;</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div id="codetool">
<div>
<textarea></textarea>
</div>
</div>
</div>
<p>
3.PHP原生实现访问计数器示例:<br>
index.php</p>
<div>
<div>
<div id="highlighter_382811">
<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>
<div>
17</div>
<div>
18</div>
<div>
19</div>
<div>
20</div>
<div>
21</div>
<div>
22</div>
<div>
23</div>
<div>
24</div>
</td>
<td>
<div>
<div>
<code>&lt;?php</code>
</div>
<div>
<code> </code><code>include</code><code>(</code><code>"counter.php"</code><code>)</code>
</div>
<div>
<code>?&gt;</code>
</div>
<div>
 </div>
<div>
<code>&lt;html&gt;</code>
</div>
<div>
<code> </code><code>&lt;head&gt;</code>
</div>
<div>
<code> </code><code>&lt;title&gt;访问计数器&lt;/title&gt;</code>
</div>
<div>
<code> </code><code>&lt;/head&gt;</code>
</div>
<div>
 </div>
<div>
<code> </code><code>&lt;body&gt;</code>
</div>
<div>
<code>  </code><code>&lt;center&gt;</code>
</div>
<div>
<code>  </code><code>&lt;h1&gt;访问者计数器&lt;/h1&gt;</code>
</div>
<div>
<code>  </code><code>&lt;U&gt;                 &lt;!--下划线--&gt;</code>
</div>
<div>
<code>  </code><code>&lt;font size=</code><code>"6"</code> <code>face=</code><code>"隶书"</code> <code>&gt;你是第&lt;/font&gt;</code>
</div>
<div>
<code>  </code><code>&lt;B&gt;</code>
</div>
<div>
<code>   </code><code>&lt;font size=</code><code>"9"</code> <code>face=</code><code>"Verdana"</code> <code>color=</code><code>"#ffcc00"</code><code>&gt;</code>
</div>
<div>
<code>   </code><code>&lt;?php Counter() ?&gt;             &lt;!--调用函数--&gt;</code>
</div>
<div>
<code>   </code><code>&lt;/font&gt;</code>
</div>
<div>
<code>  </code><code>&lt;/B&gt;</code>
</div>
<div>
<code>  </code><code>&lt;font size=</code><code>"6"</code> <code>face=</code><code>"隶书"</code> <code>&gt;个访问者&lt;/font&gt;</code>
</div>
<div>
<code>  </code><code>&lt;/U&gt;</code>
</div>
<div>
<code>  </code><code>&lt;/center&gt;</code>
</div>
<div>
<code> </code><code>&lt;/body&gt;</code>
</div>
<div>
<code>&lt;/html&gt;</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div id="codetool">
<div>
<textarea></textarea>
</div>
</div>
</div>
<p>
counter.php</p>
<div>
<div>
<div id="highlighter_467624">
<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>
<div>
17</div>
<div>
18</div>
<div>
19</div>
<div>
20</div>
<div>
21</div>
<div>
22</div>
<div>
23</div>
<div>
24</div>
<div>
25</div>
<div>
26</div>
<div>
27</div>
<div>
28</div>
<div>
29</div>
<div>
30</div>
<div>
31</div>
<div>
32</div>
<div>
33</div>
<div>
34</div>
<div>
35</div>
<div>
36</div>
<div>
37</div>
<div>
38</div>
<div>
39</div>
</td>
<td>
<div>
<div>
<code>&lt;?php</code>
</div>
<div>
<code> </code><code>//$five,$four 等变量表示零的个数,放在数字前边构成6位</code>
</div>
<div>
<code> </code><code>function</code> <code>Counter()</code>
</div>
<div>
<code> </code><code>{         </code><code>//定义函数</code>
</div>
<div>
<code>  </code><code>$five</code> <code>= </code><code>"00000"</code><code>;          </code><code>//声明变量</code>
</div>
<div>
<code>  </code><code>$four</code> <code>= </code><code>"0000"</code><code>;</code>
</div>
<div>
<code>  </code><code>$three</code> <code>= </code><code>"000"</code><code>;</code>
</div>
<div>
<code>  </code><code>$two</code> <code>= </code><code>"00"</code><code>;</code>
</div>
<div>
<code>  </code><code>$one</code> <code>= </code><code>"0"</code><code>;</code>
</div>
<div>
<code>  </code><code>$counter</code> <code>= </code><code>"record.dat"</code><code>;      </code><code>//存放访问数的目的文件,.dat格式</code>
</div>
<div>
<code>  </code><code>if</code><code>(!</code><code>file_exists</code><code>(</code><code>$counter</code><code>))     </code><code>//判断文件是否存在</code>
</div>
<div>
<code>  </code><code>{</code>
</div>
<div>
<code>   </code><code>$counter</code> <code>= </code><code>fopen</code><code>(</code><code>$counter</code><code>,</code><code>"w"</code><code>);</code>
</div>
<div>
<code>   </code><code>fputs</code><code>(</code><code>$counter</code><code>,</code><code>"0"</code><code>);      </code><code>//写入文件</code>
</div>
<div>
<code>   </code><code>fclose(</code><code>$counter</code><code>);</code>
</div>
<div>
<code>  </code><code>}</code>
</div>
<div>
<code>  </code><code>else</code>
</div>
<div>
<code>  </code><code>{</code>
</div>
<div>
<code>   </code><code>$fp</code> <code>= </code><code>fopen</code><code>(</code><code>$counter</code><code>,</code><code>"r+"</code><code>);</code>
</div>
<div>
<code>   </code><code>$num</code> <code>= </code><code>fgets</code><code>(</code><code>$fp</code><code>,</code><code>"1024"</code><code>);    </code><code>//如果文件存在则读出文件,并加 1</code>
</div>
<div>
<code>   </code><code>$num</code> <code>= </code><code>$num</code> <code>+ 1;</code>
</div>
<div>
<code>   </code><code>if</code><code>(</code><code>$num</code> <code>&lt; 10)</code>
</div>
<div>
<code>    </code><code>print</code> <code>"$five"</code><code>.</code><code>"$num"</code><code>;</code>
</div>
<div>
<code>   </code><code>elseif</code><code>(</code><code>$num</code> <code>&lt; 100)</code>
</div>
<div>
<code>    </code><code>print</code> <code>"$four"</code><code>.</code><code>"$num"</code><code>;</code>
</div>
<div>
<code>   </code><code>elseif</code><code>(</code><code>$num</code> <code>&lt; 1000)</code>
</div>
<div>
<code>    </code><code>print</code> <code>"$three"</code><code>.</code><code>"$num"</code><code>;</code>
</div>
<div>
<code>   </code><code>elseif</code><code>(</code><code>$num</code> <code>&lt; 10000)</code>
</div>
<div>
<code>    </code><code>print</code> <code>"$two"</code><code>.</code><code>"$num"</code><code>;</code>
</div>
<div>
<code>   </code><code>elseif</code><code>(</code><code>$num</code> <code>&lt; 100000)</code>
</div>
<div>
<code>    </code><code>print</code> <code>"$one"</code><code>.</code><code>"$num"</code><code>;</code>
</div>
<div>
<code>   </code><code>else</code>
</div>
<div>
<code>    </code><code>print</code> <code>"$num"</code><code>;</code>
</div>
<div>
<code>  </code><code>}</code>
</div>
<div>
<code>  </code><code>$fp</code> <code>= </code><code>fopen</code><code>(</code><code>$counter</code><code>,</code><code>"w"</code><code>);</code>
</div>
<div>
<code>  </code><code>fputs</code><code>(</code><code>$fp</code><code>,</code><code>"$num"</code><code>);</code>
</div>
<div>
<code>  </code><code>fclose(</code><code>$fp</code><code>);</code>
</div>
<div>
<code> </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>
<img title="调用WordPress函数统计文章访问量及PHP原生计数器的实现" alt="调用WordPress函数统计文章访问量及PHP原生计数器的实现" src="https://zhuji.jb51.net/uploads/img/202305/1a334adedee365465644a49e033591c2.jpg" style="max-width:100%!important;height:auto!important;width: 622px; height: 179px;"></p>
頁: [1]
查看完整版本: 调用WordPress函数统计文章访问量及PHP原生计数器的实现