WordPress不用插件:新文章发布时自动生成随机阅读量(点击量)

有些WordPress主题带有文章阅读量或点击量功能,但新发布的文章阅读量默认从0开始。

如果希望新文章首次发布时自动生成一个随机阅读量,可以通过WordPress自带的发布状态钩子实现,不需要额外安装插件,也不需要修改WordPress核心文件。

例如,可以让每篇新发布的文章在100到500之间随机生成一个初始阅读量。

需要说明的是,随机生成的数字不是真实访问统计,更适合用于测试环境、演示网站或历史数据迁移,不建议将其作为真实阅读量对外展示。

一、不要直接修改wp-admin/post.php

网上有一种旧方法,是打开WordPress根目录下的:

wp-admin/post.php

然后搜索:

case 'editpost'

在下面直接修改$_POST数据。

这种方法已经不推荐使用,主要有以下原因:

  1. wp-admin/post.php属于WordPress核心文件;
  2. WordPress升级后,修改过的内容会被覆盖;
  3. 不同WordPress版本的代码行数和结构不同;
  4. 直接修改$_POST依赖后台内部处理流程;
  5. 当前区块编辑器可能不会按照旧代码预期的方式保存字段;
  6. 修改错误可能导致后台无法发布或编辑文章。

正确做法是使用WordPress官方提供的动作钩子,在文章状态首次变成“已发布”时写入阅读量。

二、确认文章阅读量字段

WordPress核心默认没有文章阅读量统计功能。

主题或阅读量插件一般会把阅读量保存为文章自定义字段,常见字段包括:

views
post_views_count

本文代码默认使用:

views

只有当前主题也读取views字段时,随机生成的阅读量才会显示在前台。

如果主题使用的是post_views_count,需要将代码中的views替换为post_views_count

还有一些统计插件会把数据保存在独立的数据表中,这种情况下,本文方法不会生效。WordPress文章元数据本质上是由主题或插件定义的键值数据。

三、打开子主题的functions.php文件

建议将代码添加到当前子主题的functions.php文件中,文件路径通常是:

/wp-content/themes/你的子主题/functions.php

可以通过服务器控制面板、虚拟主机文件管理器、FTP或SFTP打开该文件。

修改之前,建议先备份functions.php

不建议直接修改父主题,因为父主题升级后,自定义代码可能会被覆盖。WordPress官方也建议通过子主题保存自定义修改。

如果文件开头已经存在:

<?php

直接在文件末尾添加代码即可,不要重复添加<?php

四、新文章自动生成随机阅读量的代码

将以下代码添加到子主题的functions.php文件中:

/**
 * 新文章首次发布时,生成随机初始阅读量。
 *
 * @param string  $new_status 新的文章状态。
 * @param string  $old_status 原来的文章状态。
 * @param WP_Post $post       当前文章对象。
 */
function jaaai_add_random_views_on_first_publish( $new_status, $old_status, $post ) {

    // 只在文章首次进入“已发布”状态时执行。
    if ( 'publish' !== $new_status || 'publish' === $old_status ) {
        return;
    }

    // 只处理普通文章,不处理页面、附件和其他内容类型。
    if ( 'post' !== $post->post_type ) {
        return;
    }

    // 在100到500之间生成随机阅读量。
    $random_views = wp_rand( 100, 500 );

    // 只在views字段不存在时添加,避免覆盖已有阅读量。
    add_post_meta( $post->ID, 'views', $random_views, true );
}

add_action(
    'transition_post_status',
    'jaaai_add_random_views_on_first_publish',
    10,
    3
);

保存文件以后,在WordPress后台新建并发布一篇文章。

如果主题使用views字段显示阅读量,新文章就会自动获得一个100到500之间的随机初始值。

transition_post_status是WordPress官方提供的文章状态变化钩子。代码通过比较新旧状态,确保只在文章进入发布状态时执行,而不是每次修改文章都重新生成数字。WordPress钩子说明

五、如何修改随机阅读量范围?

下面这行代码控制随机阅读量的最小值和最大值:

$random_views = wp_rand( 100, 500 );

其中:

  • 100是最小阅读量;
  • 500是最大阅读量。

如果希望随机生成1000到5000之间的阅读量,可以改成:

$random_views = wp_rand( 1000, 5000 );

如果希望范围是50到200,可以改成:

$random_views = wp_rand( 50, 200 );

wp_rand()会返回包含最小值和最大值在内的随机整数,也就是说wp_rand(100, 500)可能生成100,也可能生成500。

六、为什么不使用mt_rand()?

原来的代码使用:

mt_rand( 100, 500 );

这段PHP代码本身可以生成随机数,但在WordPress中,更推荐使用系统自带的:

wp_rand( 100, 500 );

wp_rand()是WordPress提供的随机数函数,与WordPress运行环境的兼容性更好,也更符合WordPress代码规范。

七、为什么要使用add_post_meta()?

代码使用下面的方法保存阅读量:

add_post_meta( $post->ID, 'views', $random_views, true );

最后一个参数true表示同一篇文章只允许添加一个views字段。

如果文章已经存在views字段,WordPress不会重复添加,也不会覆盖当前阅读量。

这样可以避免因为文章重复发布、状态变化或其他操作,导致阅读量被重新随机。

八、以前发布的文章会受到影响吗?

正常情况下不会。

这段代码只在文章从未发布状态变成已发布状态时执行,例如:

草稿 → 已发布
待审核 → 已发布
定时发布 → 已发布
私密文章 → 已发布

普通编辑已经发布的文章时,文章状态仍然是:

已发布 → 已发布

代码会直接退出,不会重新生成阅读量,也不会覆盖原来的数字。

但是,如果把以前的文章改成草稿,然后再次发布,并且该文章原本没有views字段,那么它也可能生成随机阅读量。

九、如何让页面也生成随机阅读量?

本文代码只处理普通文章:

if ( 'post' !== $post->post_type ) {
    return;
}

如果希望普通文章和页面都生成随机阅读量,可以改成:

if ( ! in_array( $post->post_type, array( 'post', 'page' ), true ) ) {
    return;
}

如果使用的是自定义文章类型,还可以把对应的文章类型名称加入数组。

不清楚自定义文章类型名称时,不建议随意修改。

十、发布文章后没有显示阅读量怎么办?

可以依次检查以下问题:

  1. 当前主题是否真的使用views字段;
  2. 主题是否使用了post_views_count等其他字段;
  3. 阅读量数据是否保存在插件自己的数据表中;
  4. 代码是否添加到了当前正在使用的主题;
  5. functions.php是否出现PHP语法错误;
  6. 网站页面缓存、对象缓存或CDN缓存是否已经清理;
  7. 文章是否真正进入了“已发布”状态。

也可以进入phpMyAdmin,在当前网站的postmeta数据表中搜索:

views

如果能够找到对应文章ID和随机数,说明代码已经成功写入,只是主题没有读取这个字段。

十一、更换主题后代码还会生效吗?

不会。

functions.php属于主题文件,更换主题以后,原主题中的代码不会继续运行。

如果经常更换主题,或者希望这项功能与主题完全独立,更规范的做法是将代码封装成站点专用插件或必须使用插件。

不过,在明确不安装插件的前提下,使用子主题的functions.php,已经比修改wp-admin/post.php安全得多。

通过WordPress官方钩子实现随机阅读量,不仅兼容性更好,也不会因为WordPress核心升级而失效。

最终推荐的核心代码是:

function jaaai_add_random_views_on_first_publish( $new_status, $old_status, $post ) {
    if (
        'publish' !== $new_status ||
        'publish' === $old_status ||
        'post' !== $post->post_type
    ) {
        return;
    }

    add_post_meta(
        $post->ID,
        'views',
        wp_rand( 100, 500 ),
        true
    );
}

add_action(
    'transition_post_status',
    'jaaai_add_random_views_on_first_publish',
    10,
    3
);

保存代码后,新文章首次发布时,就会在指定范围内自动生成随机初始阅读量,并且不会因为以后编辑文章而重复生成。

 

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