You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从命令行执行包含PHP引入、依赖WordPress类的自定义脚本

你遇到的问题本质是WordPress核心文件(包括admin.php)依赖Web请求上下文的全局变量、路径解析逻辑,CLI模式下默认缺失这些参数,同时你当前的执行配置也存在路径和拼写问题,按以下步骤修改即可正常执行:

1. 修复PHP脚本的WordPress核心引入逻辑

不要直接引入admin.php作为入口,它本身是给Web端后台请求设计的,会做登录态校验,CLI模式下无登录用户会直接中断执行,改用WP官方兼容CLI的加载方式:

<?php
// 替换原有的admin.php引入代码
// 定位WordPress根目录,脚本放在/wp-admin目录时往上跳2层就是根目录,路径不对可自行调整层数
$wp_root = dirname(__DIR__, 2);
require_once $wp_root . '/wp-load.php';

// 多站点环境必须手动指定站点上下文,填入你要查询的站点ID即可
switch_to_blog(1);

// 如需用到admin端的工具函数,可额外引入admin的核心工具文件
require_once ABSPATH . 'wp-admin/includes/admin.php';

// 原有的业务逻辑(查询文章队列、发送邮件等)放在下方即可

2. 修复执行脚本的路径和拼写问题

首先核对文件名拼写:你提供的sh脚本中写的文件名是my-sites-notifier-laucnh.php,和你实际创建的my-sites-notifier.php不一致,先确认是否为手误。

然后修改sh脚本,先切换工作目录再执行PHP,避免cron默认工作目录不对导致相对路径加载文件失败,同时增加日志输出方便排查问题:

#!/bin/bash
# 切换到当前sh脚本所在的/wp-admin目录
cd "$(dirname "$0")" || exit
# 执行PHP脚本,把正常输出和错误输出都写入日志文件
php -d display_errors=on my-sites-notifier.php > /tmp/wp-notifier-log.log 2>&1

你也可以不用sh脚本,直接在crontab中使用绝对路径执行:

# 按你的定时需求调整执行周期,以下为每分钟执行一次的示例
* * * * * /usr/bin/php -d display_errors=on /你服务器的完整站点路径/wp-admin/my-sites-notifier.php > /tmp/wp-notifier-log.log 2>&1

3. 多站点特殊处理

如果需要遍历所有站点执行检查,在加载完wp-load.php后增加遍历逻辑即可:

$sites = get_sites();
foreach ($sites as $site) {
    switch_to_blog($site->blog_id);
    // 执行单站点的业务检查逻辑
    restore_current_blog();
}

执行过程中如果出现问题,可以直接查看/tmp/wp-notifier-log.log文件获取具体报错信息定位问题。

内容的提问来源于stack exchange,提问作者jimj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 17:18:03