在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 属性显示在您的浏览器上。