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

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

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

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

    • 阿里云格式轉換:詳情

    流程圖

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

    效果

    在文章編輯器中插入測試內容:

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

    輸出時會自動轉換為:

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

    實現步驟

    通過 WordPress 的 the_content 過濾器來實現這個需求。這里提供完整方案:

    // 在 functions.php 中添加如下代碼
    function npcink_append_webp_to_images($content) {
        // 匹配所有圖片鏈接的正則表達式
        $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] ?? ''; // 保留原始查詢參數
            $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,在展示文章時做替換
    
    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'];
            
            // 七層防御重復檢測
            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的圖片會導致無法播放動圖,可參考下方代碼

    // 在 functions.php 中添加如下代碼
    /*
    1、僅針對指定域名-n.getimg.net,在展示文章時做替換
    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);

    結語

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

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

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

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

    相關內容

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

    給TA贊賞
    共{{data.count}}人
    人已贊賞
    ??
    Npcink上的部份代碼及教程來源于互聯網,僅供網友學習交流,若您喜歡本文可附上原文鏈接隨意轉載。
    無意侵害您的權益,請發送郵件至 1355471563#qq.com 或點擊右側 私信:Muze 反饋,我們將盡快處理。
    ?
    購物車
    優惠劵
    搜索
    主站蜘蛛池模板: 亚洲日韩国产一区二区三区在线| 亚洲视频在线一区二区| 麻豆AV无码精品一区二区| 一区二区三区美女视频| 精品一区二区三区波多野结衣| 一区二区三区四区无限乱码 | 国产在线观看一区二区三区精品| 亚洲国产成人一区二区三区| 亚洲AV日韩精品一区二区三区| 人妻互换精品一区二区| 任你躁国语自产一区在| 日韩精品在线一区二区| 国产乱码一区二区三区爽爽爽| 亚洲片一区二区三区| 一区二区三区在线看| 波多野结衣一区在线| 国产成人av一区二区三区不卡| 久久久无码精品人妻一区| 成人区人妻精品一区二区不卡| 呦系列视频一区二区三区| 国产精品一区在线麻豆| 色婷婷香蕉在线一区二区| 亚洲爆乳精品无码一区二区| 国产一区二区久久久| 亚洲av永久无码一区二区三区| 无码人妻啪啪一区二区| 日本无码一区二区三区白峰美| 欧美成人aaa片一区国产精品 | 一区二区视频在线免费观看| 日本免费一区二区三区最新| 国产成人无码精品一区不卡| 波多野结衣中文一区| 久久精品国产亚洲一区二区三区 | 正在播放国产一区| 精品视频在线观看一区二区| 亚洲一区二区三区乱码A| 国产波霸爆乳一区二区| 亚洲国产日韩在线一区| 尤物精品视频一区二区三区 | 学生妹亚洲一区二区| 精品国产亚洲第一区二区三区|