在 WordPress 文章貼圖時自動省略 http:// 或 https:// 網址開頭.. 而直接以「//」相對網址的形式來貼圖
當網站從 http:// 開頭的網址切換成 https:// 開頭的加密連線之後,原本在佈景主題、文章內容中所有被載入的內容如果有不是「https://」開頭的外部資源,則會被瀏覽器警告為不安全的混合內容。這些包含使用 img src="..." 嵌入的圖片與其他 JavaScript、.css 或 .js 檔、iframe... 等外部資源,如果可以使用 https 加密連線的就改成 https,如果不行的就直接拿掉,必須一一從佈景主題中修正(如果只是貼上一般超連結就可以不用管他,只需處理「被載入」頁面的外部資源即可)。
另外在文章內容的部份,如果嵌入的圖片最初是以「<img src="http://......">」的形式貼圖的話,則必須手動修改資料庫,搜尋/取代成 「<img src="https://......">」的形式,或者直接改成相對網址的方式:「<img src="//......">」。
使用相對網址的方式來載入圖檔或 .js 或 .css 等檔案有個好處,如果你當前網站是 http:// 一般連線方式的話,就會自動以 http:// 的方式開啟外部資源。如果你當前網站已經改成 https:// 開頭的加密連線的話,使用「//」開頭的相對網址時,則自動會以 https:// 的方式來開啟加密連線的外連資源(前提是該外部資源必須要有 ssl 版本的檔案可以開,不然開了就只是連不上、找不到檔案而已)。
如果你希望在寫文章時自動就以「<img src="//......">」相對網址的形式來貼圖的話,可以改一下 functions.php 檔案,讓上傳圖檔、送出貼圖網址到內文時,可以自動以「//」開頭來嵌入圖檔網址。
之所以要這樣修改,主要是你的網站如果同時提供 http 與 https 兩種版本讓網友瀏覽,若不希望其中一方看不到圖片的話,讓他有彈性一點會比較好。
修改佈景主題的「functions.php」檔案,加入以下控制碼:
- function image_to_relative($html, $id, $caption, $title, $align, $url, $size, $alt) {
- $sp = strpos($html,"src=") + 5;
- $ep = strpos($html,""",$sp);
-
- $imageurl = substr($html,$sp,$ep-$sp);
-
- $relativeurl = str_replace("http://","",$imageurl);
- $sp = strpos($relativeurl,"/");
- $relativeurl = substr($relativeurl,$sp);
-
- $html = str_replace($imageurl,$relativeurl,$html);
-
- return $html;
- }
- add_filter('image_send_to_editor', 'image_to_relative', 5, 8);
複製代碼 以上程式碼引用自:Convert links and images to being site root relative
A relative Image URL without a scheme (WordPress)
|