srcset
属性有疑问。使用https设置图像的src
属性时,srcset
属性为http。这导致浏览器根本不显示任何图像。 在等待更好的修复时,我希望完全禁用设置
srcset
属性,以便所有图像仅具有src
属性。我该怎么办?#1 楼
以下是您可以尝试删除4.4中的响应式图像支持的一些方法:/**
* Disable responsive image support (test!)
*/
// Clean the up the image from wp_get_attachment_image()
add_filter( 'wp_get_attachment_image_attributes', function( $attr )
{
if( isset( $attr['sizes'] ) )
unset( $attr['sizes'] );
if( isset( $attr['srcset'] ) )
unset( $attr['srcset'] );
return $attr;
}, PHP_INT_MAX );
// Override the calculated image sizes
add_filter( 'wp_calculate_image_sizes', '__return_empty_array', PHP_INT_MAX );
// Override the calculated image sources
add_filter( 'wp_calculate_image_srcset', '__return_empty_array', PHP_INT_MAX );
// Remove the reponsive stuff from the content
remove_filter( 'the_content', 'wp_make_content_images_responsive' );
,但是正如@cybmeta所提到的,问题可能出在其他地方。
在
srcset
上强制执行https 您可以使用
wp_calculate_image_srcset
过滤器进行一些调试,甚至尝试以下快速修复方法:add_filter( 'wp_calculate_image_srcset', function( $sources )
{
foreach( $sources as &$source )
{
if( isset( $source['url'] ) )
$source['url'] = set_url_scheme( $source['url'], 'https' );
}
return $sources;
}, PHP_INT_MAX );
来将url方案设置为
https
。另一种方法是将其设置为非方案//
。查看其他
set_url_scheme()
选项的法典:$source['url'] = set_url_scheme( $source['url'], null );
$source['url'] = set_url_scheme( $source['url'], 'relative' );
,但是您应该尝试挖掘
更新:
我们可以使用以下方法较早地从
wp_calculate_image_srcset()
函数中纾困:add_filter( 'wp_calculate_image_srcset_meta', '__return_empty_array' );
,然后使用
wp_calculate_image_srcset
或max_srcset_image_width
过滤器。还根据票证#41895更新,以返回空数组,而不是false / null。
评论
只是为了确认这两种方法都能按照我的意愿工作,disable srcset删除了srcset(并因此带回了“固定”图像),并且强制https将srcset url更改为https。两种方法都删除了混合内容警告。
–brokkr
2015年12月12日15:47
add_filter('wp_calculate_image_srcset_meta','__return_null');解决方案对我来说很棒。谢谢!
–蒂姆·鲍恩(Tim Bowen)
16年1月10日在18:28
很高兴听到它的帮助。
– birgire
17 Mar 8 '17 at 8:27
这将在验证器上引发警告:“仅当还存在srcset属性时,才可以指定sizes属性。”
–迈克尔·罗杰斯(Michael Rogers)
17年11月1日在19:17
听起来您已经过滤了srcset,但是没有过滤sizes属性。 @MichaelRogers
– birgire
17年11月1日在21:53
#2 楼
最简单,最干净的方法是:add_filter( 'wp_calculate_image_srcset', '__return_false' );
为了回应大多数人的看法,srcset是一个好主意,并且是未来(最好的)。立即练习),但是如果您需要快速修复以保持网站正常运行,上述代码片段就可以轻松完成工作。
源:WP Core Blog
评论
只需使用__return_false而不是disable_srcset,wp具有执行类似简单任务的功能。
–杰克
16 Mar 17 '16 at 13:56
你们都可以通过不做一个仅仅返回false的全新函数来改善代码。 WordPress提供了执行此操作的功能。 codex.wordpress.org/Function_Reference/_return_false
–杰克
16年3月18日在22:49
这是正确的解决方案。该功能与wp_autop一样深思熟虑。我使用
#3 楼
srcset
属性中的URL不正确显示HTTPS的原因很可能是因为所有图像的URL是使用wp_options表中的siteurl选项的值构建的。如果您要通过HTTPS服务前端,则还应该更改这些值(通过“设置”>“常规”)。这是WordPress问题跟踪系统上的相关票证:https://core.trac .wordpress.org / ticket / 34945
#4 楼
这将通过消除任何大于1像素的图像来禁用srcset代码。add_filter( 'max_srcset_image_width', create_function( '', 'return 1;' ) );
从长远来看,您应该尝试解决实际问题。不过,如果您需要快速修复,此方法仍然有效。
评论
create_function()
–Pieter Goosen
2015年12月11日下午5:16
那么create_function()呢?我也喜欢我的答案也可以在PHP 5.2中使用。
–奥托
2015年12月11日在22:46
#5 楼
在“设置/常规”中,确保将WordPress地址(URL)和站点地址(URL)设置为https://yourdomain.com,请参阅http://wptavern.com/how-to-在使用SSL时无法在wordpress中修复图像4-4的问题
乔·麦吉尔(Joe McGill),他帮助领导了将响应性图像引入其中的工作
WordPress在论坛主题中也做出了回应,并确认Cree的建议是正确的,“如果您在前端运行HTTPS,则
应在“设置”>“中更改家庭和站点URL的URL”。 br />一般,因此他们使用HTTPS方案。”他说。
评论
我也想知道这一点-它只是使我们的网站一团糟!我尝试了各种方法,但均未成功,但我想让主要问题留给新方法。我最剧烈的尝试是注释掉default-filters.php中的add_filter行,我认为这应该负责:// add_filter('the_content','wp_make_content_images_sensitive');
您应该查找混合HTTP和HTTPS的内容,而不是禁用响应图像,因为响应图像功能不是问题的根源。我所有的网站都在HTTPS下,并且srcset由WordPress正确创建。您是如何从HTTP迁移到HTTPS的?
请参阅core.trac.wordpress.org/ticket/25449。
似乎现在已经清理干净了。两次发布的道歉-我在wordpress.org(wordpress.org/support/topic / ...)上启动的线程中,根本问题(srcset应该使用https)也得到解决,在我的辩护中,一天或一天之后,该线程似乎已经死了所以当它复活的时候感谢joemcgill在那里解决了这个问题。