WordPress计划任务那些坑,无法获取地址问题

4.7
(3)

最近几乎每天都在更新WordPress自动问答插件,用到了一些计划任务,包括单次计划任务用于异步作答,重复性计划任务用于自动提问。对WordPress自动问答插件感兴趣的,可以访问文章:《WordPress自动问答插件,对接OpenAi ChatGPT》。

今天,重写了下授权,发现了计划任务的一个坑。计划任务无法读取网站域名,尤其使用异步作答时,无法传递网站域名,导致授权失败。后来各种找记录,各种找AI。最终确定,需要在计划任务开始前加载一下wp-load.php文件,这里定义了很多参数,包括了网站域名。当然,不排除我还是不知道wp-load.php的具体用途,下面是Ai关于这个文件的描述:《WordPress的wp-load.php文件有什么用》。

WordPress计划任务那些坑,无法获取地址问题

wp-load.php文件是WordPress的核心文件之一,主要作用是加载WordPress核心文件和初始化WordPress环境。可以理解为WordPress的入口文件。该文件包含了WordPress的所有函数和类。

在开发过程中,有时候必须加载wp-load.php文件,例如在编写自定义脚本或插件时,需要调用WordPress的函数或使用WordPress的数据。如果不加载wp-load.php文件,则无法访问到这些WordPress的功能和数据。

在WordPress中加载wp-load.php文件需要非常注意,因为该文件可以直接访问WordPress的数据库。如果在不安全的环境下使用该文件,可能会导致安全问题。因此,使用wp-load.php文件时必须格外小心,同时确保只有授权用户可以访问。

WordPress计划任务那些坑,无法获取地址问题

而我在授权时,需要获取一下网站的域名,需要用到:get_site_url()。然后,计划任务可能为了轻便,直接不包含这个函数,就算你自己定义一下函数,也是因为计划任务本身导致无法使用。最终,我知道需要加载一下wp-load.php文件。

这个时候又来一个坑,比如,我直接从插件文件往上数三层,到达WordPress根目录,获取wp-load.php文件的路径,最终发现计划任务连它自己所在的插件文件位置都不知道。

即,如下代码无法使用

require_once('../../../wp-load.php');

后来,我又尝试了以下代码,也是无法使用

$dir = dirname(dirname(dirname(__FILE__))); // 获取当前文件所在目录的上级目录的上级目录的绝对路径
require_once $dir . '/wp-load.php'; // 使用相对路径加载wp-load.php文件

有那么一刻,我突然反应过来,计划任务肯定知道执行它的wp-cron.php文件位置,只需要在同目录找wp-load.php文件即可。没想到误打误撞,拿到了如下代码,成功解决了问题。即,如下代码可以在计划任务中成功加载wp-load.php文件,进而通过get_site_url()获取网站域名。

require_once ABSPATH . 'wp-load.php'; // 使用绝对路径加载wp-load.php文件

其实,上面的代码是获取到了WordPress安装目录,仔细想想也对,WordPress的计划任务再轻便,也得知道WordPress的安装目录。于是,成功获取了wp-load.php文件。

问题最终得到解决。

共计3人评分,平均4.7

到目前为止还没有投票~

很抱歉,这篇文章对您没有用!

让我们改善这篇文章!

告诉我们我们如何改善这篇文章?

原创文章,作者:古哥,转载需经过作者授权同意,并附上原文链接:https://iymark.com/articles/6516.html

(0)
微信公众号
古哥的头像古哥管理团队
上一篇 2023年04月20日 23:23
下一篇 2023年04月22日 22:19

你可能感兴趣的文章

发表回复

登录后才能评论
微信小程序
微信公众号