WordPress开启HTTPS后正文图片改为HTTPS两种方法

投稿  半夏小栈 2017-06-01 07:31 阅读 149 次 评论 26 条

WordPress 站点开启 HTTPS 后,文章中引用的图片就很有必要把 HTTP 统一改为 HTTPS,要不然会地址栏上的绿锁就会有黄色的三角,感觉是很不爽的。为了解决这个问题,我们有两种方法:一个是治标不治本的办法,就是在主题的  functions.php 文件中加入字符替换语句,这样读者在每次访问的时候会相应的把图片的 http 链接替换为 https,而数据库的原始内容不变;另一个彻底根治的办法是,直接进入数据库用 SQL 语句把 HTTP 直接替换为 HTTPS。下面就这两个方法本文做简单介绍:

WordPress开启HTTPS后正文图片改为HTTPS两种方法 WordPress 第1张

方法一:通过主题的 functions.php 文件来批量替换

在主题文件的 functions.php(WP后台“外观”-“编辑”右侧可以找到)里加入如下代码(注意域名需要做相应修改)

  1. /* 替换图片链接为 https */
  2. /* 来源半夏小栈(https://www.banxia.me/995.html): */
  3. function https_image_replacer($content){
  4. if( is_ssl() ){
  5. /*已经验证使用 $_SERVER['SERVER_NAME']也可以获取到数据,但是貌似$_SERVER['HTTP_HOST']更好一点*/
  6. $host_name = $_SERVER['HTTP_HOST'];
  7. $http_host_name='http://'.$host_name.'/wp-content/uploads';
  8. $https_host_name='https://'.$host_name.'/wp-content/uploads';
  9. $content = str_replace($http_host_name$https_host_name$content);
  10. }
  11. return $content;
  12. }
  13. add_filter('the_content', 'https_image_replacer');

PS:boke112 认为应该不用那么复杂,直接使用以下代码可能会更加简练一些,毕竟大家的域名基本上都是固定的。

  1. function replacehttp($content){
  2. if( is_ssl() ){
  3. $content = str_replace('http://域名/wp-content/uploads', 'https://域名/wp-content/uploads', $content);
  4. }
  5. return $content;
  6. }
  7. add_filter('the_content', 'replacehttp');

方法二:通过 SQL 语句进行正文的批量替换

PS:操作前请务必对数据库进行备份,以避免不可挽回的数据丢失!

WordPress开启HTTPS后正文图片改为HTTPS两种方法 WordPress 第2张

运行如下语句批量替换:

  1. UPDATE wp_posts SET post_content = replace(post_content, 'http://域名/wp-content/uploads','https://域名/wp-content/uploads');

PS:记得将以上语句中的域名及路径个自己的,如果更改过数据库表的前缀,还要记得修改wp_为自己的前缀哦。

注意:

以上两种方法选择其中一个就可以,如果你不熟悉 SQL 操作就选方法一,但由于每次页面访问都要运行函数(已做静态缓存除外),因此会有一定性能损失;如果对 SQL 比较熟悉,建议直接使用方法二,这样就可以一劳永逸了。

参考资料

文章标签: ,   ,  
原文地址:https://www.banxia.me/995.html
温馨提示:文章内容仅代表作者个人观点,不代表boke112导航赞同其观点和对其真实性负责!
版权声明:本文为投稿文章,感谢 半夏小栈 的投稿,版权归原作者所有,欢迎分享本文,转载请保留出处!
WordPress免费响应式主题:Nana

发表评论


表情

  1. 闲鱼
    闲鱼 【县长】 @回复

    蛮好的,先留着

  2. 言曌博客
    言曌博客 【农民】 @回复

    推荐一个数据库修改的插件:Search & Replace

  3. 小萝博客
    小萝博客 【县长】 @回复

    个人小站就没必要了

    • 涂红伟
      涂红伟 【农民】2017-06-02 00:00  回复

      @小萝博客百度从5.25彻底开放https收录,目前我的十几个启用了https的站点所有百度搜索结果都已经变为https,百度前段时间的大会上明确表示,今年推动中国互联网https化是最重要的工作之一,对没有启用https的网站将屏蔽或降低排名,顶多再过半年看你敢不启用https

  4. Koolight
    Koolight 【省长】 @回复

    折腾得有点累人啊!

  5. 吃货小栈
    吃货小栈 【村长】 @回复

    我咋总感觉炒作SSL的目的是为了“收费”! [黑线]

  6. 明月登楼
    明月登楼 【总理】 @回复

    SSL的启用对于老站来说有时候就是个灾难呀!

  7. 我爱动感单车网
    我爱动感单车网 【省长】 @回复

    [呵呵] 还没想过要将自己的博客弄成HTTPS。

  8. 王商博客
    王商博客 【县长】 @回复

    看来博客112导航也在酝酿启用HTTPS啊,百度正在加快对HTTPS的支持。

  9. MR.LI
    MR.LI 【镇长】 @回复

    懂技术就是好啊, [赞]

  10. JV
    JV 【村长】 @回复

    服务器上的图片是不需要替换的! 需要替换的是外链,并且外链需要支持https,即便替换服务器也不用这么麻烦。

    add_filter(‘the_content’, ‘inlojv_content_src_replace’);
    function inlojv_content_src_replace($content){
    $content = str_replace(‘src=”http:(去掉我)//’, ‘src=”//’, $content);
    return $content;
    }

    评论不允许发链接,以上代码去掉括号内容(去掉我)即可

    • JV
      JV 【村长】2017-06-01 11:31  回复

      @JV忘了自己改过服务器链接了,服务器也需要替换。双斜杠即可。

    • boke112导航
      boke112导航【站长】2017-06-01 15:09  回复

      @JV一般都是HTTP替换成HTTPS,你这个代码是直接去掉http:,这个想法也很给力 [威武]

    • 明月登楼
      明月登楼 【总理】2017-06-01 15:37  回复

      @JV图片链接必须替换的!如果不替换在Chrome浏览器里就会提示SSL不安全!

  11. 大码模特
    大码模特 【省长】 @回复

    https我也还没开始用

  12. 靠谱学生兼职网
    靠谱学生兼职网 【市长】 @回复

    好技术,值得学习

  13. 大伟哥博客
    大伟哥博客 【村长】 @回复

    wp要手动更新绝对路径吗?能不能用相对路径?这样就不用这么麻烦了。

  14. 夏天烤洋芋
    夏天烤洋芋 【县长】 @回复

    下载一直都没有开启S.

  15. 钓鱼小站
    钓鱼小站 【县长】 @回复

    还没用https 没有思路

  16. 金榜台博客
    金榜台博客 【市长】 @回复

    每天来看看

  17. 企业战略
    企业战略 【镇长】 @回复

    第一种方法更简单些

  18. 小苍老师
    小苍老师 【县长】 @回复

    学习了,但是俺还没上https,感觉像咱小站,也没有必要上!