一开始想到应该有什么插件能实现,搜索了下,排第一的是文章浏览量计数器(Post Views Counter)
。
在安装该插件之前,想了下,能否自己实现?毕竟动手折腾下,是会有收获的。
在搜索之前,我想到的是在wp_post
表加个字段,然后在文章打开的时候,把数据存起来,这样就能持久保存文章阅读数了。
但wordpress使用php写的,mysql加字段,对前端的我来说,还是比较耗时间的。比如用php怎么操作数据库,怎么用php加字段?估计最少半天甚至一天的时间,才能搞完。
有没有更简单的办法?
因为之前折腾过wordpress数据库,知道大概有哪些表。所以突然想到有个wp_postmeta
表。从字面看,应该是可以加个字段或者能从该表入手的。
meta_id是id,post_id是文章id,meta_key和meta_value是文章的键值对信息。
二、wordpress提供的方法
那怎么操作该张表?
wordpress提供了几个方法:
1
2
3
4
add_post_meta(
$post_id
,
$meta_key
,
$meta_value
,
$unique
);
get_post_meta(
$post_id
,
$meta_key
,
$single
);
update_post_meta(
$post_id
,
$meta_key
,
$meta_value
,
$prev_value
);
delete_post_meta(
$post_id
,
$meta_key
,
$meta_value
);
三、具体代码实现
那怎么用呢?
首先在function.php
文件中添加add和get的函数封装,然后在template-parts/content-single.php
文件中进行调用。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// function.php
function
addPostViews(
$postId
) {
$key
=
'post_views'
;
$value
= get_post_meta(
$postId
,
$key
, true);
if
(
$value
==
''
){
$value
= 0;
delete_post_meta(
$postId
,
$key
);
add_post_meta(
$postId
,
$key
,
$value
);
}
else
{
$value
++;
update_post_meta(
$postId
,
$key
,
$value
);
}
}
function
getPostViews(
$postId
){
$key
=
'post_views'
;
$value
= get_post_meta(
$postId
,
$key
, true);
if
(
$value
==
''
){
$value
= 0;
delete_post_meta(
$postId
,
$key
);
add_post_meta(
$postId
,
$key
,
$value
);
return
$value
;
}
return
$value
;
}
// template-parts/content-single.php
<p>阅读:<?php
echo
getPostViews(get_the_ID()); ?></p>
<?php addPostViews(get_the_ID()); ?>