處理文章中的圖片鏈接 – WordPress 使用阿里云 OSS 圖片處理教程

    本站使用阿里云的 OSS 存儲圖片,阿里云 OSS 提供了圖片處理服務(wù),通過此服務(wù),可以對存儲在阿里云 OSS 中的圖鑒進(jìn)行方法的調(diào)整,例如圖片質(zhì)量、圖片格式等。

    由于使用了阿里云的 CDN 對 OSS 中的圖片進(jìn)行加速處理,圖片越大,流量費(fèi)越高。于是,我希望

    • 不改變 OSS 中存儲的原始圖片(以后可能還要做其他用處)
    • 可以提供 webp 格式的圖片,減少圖片體積,節(jié)省 CDN 流量,省錢
    • 操作最好是自動化的,不要太麻煩
    • 不能改變存儲在數(shù)據(jù)庫中的圖片鏈接,降低后續(xù)操作難度

    • 阿里云格式轉(zhuǎn)換:詳情

    流程圖

    處理文章中的圖片鏈接 - WordPress 使用阿里云 OSS 圖片處理教程

    效果

    在文章編輯器中插入測試內(nèi)容:

    <img src="http://www.kartiktrivedi.com/01.png">
    <img src='http://www.kartiktrivedi.com/02.jpg?w=800'>
    <img src="http://www.kartiktrivedi.com/exist.png!npcink.webp">

    輸出時(shí)會自動轉(zhuǎn)換為:

    <img src="http://www.kartiktrivedi.com/01.png!npcink.webp">
    <img src="http://www.kartiktrivedi.com/02.jpg!npcink.webp?w=800">
    <img src="http://www.kartiktrivedi.com/exist.png!npcink.webp"> <!-- 已存在的不會被修改 -->

    實(shí)現(xiàn)步驟

    通過 WordPress 的 the_content 過濾器來實(shí)現(xiàn)這個(gè)需求。這里提供完整方案:

    // 在 functions.php 中添加如下代碼
    function npcink_append_webp_to_images($content) {
        // 匹配所有圖片鏈接的正則表達(dá)式
        $pattern = '/<img[^>]*src=(["'])(?<url>https?://[^"']+?.(?:png|jpe?g|gif|webp))(?!!npcink)(?[^"']*)?1/';
        
        $content = preg_replace_callback($pattern, function($matches) {
            $original_url = $matches['url'];
            $query = $matches[3] ?? ''; // 保留原始查詢參數(shù)
            $separator = (strpos($original_url, '?') === false) ? '?' : '&';
            return str_replace(
                $matches[0],
                '<img src="' . $original_url . '!npcink.webp' . $query . '"',
                $matches[0]
            );
        }, $content);
    
        return $content;
    }
    add_filter('the_content', 'npcink_append_webp_to_images', 20);

    僅替換指定域名的圖片

    這里,僅處理 n.getimg.net 下的圖片鏈接,其他圖片不動

    // 在 functions.php 中添加如下代碼
    //僅針對指定域名-n.getimg.net,在展示文章時(shí)做替換
    
    function npcink_specific_domain_webp($content) {
        $pattern = '/<img[^>]*src=(["'])(?<url>https?://(?:[a-z0-9-]+.)?n.getimg.net[^"']*?.(?:png|jpe?g|gif|webp|bmp))(?!(?:[^"']*?[&?])npcink)(?[^"']*)?1/i';
    
        $content = preg_replace_callback($pattern, function($matches) {
            $original_url = $matches['url'];
            
            // 七層防御重復(fù)檢測
            if (strpos($original_url, '!npcink.webp') !== false || 
                preg_match('/.webp(?=?|$)/i', $original_url)) {
                return $matches[0];
            }
    
            // 智能拼接策略
            $separator = (strpos($original_url, '?') !== false) ? '&' : '!';
            return str_replace(
                $matches['url'],
                $original_url . $separator . 'npcink.webp',
                $matches[0]
            );
        }, $content);
    
        return $content;
    }
    add_filter('the_content', 'npcink_specific_domain_webp', 20);
    

    不處理GIF

    處理gif的圖片會導(dǎo)致無法播放動圖,可參考下方代碼

    // 在 functions.php 中添加如下代碼
    /*
    1、僅針對指定域名-n.getimg.net,在展示文章時(shí)做替換
    2、排除 gif后綴圖片
    */
    
    function npcink_specific_domain_webp($content) {
        $pattern = '/<img[^>]*src=(?<quote>["'])(?<url>https?://(?:[^.]*.)?n.getimg.net[^^g{quote}]*?.(?:png|jpe?g|webp|bmp))(?![^^g{quote}]*?[&?]npcink)(?:?[^^g{quote}]*)?g{quote}/i';
    
        $content = preg_replace_callback($pattern, function($matches) {
            $original_url = $matches['url'];
            
            // 防御性檢查:排除已處理的URL及GIF格式
            if (strpos($original_url, 'npcink') !== false || preg_match('/.(?:gif|webp)(?:$|[?&#])/i', $original_url)) {
                return $matches[0];
            }
    
            // 智能拼接策略 - 使用更安全的!分隔符
            $separator = '!';
            $webp_url = $original_url . $separator . 'npcink.webp';
            
            return str_replace(
                $matches['url'],
                $webp_url,
                $matches[0]
            );
        }, $content);
    
        return $content;
    }
    add_filter('the_content', 'npcink_specific_domain_webp', 20);

    結(jié)語

    通過上述方法,實(shí)現(xiàn)了,存儲在媒體庫中的圖片鏈接是正常的,例如下面這樣,方便查看原始圖片

    <img src="https://n.getimg.net/www/2025/05/d2b5ca33bd970f64a6301fa75ae2eb22.png">

    而在文章中展示時(shí),圖片鏈接被上述功能函數(shù),結(jié)合阿里云 OSS 處理成這樣了,壓縮了圖片體積,降低了成本

    <img src="https://n.getimg.net/www/2025/05/d2b5ca33bd970f64a6301fa75ae2eb22.png!npcink.webp">

    相關(guān)內(nèi)容

    OSS Upload – OSS存儲媒體庫圖片wordpress插件

    給TA贊賞
    共{{data.count}}人
    人已贊賞
    ??
    Npcink上的部份代碼及教程來源于互聯(lián)網(wǎng),僅供網(wǎng)友學(xué)習(xí)交流,若您喜歡本文可附上原文鏈接隨意轉(zhuǎn)載。
    無意侵害您的權(quán)益,請發(fā)送郵件至 1355471563#qq.com 或點(diǎn)擊右側(cè) 私信:Muze 反饋,我們將盡快處理。
    ?
    購物車
    優(yōu)惠劵
    搜索
    主站蜘蛛池模板: 亚洲色大成网站www永久一区| 亚洲av乱码一区二区三区按摩| 日本在线视频一区二区| 农村人乱弄一区二区| 一区二区视频传媒有限公司| 久久99精品免费一区二区| 亚洲国产综合精品一区在线播放| 亚洲一区二区三区乱码A| 综合久久一区二区三区| 91香蕉福利一区二区三区| 日本一区二区三区免费高清 | 精品日产一区二区三区手机| 日韩人妻一区二区三区蜜桃视频| 亚洲国产一区在线| 日韩aⅴ人妻无码一区二区| 国偷自产av一区二区三区| 亚洲AV无码一区二区三区牛牛| 人妻精品无码一区二区三区| 福利视频一区二区牛牛| 国产欧美一区二区精品仙草咪| 乱中年女人伦av一区二区| 蜜桃传媒一区二区亚洲AV| 国产一区二区三区精品视频| 蜜桃AV抽搐高潮一区二区| 亚洲AV成人一区二区三区AV| 一区二区手机视频| 亚洲AV网一区二区三区| 97se色综合一区二区二区| 在线精品亚洲一区二区三区| 日本人真淫视频一区二区三区| 无码人妻啪啪一区二区| 久久精品无码一区二区WWW| 亚洲成AV人片一区二区| 国产亚洲自拍一区| 99久久国产精品免费一区二区| 日韩一区在线视频| 国产天堂一区二区综合| 岛国精品一区免费视频在线观看| 少妇人妻精品一区二区| 视频一区视频二区在线观看| 国产精品无码一区二区三区在|