不得不说AI的强大,由于我网站有将近400篇下载模块的链接需要提取出来,然后配合我的下载按钮

[b2_insert_post id=”1942″]

本来感觉要折腾两三天才能整理完,突发奇想用AI做半自动的操作代码,没想到十几分钟就搞完了。。

代码逻辑

提取下载模块编辑框中的地址链接 → 将链接填入下载按钮设置中 → 自动点击下载按钮的插入按钮 → 关闭下载模块 → 删除下载模块的列表 → 点击更新文章

好家伙一套小连招,一会就整完了,如果搭配自动点开编辑页面,和自动切换文章列表页,我可能什么都不用干了,不过我还是手动打开文章了,想着看一眼别有什么差错

相关代码

[content_hide]

 /**
 * B2主题下载模块链接自动迁移
 * 最终版:支持批量打开+自动更新保存+防重复执行
 */
function b2_auto_migrate_download_link() {
    // 只在文章编辑页面执行
    global $pagenow, $post;
    if ($pagenow !== 'post.php' && $pagenow !== 'post-new.php') {
        return;
    }
    
    // 获取当前文章ID(用于标记执行状态)
    $post_id = isset($post->ID) ? $post->ID : 0;
    ?>
    <script type="text/javascript">
    jQuery(document).ready(function($) {
        // ========== 核心保护机制 ==========
        // 1. 检查当前文章是否已执行过迁移(通过localStorage标记)
        var postId = <?php echo $post_id; ?>;
        var executedKey = 'b2_download_migrate_' + postId;
        
        // 如果已执行过,直接退出
        if (localStorage.getItem(executedKey)) {
            console.log('文章ID ' + postId + ' 已执行过链接迁移,跳过');
            return;
        }

        // 2. 增加随机延迟(避免多个标签页同时执行)
        var randomDelay = 1500 + Math.floor(Math.random() * 2000); // 1.5-3.5秒随机延迟
        
        // 等待页面完全加载(确保所有元素都已渲染)
        setTimeout(function() {
            try {
                // ========== 步骤1:检查是否有可迁移的资源(提前过滤) ==========
                var downloadUrlTextarea = $('#b2_single_post_download_group_0_url');
                var deleteBtn = $('.cmb-remove-group-row.dashicons-no-alt');
                
                // 如果没有资源链接或没有删除按钮,直接标记为已执行并退出
                if (!downloadUrlTextarea.length || !deleteBtn.length) {
                    localStorage.setItem(executedKey, 'done');
                    console.log('文章ID ' + postId + ' 无迁移资源,标记为已处理');
                    return;
                }
                
                // ========== 步骤2:提取下载设置中的第一条资源链接 ==========
                var rawContent = downloadUrlTextarea.val().trim();
                var extractedUrl = '';
                
                if (rawContent) {
                    // 按换行分割内容,只处理第一行
                    var lines = rawContent.split(/\r?\n/);
                    var firstLine = lines[0].trim(); // 只取第一行
                    
                    // 解析第一行内容中的链接
                    if (firstLine.indexOf('|') !== -1) {
                        var parts = firstLine.split('|');
                        // 遍历第一行的所有部分找URL
                        parts.forEach(function(part) {
                            if (part.match(/https?:\/\/[^\s]+/i) && !extractedUrl) {
                                extractedUrl = part.trim();
                            }
                        });
                    } else {
                        // 直接匹配第一行中的URL
                        var urlMatch = firstLine.match(/https?:\/\/[^\s]+/i);
                        if (urlMatch) {
                            extractedUrl = urlMatch[0];
                        }
                    }
                }
                
                if (!extractedUrl) {
                    localStorage.setItem(executedKey, 'no_url');
                    console.log('文章ID ' + postId + ' 未提取到有效链接,标记为已检查');
                    return;
                }
                console.log('文章ID ' + postId + ' 提取到的第一条链接:', extractedUrl);

                // ========== 步骤3:选择Linkdown类型 ==========
                var linkdownRadio = $('input[name="download_type"][value="linkdown"]');
                if (linkdownRadio.length) {
                    linkdownRadio.prop('checked', true);
                    linkdownRadio.trigger('change');
                }

                // ========== 步骤4:填入Linkdown输入框 ==========
                var linkdownInput = $('#linkdown_url');
                if (linkdownInput.length) {
                    linkdownInput.val(extractedUrl);
                }

                // ========== 步骤5:点击插入访问按钮 ==========
                var insertBtn = $('#insert-linkdown-btn');
                if (insertBtn.length) {
                    insertBtn.trigger('click');
                    console.log('文章ID ' + postId + ' 已插入访问按钮短代码');
                }

                // ========== 步骤6:删除原下载设置中的资源项 ==========
                if (deleteBtn.length) {
                    window.confirm = function() { return true; };
                    deleteBtn.trigger('click');
                    delete window.confirm;
                    console.log('文章ID ' + postId + ' 已删除原下载设置中的资源项');
                }

                // ========== 步骤7:自动更新保存文章(核心新增功能) ==========
                // 生成2-4秒的随机延迟,避免批量更新服务器压力
                var saveDelay = 2000 + Math.floor(Math.random() * 2000); 
                setTimeout(function() {
                    // 找到更新按钮并点击
                    var updateBtn = $('#publish');
                    if (updateBtn.length && updateBtn.val() === '更新') {
                        console.log('文章ID ' + postId + ' 开始自动保存更新');
                        updateBtn.trigger('click');
                        
                        // 标记为已完成(包含更新)
                        localStorage.setItem(executedKey, 'updated');
                        console.log('文章ID ' + postId + ' 自动更新完成,标记为已处理');
                    } else {
                        // 兼容新建文章的"发布"按钮(可选)
                        if (updateBtn.length && updateBtn.val() === '发布') {
                            console.log('文章ID ' + postId + ' 是新建文章,跳过自动发布');
                            localStorage.setItem(executedKey, 'draft_skipped');
                        } else {
                            console.log('文章ID ' + postId + ' 未找到更新按钮');
                            localStorage.setItem(executedKey, 'no_update_btn');
                        }
                    }
                }, saveDelay);

            } catch (e) {
                console.error('文章ID ' + postId + ' 自动迁移下载链接出错:', e);
                // 出错也标记为已检查,避免重复报错
                localStorage.setItem(executedKey, 'error');
            }
        }, randomDelay); // 初始随机延迟,分散执行压力
    });
    </script>
    <?php
}
add_action('admin_footer', 'b2_auto_migrate_download_link');

/**
 * 可选:添加后台清理标记的功能(在工具菜单显示)
 */
function b2_clear_download_migrate_marks() {
    add_management_page(
        '清理下载迁移标记',
        '清理下载迁移标记',
        'manage_options',
        'b2-clear-migrate-marks',
        function() {
            ?>
            <div class="wrap">
                <h1>清理下载迁移标记</h1>
                <p>点击下方按钮可清理浏览器中记录的文章迁移标记,让所有文章重新执行迁移逻辑。</p>
                <button id="clear-marks-btn" class="button button-primary">清理所有标记</button>
                <p id="clear-result" style="margin-top: 10px; color: green; display: none;">标记已清理完成!</p>
            </div>
            <script>
            jQuery('#clear-marks-btn').click(function() {
                // 遍历localStorage删除所有迁移标记
                for (var i = 0; i < localStorage.length; i++) {
                    var key = localStorage.key(i);
                    if (key.indexOf('b2_download_migrate_') === 0) {
                        localStorage.removeItem(key);
                    }
                }
                jQuery('#clear-result').show();
                setTimeout(function() {
                    jQuery('#clear-result').hide();
                }, 3000);
            });
            </script>
            <?php
        }
    );
}
add_action('admin_menu', 'b2_clear_download_migrate_marks');

 

[/content_hide]

2 讨论
热门最新
总结
暂无总结

我也想迁移主题了,B2好久没更新了

现在能比B2功能多、优化好的主题我还没遇到,只能这样先用着了。瓜奇现在没做好,子主题教程也没有,完全不会用,只能等了。😤

0 / 600