MySQL:执行SQL语句找回WordPress日志丢失的阅读数量

2018年04月25日 1833Browse 4Like 0Comments

前言

WordPress默认主题不带日志的访问量统计功能,但有个插件WP-PostViews,在安装之后,可利用其提供的函数修改主题中相应的代码即可显示日志的阅读量、like数量等等,如何使用网络上有各种经验帖,但我发现这些教程都不系统,修改之后换个主题又得重新来(因为每个主题的代码文件可能有差异),尤其是我现在使用的主题已提供该功能,因此就禁用了该插件。

今天,我重新清理卸载了这些已不常用的插件,结果发现自己所有日志的阅读数量、点赞数量全都清零了。虽说这么长时间了没写几篇日志,但部分文章累计的这些原始访问量也快上千了,一下子没有了怎么都觉得有点不爽,可怎么找回来呢?最直接的当然是从数据库中恢复了。

WP数据库的日志数据表结构

WordPress数据库支持MySQL或MariaDB,其表结构可以在这里查看:https://codex.wordpress.org/Database_Description,而每篇日志的一些属性就记录在wp_postmeta这张表中,这张表提供了4个Field:meta_idpost_idmeta_keymeta_value,其中前三个是可索引的,而日志的统计就是用不同的meta_key来表示,其值存放在meta_value之中。

MariaDB [wordpress]> describe wp_postmeta;
+------------+---------------------+------+-----+---------+----------------+
| Field      | Type                | Null | Key | Default | Extra          |
+------------+---------------------+------+-----+---------+----------------+
| meta_id    | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| post_id    | bigint(20) unsigned | NO   | MUL | 0       |                |
| meta_key   | varchar(255)        | YES  | MUL | NULL    |                |
| meta_value | longtext            | YES  |     | NULL    |                |
+------------+---------------------+------+-----+---------+----------------+

我来试着找一下日志到底有哪些meta_key属性:

MariaDB [wordpress]> select distinct meta_key from wp_postmeta;
+------------------------------------------+
| meta_key                                 |
+------------------------------------------+
| _wp_page_template                        |
| _edit_lock                               |
| _edit_last                               |
| _wp_old_slug                             |
| _oembed_1ffa1b68748882b8be0dcc38e089ea4d |
| _wp_attached_file                        |
| _wp_attachment_metadata                  |
| _wp_trash_meta_status                    |
| _wp_trash_meta_time                      |
| _menu_item_type                          |
| _menu_item_menu_item_parent              |
| _menu_item_object_id                     |
| _menu_item_object                        |
| _menu_item_target                        |
| _menu_item_classes                       |
| _menu_item_xfn                           |
| _menu_item_url                           |
| _menu_item_orphaned                      |
| love                                     |
| _aioseop_description                     |
| _aioseop_title                           |
| _wpcom_is_markdown                       |
| views                                    |
+------------------------------------------+

顾名思义,loveviews就是我要找的,如不出所料应该对应点赞数量和阅读数量计数。想必在卸载WP-PostViews插件时,这两个计数被自动清零了。找到了这两项就好办了。

执行SQL语句更改日志统计信息

这里就不能用恢复统计信息这个说法了,因为哥已经记不住之前准确的访问数值了,而且严格意义上来说被清零了,就没法恢复。

所以,我的目的就是想将日志访问数据仅仅更新至某个接近的真实访问值即可。咱们的个人博客光靠修改这个值也换不来真实的流量,光有好看的数值也不顶用,提升不了排名!主要还是要靠内容和质量取胜才是!

所以如直接修改views的值,那么所有文章的计数统计将变成统一的值了(因为现在计数均是0值),这样也太假了!由于每个loveviews对应一个post_id,这个post_id是对应一篇已经发布或待发布(草稿)日志的。现在就需要通过viewslike反查到post_id,结合post_id一起来单独修改才行。执行下述语句:

MariaDB [wordpress]> select post_id from wp_postmeta where meta_key='views' order by post_id;
+---------+
| post_id |
+---------+
|       1 |
|       6 |
|      38 |
|      65 |
|     127 |
|     134 |
+---------+

post_id对应的实际可查看的日志(已发布的浏览者可看到,未发布的是草稿撰写者可看到,其他的都是中间版本)本身到目前为止,本人总共就发布了5篇文章,加上目前正在编辑的这篇(post_id编号是134,编号最大)共6篇,说明反查成功无误。

这样的话就可以为已发布的日志文章单独设置相应的阅读数量views和点赞次数love值了。先设置自己的第一篇日志——Hello World!来验证一下是否正确。

MariaDB [wordpress]> update wp_postmeta set meta_value=120 where post_id='1' and meta_key='views';

测试:打开浏览器访问相应的日志看看(如下图),算上自己的这次浏览,总共120+1=121是对的,已经不再是0了!成功达到目的!

接下来就是用同样的办法修改其他日志的viewslove值了。

总结

  1. 本文中的SQL语句直接在博客主机上MariaDB中进行;
  2. 本文主要用到了下述SQL语句:
show databases;
use wordpress;
describe wp_postmeta;
select distinct meta_key from wp_postmeta;
select post_id from wp_postmeta where meta_key='views' order by post_id;
update wp_postmeta set meta_value=120 where post_id='1' and meta_key='views';
update wp_postmeta set meta_value=5 where post_id='1' and meta_key='love'

Sunflower

Stay hungry stay foolish

Comments