[typecho]给Joe主题完善百度收录检测

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

snipaste20251229_202242.webp

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>`
        );
    }

觉得内容不错?我要

打赏杯咖啡或蜜雪冰城吧
微信扫一扫
微信赞赏码
支付宝扫一扫
支付宝赞赏码
评论 共7条
刘郎

自己写写博客 记录记录生活 至于收不收录 都不是太重要了 我个人感觉

满心

我没有刻意去SEO,一切顺其自然

Jonty
Jonty 作者 LV1

@满心 随心才能所欲啊::(呵呵)

ymz316

学习了。我现在的seo完全依靠typecho自带的head标签

Jonty
Jonty 作者 LV1

@ymz316 全靠ai ::(哈哈)

黑桃三

现在百度来源没有必应多了

Jonty
Jonty 作者 LV1

@黑桃三 其实也有Bing的推送::(哈哈)