本文摘要1. 修改 functions.php (后台设置与字段)操作:删除你原来的 $JBaiduToken 相关代码,替换为以下代码。同时我们需要修改 themeFields 函数以支持记录推送状态。/* --------------------- 在 themeConfig 函数中 --------------------- */ // 1. 删除旧的 JBaiduToken 设置 // 2. 添加...

1. 修改 functions.php (后台设置与字段)
操作:删除你原来的 $JBaiduToken 相关代码,替换为以下代码。同时我们需要修改 themeFields 函数以支持记录推送状态。
/* --------------------- 在 themeConfig 函数中 --------------------- */
// 1. 删除旧的 JBaiduToken 设置
// 2. 添加新的收录检测设置
$JPost_Record_Detection = new Typecho_Widget_Helper_Form_Element_Select(
'JPost_Record_Detection',
['off' => '关闭(默认)', 'on' => '开启'],
'off',
'是否开启文章百度收录检测',
'开启后将在文章页显示收录状态,支持自动推送。'
);
$JPost_Record_Detection->setAttribute('class', 'joe_content joe_post');
$form->addInput($JPost_Record_Detection);
// 下面是联动设置,为了兼容性,直接显示或配合JS隐藏,这里直接列出
$BaiduRecordCookie = new Typecho_Widget_Helper_Form_Element_Textarea(
'BaiduRecordCookie',
NULL,
NULL,
'百度收录检测 Cookie (开启检测必填)',
'介绍:检测百度是否收录指定文章时必须带有正确的 Cookie,否则会检测失败。<br>获取方法:浏览器隐身模式访问百度,F12打开网络面板,刷新,查看请求头的Cookie。'
);
$BaiduRecordCookie->setAttribute('class', 'joe_content joe_post');
$form->addInput($BaiduRecordCookie);
$BaiduRecordUserAgent = new Typecho_Widget_Helper_Form_Element_Text(
'BaiduRecordUserAgent',
NULL,
NULL,
'百度收录检测 User-Agent (开启检测必填)',
'介绍:配合Cookie模拟真实浏览器访问。'
);
$BaiduRecordUserAgent->setAttribute('class', 'joe_content joe_post');
$form->addInput($BaiduRecordUserAgent);
$BaiduPushToken = new Typecho_Widget_Helper_Form_Element_Text(
'BaiduPushToken',
NULL,
NULL,
'百度推送 Token',
'介绍:在百度站长平台获取。用于未收录时自动推送。'
);
$BaiduPushToken->setAttribute('class', 'joe_content joe_post');
$form->addInput($BaiduPushToken);
$BingPushToken = new Typecho_Widget_Helper_Form_Element_Text(
'BingPushToken',
NULL,
NULL,
'必应推送 Token',
'介绍:在必应站长平台获取。'
);
$BingPushToken->setAttribute('class', 'joe_content joe_post');
$form->addInput($BingPushToken);
/* --------------------- 在 themeFields 函数中 --------------------- */
// 在 themeFields 函数末尾添加,用于数据库存储是否已推送的状态
// 这样可以避免重复推送,节省额度
if (Helper::options()->JPost_Record_Detection == 'on') {
$baidu_push = new Typecho_Widget_Helper_Form_Element_Select(
'baidu_push',
['0' => '未推送', '1' => '已推送'],
'0',
'百度收录推送状态',
'系统自动维护,无需手动修改'
);
$layout->addItem($baidu_push);
}2. 修改 config.php (全局参数)
操作:更新 window.Joe 对象,移除旧的逻辑,注入新逻辑所需的参数。
window.Joe = {
// ... 其他原有配置保持不变 ...
// 修改及新增部分
BAIDU_PUSH: <?php echo Helper::options()->JPost_Record_Detection == 'on' ? 'true' : 'false' ?>,
BING_PUSH: <?php echo Helper::options()->BingPushToken ? 'true' : 'false' ?>,
// ... 其他原有配置 ...
}3. 修改 core.php (路由控制)
操作:确保路由指向新的处理函数。新增 bing_push。
/* 主题开放API 路由规则 */
if ($self->request->getPathInfo() == "/joe/api") {
switch ($self->request->routeType) {
// ... 其他原有 case ...
case 'baidu_record':
_getRecord($self);
break;
case 'baidu_push':
_pushRecord($self);
break;
case 'bing_push': // 新增
_pushBing($self);
break;
// ... 其他原有 case ...
};
}4. 修改 route.php (核心逻辑)
操作:这是最关键的部分。我已将原代码的 ThinkPHP 语法转换为 Typecho 原生语法,并集成了 Cookie/UA 模拟爬虫。
此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
5. 修改 joe.post_page.js (前端逻辑)
操作:替换原有的 ajax 逻辑,改为新版逻辑。
// 百度收录检测与推送
if (window.Joe.BAIDU_PUSH) {
const submitBaidu = () => {
$('#Joe_Baidu_Record').html('<span style="color: #E6A23C">推送中...</span>');
// 推送给百度
$.ajax({
url: Joe.BASE_API,
type: 'POST',
dataType: 'json',
data: {
routeType: 'baidu_push',
domain: window.location.protocol + '//' + window.location.hostname,
url: window.location.href,
cid: cid
},
success(res) {
if (res.already) {
$('#Joe_Baidu_Record').html('<span style="color: #67C23A">已推送(缓存)</span>');
return;
}
if (res.data && res.data.remain) {
$('#Joe_Baidu_Record').html('<span style="color: #67C23A">推送成功!剩余 ' + res.data.remain + '</span>');
} else {
let msg = res.data?.message || '推送失败';
$('#Joe_Baidu_Record').html('<span style="color: #F56C6C">' + msg + '</span>');
}
}
});
// 推送给必应
if (window.Joe.BING_PUSH) {
$.ajax({
url: Joe.BASE_API,
type: 'POST',
dataType: 'json',
data: {
routeType: 'bing_push',
domain: window.location.protocol + '//' + window.location.hostname,
url: window.location.href
}
});
}
};
// 开始检测
$.ajax({
url: Joe.BASE_API,
type: 'POST',
dataType: 'json',
data: {
routeType: 'baidu_record',
site: window.location.href,
cid: cid
},
success(res) {
if (res.data === '已收录') {
$('#Joe_Baidu_Record').css('color', '#67C23A').html('已收录');
} else if (res.data === '未收录,已推送') {
$('#Joe_Baidu_Record').css('color', '#67C23A').html('未收录,已推送');
} else {
submitBaidu();
}
},
error() {
$('#Joe_Baidu_Record').html('检测失败');
}
});
} else {
$('#Joe_Baidu_Record').html(
`<a target="_blank" href="https://ziyuan.baidu.com/linksubmit/url?sitename=${encodeURI(window.location.href)}"
rel="noopener noreferrer nofollow" style="color: #F56C6C">未收录,提交收录</a>`
);
} 觉得内容不错?我要
自己写写博客 记录记录生活 至于收不收录 都不是太重要了 我个人感觉
我没有刻意去SEO,一切顺其自然
@满心 随心才能所欲啊::(呵呵)
学习了。我现在的seo完全依靠typecho自带的head标签
@ymz316 全靠ai ::(哈哈)
现在百度来源没有必应多了
@黑桃三 其实也有Bing的推送::(哈哈)