WordPress:srcset在所有帖子中获取HTTP而不是HTTPS



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

  • 为了将所有内容传输到 https,我用 src="https://... 替换了 posts 表中的所有src="http://...引用(我后来将其更改为 src="//... 以支持两种协议);
  • 所有帖子上的图片在src属性中获得正确的 URL;
  • 但是,在获取srcset属性的所有图像中,其中的URL始终带有http://引用。

为什么会这样?为什么这些网址没有获得我新更新的https://开头?

如果您不想将WordPress地址(URL)更改为https,那么只需将此代码放在活动主题函数中即可.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';

wp-includes 文件夹中搜索了一段时间后,media.php文件中的 wp_calculate_image_srcset 方法使用以下 2 行:

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

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

这意味着,如果您在wp_options表中的基本网址仍在http://中,则图像将获得该协议,并且在https中导航时默认情况下不会由浏览器显示。

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

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

在 admin 的"设置>常规"下更改以下设置:

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

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

最新更新