Como desabilito imagens responsivas no WP 4.4?

37

Eu converti com sucesso minha instalação 4.3.1 para todos os https. Após a atualização para 4.4. Estou com um problema com o novo srcsetatributo. Enquanto o srcatributo para imagens é definido usando https, o srcsetatributo é http. Isso faz com que os navegadores não exibam nenhuma imagem.

Enquanto aguarda uma correção melhor, desejo desativar a configuração do srcsetatributo completamente para que todas as imagens tenham apenas um srcatributo. Como faço isso?

brokkr
fonte
2
Eu também gostaria de saber isso - acabou de fazer uma bagunça certa no nosso site!
Chris
Tentei de várias maneiras sem sucesso, mas queria deixar a questão principal em aberto para novas abordagens. A mais drástica das minhas tentativas foi comentar a add_filterlinha em default-filters.phpque eu acreditava ser responsável://add_filter( 'the_content', 'wp_make_content_images_responsive' );
brokk e eitri
1
Em vez de desativar imagens responsivas, você deve procurar o que está misturando HTTP e HTTPS, porque a funcionalidade de imagens responsivas não é a origem do problema. Todos os meus sites estão em HTTPS e o site srcsetfoi criado corretamente pelo WordPress. Como você migrou do HTTP para HTTPS?
cybmeta
Veja core.trac.wordpress.org/ticket/25449 .
Artem Russakovskii
Parece muito bem esclarecido agora. Desculpas pela postagem dupla - o problema raiz (srcset deve usar https) também é resolvido no tópico que iniciei em wordpress.org ( wordpress.org/support/topic/… ) Em minha defesa, o tópico parecia bastante morto após um dia ou então quando foi revivido. Obrigado ao joemcgill, que resolveu o problema por lá.
brokk e eitri

Respostas:

43

Aqui estão algumas coisas que você pode tentar remover o suporte à imagem responsiva no 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' );

mas como mencionado por @cybmeta, o problema pode estar em outro lugar.

Forçar https ativado srcset

Você pode fazer alguma depuração com o wp_calculate_image_srcsetfiltro e até tentar esta correção rápida :

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 );

para definir o esquema de URL como https. Outra abordagem seria tê-lo sem limites //.

Confira o Codex para outras set_url_scheme()opções:

$source['url'] = set_url_scheme( $source['url'], null );        
$source['url'] = set_url_scheme( $source['url'], 'relative' );

Mas você deve tentar se aprofundar e encontrar a causa raiz.

Atualizar:

Poderíamos resgatar anteriormente a wp_calculate_image_srcset()função com:

add_filter( 'wp_calculate_image_srcset_meta', '__return_empty_array' );

depois use os filtros wp_calculate_image_srcsetou max_srcset_image_width.

Também atualizado de acordo com o ticket # 41895 , para retornar uma matriz vazia em vez de falso / nulo.

Birgire
fonte
Apenas para confirmar que ambas as abordagens funcionaram conforme pretendido para mim, o srcset desativado removeu o srcset (e assim trouxe de volta imagens 'fixas') e a força https alterou os URLs do srcset para https. Ambas as abordagens removeram o aviso de conteúdo misto.
brokk e eitri
4
A add_filter( 'wp_calculate_image_srcset_meta', '__return_null' );solução funcionou muito bem para mim. Obrigado!
Tim Bowen
Fico feliz em ouvir isso ajudou.
precisa saber é
Isso causará avisos em um validador: "O atributo de tamanhos pode ser especificado apenas se o atributo srcset também estiver presente."
Michael Rogers
Parece que você filtrou o srcset, mas não o atributo size. @MichaelRogers
birgire
13

A maneira mais simples e limpa de fazer isso é simplesmente esta:

add_filter( 'wp_calculate_image_srcset', '__return_false' );

Porém, para ecoar o que a maioria das pessoas está dizendo, srcset é uma boa idéia e é o futuro (melhor prática agora), mas se você precisar de uma solução rápida para manter o site funcionando, o snippet acima fará o trabalho sem hackers.

fonte: WP Core Blog

Trevor
fonte
5
Basta usar em __return_falsevez de disable_srcset, o wp tem funções para tarefas simples como essa.
Jake
3
E vocês dois poderiam melhorar seu código não criando uma função totalmente nova apenas para retornar falso. O WordPress fornece funções para fazer isso. codex.wordpress.org/Function_Reference/_return_false
Jake
1
Esta é a solução certa. Esse recurso é tão bem pensado quanto o wp_autop. Eu uso <picture> para obter direção de arte e imagens responsivas, e isso não resolve isso.
Peter Wooster
1
@ Jake em uma escala de 1 a 10, "criar uma nova função apenas para retornar falso" adiciona cerca de -2 inchaço ao WordPress. O código de auto-documentação que qualquer pessoa (e não apenas um desenvolvedor do WP) pode entender é de um certo valor.
Mahmoud Al-Qudsi
1
@ MahmoudAl-Qudsi Porque '__return_false' é tão confuso? Esta discussão, em um fórum do WordPress, é sobre como desativar um recurso do WordPress. Não é louco apenas usar as funções padrão, muito básicas e bem documentadas, de retorno do WordPress embutidas no WordPress para fazer isso. O fato de a função ser denominada "return_false" é bastante auto-documentável. Tente adivinhar o que faz?
Jake
7

Provavelmente, o motivo pelo qual os URLs em seus srcsetatributos estão mostrando incorretamente HTTPS é porque os URLs para todas as imagens são criados usando o valor da opção siteurl na tabela wp_options. Se você está servindo seu front end por HTTPS, também deve alterar esses valores (em Configurações> Geral).

Aqui está o ticket relacionado ao sistema de rastreamento de problemas do WordPress: https://core.trac.wordpress.org/ticket/34945

joemcgill
fonte
5

Isso desativará o código srcset, eliminando as imagens maiores que 1 pixel.

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

A longo prazo, você deve tentar corrigir o problema real. Ainda assim, isso funciona se você precisar de uma solução rápida.

Otto
fonte
1
create_function()
Pieter Goosen
1
E quanto a create_function ()? Também gosto das minhas respostas para trabalhar no PHP 5.2.
Otto
2

Em Configurações / Geral, verifique se o Endereço do WordPress (URL) e o Site (URL) estão definidos como https://yourdomain.com

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

Joe McGill, que ajudou a liderar o esforço para obter imagens responsivas no WordPress, também respondeu no tópico do fórum e confirma que a sugestão de Cree está correta: “Se você estiver executando HTTPS no front-end, altere os URLs para sua casa e site. URL em Configurações> Geral para que eles usem o esquema HTTPS ", disse ele.

user2969141
fonte