我成功地将4.3.1安装转换为所有https。更新到4.4之后。我对新的srcset属性有疑问。使用https设置图像的src属性时,srcset属性为http。这导致浏览器根本不显示任何图像。

在等待更好的修复时,我希望完全禁用设置srcset属性,以便所有图像仅具有src属性。我该怎么办?

评论

我也想知道这一点-它只是使我们的网站一团糟!

我尝试了各种方法,但均未成功,但我想让主要问题留给新方法。我最剧烈的尝试是注释掉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在那里解决了这个问题。

#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_srcsetmax_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一样深思熟虑。我使用来获得美术指导以及响应图像,但这并不能解决这个问题。

– Peter Wooster
16年5月10日在11:40

@Jake的比例为1到10,“创建一个新函数只是为了返回false”给WordPress增加了-2膨胀。任何人(不仅是WP开发人员)都可以理解的自我记录代码具有一定的价值。

–马哈茂德·古德西
17年7月15日在22:37

@ MahmoudAl-Qudsi因为'__return_false'如此令人困惑?在WordPress论坛上的讨论是关于关闭WordPress功能的。仅使用默认的,非常基本的和有据可查的,WordPress内置的WordPress返回函数来做到这一点并不疯狂。该函数被命名为“ return_false”的事实很容易说明问题。尝试猜猜它做什么?

–杰克
17年7月16日在21:11

#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方案。”他说。