WordPress不装插件、不改代码,使用SQL批量增加文章阅读量

有时候我们在迁移WordPress网站、修复阅读量数据或者搭建测试环境时,需要批量调整文章阅读量。

如果网站的文章阅读量保存在数据库的wp_postmeta表中,可以通过phpMyAdmin执行SQL语句批量修改,不需要安装新的插件,也不需要修改主题代码。

不过,WordPress核心默认并没有文章阅读量统计功能。阅读量通常由主题或统计插件提供,不同主题和插件使用的字段、数据表可能完全不同。

因此,执行SQL之前,一定要先确认自己网站的阅读量保存位置。

本文操作适合数据迁移、数据修复和测试环境初始化,不建议用来伪造真实访问数据或对外误导用户。

一、操作前先备份WordPress数据库

直接执行SQL会修改数据库中的原始数据,而且phpMyAdmin通常没有撤销功能。

操作之前,请先在phpMyAdmin中选中WordPress数据库,然后点击顶部的“导出”,将数据库完整导出到本地。

如果SQL执行错误,可以通过备份文件恢复数据库。WordPress官方也建议在修改数据库前进行完整备份。

二、确认WordPress数据表前缀

WordPress默认的数据表前缀是wp_,所以文章和自定义字段数据表通常是:

wp_posts
wp_postmeta

但出于安全或多站点配置等原因,有些网站会使用其他前缀,例如:

abc_posts
abc_postmeta

可以直接在phpMyAdmin左侧查看实际的数据表名称,也可以打开网站根目录中的wp-config.php文件,找到:

$table_prefix = 'wp_';

如果实际前缀不是wp_,需要把本文SQL中的wp_postswp_postmeta替换成对应的数据表名称。

三、确认文章阅读量使用的字段

WordPress的文章扩展数据通常以“字段名称+字段值”的形式保存在postmeta表中,但具体字段由主题或插件决定。

常见的阅读量字段可能包括:

views
post_views_count

也有一些统计插件使用自己创建的独立数据表,根本不会把阅读量保存在postmeta中。

可以先在phpMyAdmin中点击“SQL”,执行下面的查询:

SELECT
    meta_key,
    COUNT(*) AS record_count
FROM wp_postmeta
WHERE meta_key LIKE '%view%'
GROUP BY meta_key
ORDER BY record_count DESC;

这条SQL只负责查询,不会修改任何数据。

如果查询结果中存在views,可以继续检查该字段。没有查询到相关字段,并不一定代表网站没有阅读量,数据也可能保存在插件自己的数据表中。

不要在没有确认字段的情况下直接执行更新SQL。

四、预览需要修改的文章

确认阅读量字段为views后,先执行下面的SQL查看文章标题、发布状态和当前阅读量:

SELECT
    p.ID,
    p.post_title,
    p.post_status,
    pm.meta_value AS current_views
FROM wp_posts AS p
INNER JOIN wp_postmeta AS pm
    ON p.ID = pm.post_id
WHERE pm.meta_key = 'views'
ORDER BY p.ID DESC
LIMIT 50;

检查查询结果是否与WordPress后台和前台显示的阅读量一致。

如果数据库中的数值与网站显示一致,基本可以确认views就是当前主题或插件使用的阅读量字段。

五、为所有已发布文章增加500阅读量

确认字段和数据无误后,可以执行以下SQL:

UPDATE wp_postmeta AS pm
INNER JOIN wp_posts AS p
    ON p.ID = pm.post_id
SET pm.meta_value = CAST(pm.meta_value AS UNSIGNED) + 500
WHERE pm.meta_key = 'views'
  AND p.post_type = 'post'
  AND p.post_status = 'publish'
  AND pm.meta_value REGEXP '^[0-9]+$';

这条SQL会:

  • 只修改文章类型为post的内容;
  • 只修改已经发布的文章;
  • 只修改views字段;
  • 只处理内容为非负整数的阅读量;
  • 在原有阅读量基础上增加500。

例如:

原阅读量:100
修改以后:600

如果希望每篇文章增加1000,将SQL中的500改为1000即可。

六、为没有views字段的文章补充阅读量

前面的UPDATE语句只能更新已经存在views记录的文章。

如果部分已发布文章还没有views字段,可以在完成前面的更新后,再执行下面的SQL:

INSERT INTO wp_postmeta (
    post_id,
    meta_key,
    meta_value
)
SELECT
    p.ID,
    'views',
    '500'
FROM wp_posts AS p
LEFT JOIN wp_postmeta AS pm
    ON p.ID = pm.post_id
   AND pm.meta_key = 'views'
WHERE p.post_type = 'post'
  AND p.post_status = 'publish'
  AND pm.meta_id IS NULL;

这条SQL只会为缺少views字段的已发布文章添加一条记录,并将初始阅读量设置为500。

如果希望所有文章都在原有基础上增加500,包括原本没有阅读量记录的文章,执行顺序应该是:

  1. 先执行UPDATE,为已有记录增加500;
  2. 再执行INSERT,为缺少记录的文章写入500。

如果顺序反过来,新添加的记录也会被UPDATE再次增加500,最后变成1000。

七、原来的SQL有什么问题?

网上常见的写法是:

UPDATE wp_postmeta
SET meta_value = meta_value + 500
WHERE meta_key = 'views';

这条SQL写法比较简单,但存在以下不足:

  1. 没有限制内容类型,页面和自定义文章类型也可能被修改;
  2. 没有限制发布状态,草稿或私密文章也可能被修改;
  3. 没有检查meta_value是不是数字;
  4. 不能为缺少views字段的文章新增记录;
  5. 默认认为数据表前缀一定是wp_
  6. 如果同一篇文章存在多条views记录,所有记录都会被修改。

因此,更建议使用前面带有wp_posts关联和条件限制的SQL。

八、检查是否存在重复的views记录

WordPress的Metadata API允许同一篇文章存在多个同名字段,因此可以先检查是否有重复记录:

SELECT
    post_id,
    COUNT(*) AS record_count
FROM wp_postmeta
WHERE meta_key = 'views'
GROUP BY post_id
HAVING COUNT(*) > 1;

如果查询结果为空,说明没有发现重复记录。

如果返回了文章ID,建议先确认主题或插件为什么保存了多个views字段,不要直接批量更新,否则同一篇文章的阅读量可能出现异常。

九、执行SQL后前台没有变化怎么办?

修改数据库后,WordPress前台的阅读量可能不会立即变化,可以检查以下情况:

  • 清理WordPress页面缓存;
  • 清理服务器或CDN缓存;
  • 检查对象缓存;
  • 确认主题读取的字段确实是views
  • 确认统计插件是否使用独立数据表;
  • 检查插件是否会重新计算或覆盖阅读量;
  • 重新打开文章页面进行测试。

例如,WP-PostViews会把阅读量作为文章元数据保存,而其他统计工具可能使用自己的数据表,不能直接通过修改wp_postmeta生效。

需要特别说明的是,修改views字段只会改变网站展示的阅读量数字,不会增加Google Analytics、百度统计或服务器日志中的真实访问记录。

通过SQL批量修改WordPress文章阅读量并不复杂,但一定要遵循“先备份、再查询、确认字段、预览数据、最后更新”的顺序。

只要确认阅读量确实保存在postmeta表的views字段中,就可以在不修改代码、不安装插件的情况下,快速完成批量调整。

正文完
 0
简子
版权声明:本站原创文章,由 简子 于2022-12-17发表,共计3225字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。