提问者:小点点

srcset在所有的文章中使用HTTP而不是HTTPS


在Wordpress 4.4中,图像自动获得一个srcset属性。我的问题如下(我在写这个问题时解决了它,见下面的答案):

  • 为了将所有内容转换为https,我替换了所有src=“http://...src=“https://...(我后来将其更改为src=“//…以支持两种协议);
  • 所有帖子上的图像在src属性中获得正确的URL
  • 然而,在所有获得srcset属性的图像中,其中的URL总是带有http://引用

为什么会发生这种情况?为什么这些URL没有得到我最新更新的https://开头?


共3个答案

匿名用户

在< code>wp-includes文件夹中搜索一段时间后,< code>media.php文件中的< code > WP _ calculate _ image _ srcset 方法使用这两行:

$image_baseurl = _wp_upload_dir_baseurl();
$image_baseurl = trailingslashit( $image_baseurl ) . $dirname;

而这个$image_baseurl实际上会形成srcset属性的新URL,即即使整个URL在wp_posts表中并在src属性中使用,它的开头也不会被使用。

这意味着如果wp_options表中的基本url仍然在超文本传输协议://中,图像将获得该协议,并且在https中导航时默认不会显示在浏览器中。

为了解决这个问题,您只需将wp_options表中的option_value中的URL更改为https://,或者如果您仍然想支持这两种协议(双斜线),只需将其更改为//。您可以在单个查询中执行此操作:

UPDATE `wp_options`
 SET `option_value` = replace(option_value, 'http://', '//')
 WHERE `option_name` IN ('siteurl', 'home')

匿名用户

在设置下的管理员中更改以下设置-

WordPress地址(URL):https://yoursitename.com网站地址(URL):https://yoursitename.com

并按下[保存更改]按钮。最后刷新您的页面,您的图像将以正确的srcset属性显示在您的浏览器上。

匿名用户

如果你不想把你的WordPress地址(URL)改成https,那么就把这段代码放到你的活动主题functions.php文件中

function codextent_ssl_srcset( $sources ) {
    foreach ( $sources as &$source ) {
        $source['url'] = set_url_scheme( $source['url'], 'https' );
    }
    return $sources;
}
add_filter( 'wp_calculate_image_srcset', 'codextent_ssl_srcset' );

**也可以在wp-config.php文件的顶行中添加此项。

$_SERVER['HTTPS'] = 'on';