前置准备
先完成以下3项准备,确保后续操作不会卡壳:
- 获取推送接口密钥:分别访问百度搜索资源平台-普通收录、必应网站管理员工具,完成网站验证后,在「普通收录」「提交URL」页面找到API提交入口,复制各自的接口地址与token。
- 确认帝国CMS版本:本教程适配帝国CMS7.0-7.5全系列UTF-8/GBK版本,更高/更低版本需自行微调代码。
- 备份网站数据:操作前务必通过帝国CMS后台「系统设置-数据备份与恢复-备份数据库」备份全站数据,避免误操作导致内容丢失。
第一步:创建自动推送函数文件
创建一个专门存放推送代码的文件,避免修改系统核心文件:
1.1 新建文件
通过FTP工具或服务器后台文件管理器,在帝国CMS根目录下的 /e/extend/ 文件夹中,新建名为 auto_push.php 的空文件。
1.2 复制完整代码
将以下适配双平台的完整代码粘贴到 auto_push.php 中,注意根据自己的接口信息修改红框标注的替换区域(实际操作中直接替换注释后的内容即可):
```php
$baidu_api,
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => implode("\n", array($url)),
CURLOPT_HTTPHEADER => array('Content-Type: text/plain'),
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false
);
curl_setopt_array($baidu_ch, $options);
$baidu_result = curl_exec($baidu_ch);
curl_close($baidu_ch);
// 处理必应推送
$bing_data = array(
'siteUrl' => 'https://' . $site_domain, // 如果你是http,改成http://
'urlList' => array($url)
);
$bing_json = json_encode($bing_data);
$bing_ch = curl_init();
curl_setopt($bing_ch, CURLOPT_URL, $bing_api);
curl_setopt($bing_ch, CURLOPT_POST, true);
curl_setopt($bing_ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($bing_ch, CURLOPT_POSTFIELDS, $bing_json);
curl_setopt($bing_ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($bing_json)
));
curl_setopt($bing_ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($bing_ch, CURLOPT_SSL_VERIFYHOST, false);
$bing_result = curl_exec($bing_ch);
curl_close($bing_ch);
// 记录推送日志(可选,便于排查问题)
file_put_contents(ECMS_PATH . 'e/extend/auto_push_log.txt', date('Y-m-d H:i:s') . " | 百度: " . $baidu_result . " | 必应: " . $bing_result . "\n", FILE_APPEND);
}
?>
```
第二步:修改帝国CMS内容发布触发点
修改帝国CMS的内容发布/审核/修改逻辑,让系统在内容状态符合要求时自动调用推送函数:
2.1 找到并打开触发文件
进入帝国CMS根目录下的 /e/class/ 文件夹,找到 functions.php 文件,建议先复制一份备份为 functions_bak.php。
2.2 引入自动推送函数
打开 functions.php,在文件最顶部(第一行 之后)添加以下引入代码:
```php
require_once(ECMS_PATH . 'e/extend/auto_push.php');
```
2.3 找到审核/发布内容的核心函数

在 functions.php 中搜索 function DoAddNews(新增内容)和 function DoEditNews(修改内容)函数,以及 function DoCheckNews(审核内容)函数。
2.4 在新增内容函数中插入推送代码
找到 DoAddNews 函数的末尾,在 return $classid;(或类似的返回语句)之前,添加以下判断+推送代码:
```php
// 自动推送双平台(仅新增时自动审核通过的内容触发)
if ($r['checked'] == 1) {
$push_url = $public_r['newsurl'] . $r['classpath'] . '/' . $r['filename'] . $public_r['newsfile'];
autoPushToSearch($push_url);
}
```
2.5 在修改内容函数中插入推送代码
找到 DoEditNews 函数的末尾,在 return $classid; 之前,添加类似代码(修改后状态为审核通过才触发):
```php
// 自动推送双平台(仅修改时自动审核通过的内容触发)
if ($r['checked'] == 1) {
$push_url = $public_r['newsurl'] . $r['classpath'] . '/' . $r['filename'] . $public_r['newsfile'];
autoPushToSearch($push_url);
}
```
2.6 在审核内容函数中插入推送代码
找到 DoCheckNews 函数,先看一下代码结构,找到遍历审核ID的循环部分(比如 foreach($id as $key=>$val){ 或 for($i=0;$i<$count;$i++){),在循环内部获取到当前审核文章的信息后(一般是 $r=$empire->fetch1("select from phome_ecms_模型表 where id='$val' limit 1"); 这里的模型表要注意是你自己的主模型,默认是news),添加以下代码:
```php
// 获取模型表的栏目路径、文件名
$cr=$empire->fetch1("select classpath from phome_enewsclass where classid='$r[classid]' limit 1");
$public_r=$empire->fetch1("select newsurl,newsfile from phome_enewspublic limit 1");
// 生成推送链接
$push_url = $public_r['newsurl'] . $cr['classpath'] . '/' . $r['filename'] . $public_r['newsfile'];
// 自动推送双平台
autoPushToSearch($push_url);
```
注意:如果你的网站有多个模型(比如新闻news、图片photo、下载down),需要在 DoCheckNews 函数中为每个模型都添加这段代码,只需替换 phome_ecms_模型表 为对应的表名即可。
第三步:测试自动推送功能
完成上述修改后,按以下步骤测试,确保功能正常:
- 测试新增内容自动审核推送:进入帝国CMS后台,新建一篇新闻,直接勾选「审核通过」,点击发布,然后打开
/e/extend/auto_push_log.txt(如果存在的话),查看百度和必应的返回结果——百度返回 {"remain":剩余配额,"success":1} 表示成功,必应返回 {"d":null} 或包含 true 的内容表示成功。
- 测试审核待发布内容推送:新建一篇新闻,不勾选「审核通过」,点击发布,然后在「内容管理-审核内容」中勾选该文章并审核通过,再次查看日志文件。
- 测试修改已发布内容推送:打开刚才审核通过的文章,修改标题或内容后点击发布,再次查看日志文件。
常见问题排查
如果测试时日志中没有记录或返回失败,按以下步骤排查:
- 检查替换区域auto_push.php 中的接口地址、token、网站域名是否填写正确,特别是域名是否带http/https,百度接口的
site 参数是否与搜索资源平台验证的域名一致。
- 检查模型表名DoCheckNews 函数中的
phome_ecms_模型表 是否正确,帝国CMS默认模型是news、photo、down、flash、movie、article。
- 检查curl是否开启
- 检查日志文件权限/e/extend/ 文件夹的权限是755或777,日志文件可以自动创建并写入内容。