如何在WP 4.4中禁用响应式图像?


37

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

在等待更好的修复时,我希望完全禁用设置srcset属性,以便所有图像都只有一个src属性。我怎么做?


2
我也想知道这一点-它使我们的网站一团糟!
克里斯(Chris)

我尝试了各种方法都没有成功,但我想让主要问题开放给新方法。我尝试的最激烈的是注释掉add_filter线default-filters.php我认为是负责://add_filter( 'the_content', 'wp_make_content_images_responsive' );
brokkr

1
您应该查找混合HTTP和HTTPS的内容,而不是禁用响应图像,因为响应图像功能不是问题的根源。我所有的网站都在HTTPS下,并且srcset由WordPress正确创建。您是如何从HTTP迁移到HTTPS的?
cybmeta 2015年


似乎现在已经清理干净了。两次发布的道歉-我在wordpress.org(wordpress.org/support/topic/…)上启动的线程中,根本问题(srcset应该使用https)也得到了解决。所以当它复活的时候 感谢joemcgill在那里解决了它。
brokkr 2015年

Answers:


43

您可以尝试以下几项删除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

您可以使用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。另一种方法是使它无计划//

查看Codex中的其他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年

4
add_filter( 'wp_calculate_image_srcset_meta', '__return_null' );解决方案对我来说很棒。谢谢!
蒂姆·鲍文

很高兴听到它的帮助。
birgire

这将在验证器上引发警告:“仅当还存在srcset属性时,才可以指定sizes属性。”
Michael Rogers

听起来您已经过滤了srcset,但是没有过滤sizes属性。@MichaelRogers
birgire

13

最简单,最干净的方法是这样的:

add_filter( 'wp_calculate_image_srcset', '__return_false' );

顺应大多数其他人的说法,srcset是一个好主意,并且是未来(现在是最佳实践),但是如果您需要快速修复以保持站点正常运行,则上述代码片段可以轻松完成工作。

资料来源:WP Core Blog


5
只是使用__return_false代替disable_srcset,wp具有执行类似简单任务的功能。
杰克

3
而且,您都可以通过不做一个仅仅返回false的全新函数来改善代码。WordPress提供了执行此操作的功能。codex.wordpress.org/Function_Reference/_return_false-
杰克

1
这是正确的解决方案。该功能与wp_autop一样深思熟虑。我使用<picture>来获得美术指导以及响应图像,但这并不能解决这个问题。
彼得·伍斯特

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

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

7

srcset属性中的URL 不正确显示HTTPS 的原因很可能是因为所有图像的URL是使用wp_options表中的siteurl选项的值构建的。如果您通过HTTPS提供前端服务,则还应该更改这些值(通过“设置”>“常规”)。

这是WordPress问题跟踪系统上的相关票证:https : //core.trac.wordpress.org/ticket/34945


5

通过消除任何大于1像素的图像,这将禁用srcset代码。

add_filter( 'max_srcset_image_width', create_function( '', 'return 1;' ) );

从长远来看,您应该尝试解决实际问题。不过,如果您需要快速修复,则可以使用。



1
那么create_function()呢?我也喜欢我的答案也可以在PHP 5.2中使用。
奥托(Otto)

2

在“设置/常规”中,确保将WordPress地址(URL)和站点地址(URL)设置为https://yourdomain.com

参见http://wptavern.com/how-to-fix-images-not-loading-in-wordpress-4-4-while-using-ssl

乔·麦吉尔(Joe McGill)曾帮助将响应式图像导入WordPress,他也在论坛主题中做出了回应,并确认Cree的建议是正确的:“如果在前端运行HTTPS,则应更改家庭和站点的URL。 “设置>常规”中的URL,以便他们使用HTTPS方案。”他说。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.