Comment désactiver les images sensibles dans WP 4.4?

37

J'ai converti avec succès mon installation 4.3.1 en https. Après la mise à jour à 4.4. J'ai un problème avec le nouvel srcsetattribut. Bien que l' srcattribut pour les images soit défini à l'aide de https, il srcsetest http. Cela fait que les navigateurs n’affiche aucune image.

En attendant une meilleure solution, je souhaite désactiver la définition de l' srcsetattribut afin que toutes les images ne disposent que d'un srcattribut. Comment je fais ça?

Brokkr
la source
2
Je voudrais aussi savoir ceci - cela vient de faire un vrai bazar de notre site web!
Chris
J'ai essayé différentes méthodes sans succès, mais je voulais laisser la question principale ouverte à de nouvelles approches. La plus drastique de mes tentatives a été de commenter la add_filterligne dont default-filters.phpje pensais qu'elle était responsable://add_filter( 'the_content', 'wp_make_content_images_responsive' );
brokkr
1
Au lieu de désactiver les images réactives, vous devez rechercher le mélange de HTTP et HTTPS, car la fonctionnalité des images réactives n’est pas à l’origine du problème. Tous mes sites Web sont sous HTTPS et le srcsetest correctement créé par WordPress. Comment avez-vous migré de HTTP vers HTTPS?
cybmeta
Voir core.trac.wordpress.org/ticket/25449 .
Artem Russakovskii
Semble assez wel éclairci maintenant. Toutes mes excuses pour le double envoi - le problème racine (srcset devrait utiliser https) est également résolu dans le fil de discussion que j'ai repris à wordpress.org ( wordpress.org/support/topic/… ). Pour ma défense, le fil de discussion semblait plutôt mort après un jour ou alors quand il a été relancé. Merci à joemcgill qui l’a résolu là-bas.
Brokkr

Réponses:

43

Vous pouvez essayer de supprimer le support d’image sensible dans 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' );

mais comme mentionné par @cybmeta, le problème peut être ailleurs.

Forcer https sur srcset

Vous pouvez faire du débogage avec le wp_calculate_image_srcsetfiltre et même essayer cette solution rapide :

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

pour définir le schéma d'URL à https. Une autre approche serait de ne pas en vouloir //.

Consultez le Codex pour d'autres set_url_scheme()options:

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

Mais vous devriez essayer de creuser plus profondément et trouver la cause fondamentale.

Mise à jour:

Nous pourrions renflouer plus tôt la wp_calculate_image_srcset()fonction avec:

add_filter( 'wp_calculate_image_srcset_meta', '__return_empty_array' );

puis en utilisant les filtres wp_calculate_image_srcsetou max_srcset_image_width.

Également mis à jour conformément au ticket n ° 41895 , pour retourner un tableau vide au lieu de false / null.

birgire
la source
Juste pour confirmer que les deux approches fonctionnaient comme chacune d'elles m'était destinée, le srcset désactivé a supprimé le srcset (et a donc ramené des images «fixes») et la force https a modifié les URL du srcset en https. Les deux approches ont supprimé l'avertissement de contenu mixte.
Brokkr
4
La add_filter( 'wp_calculate_image_srcset_meta', '__return_null' );solution a très bien fonctionné pour moi. Merci!
Tim Bowen
Heureux de l'entendre aider.
Birgire
Cela entraînera des avertissements sur un validateur: "L'attribut tailles ne peut être spécifié que si l'attribut srcset est également présent."
Michael Rogers
On dirait que vous avez filtré srcset mais pas l'attribut tailles. @MichaelRogers
birgire
13

La manière la plus simple et la plus propre de procéder est la suivante:

add_filter( 'wp_calculate_image_srcset', '__return_false' );

Pour reprendre ce que la plupart des gens disent, srcset est une bonne idée et constitue l’avenir (meilleure pratique à l’heure actuelle), mais si vous avez besoin d’une solution rapide pour que votre site continue de fonctionner, l’extrait ci-dessus fait le travail sans le moindre piratage.

source: WP Core Blog

Trevor
la source
5
Utilisez simplement __return_falseau lieu de disable_srcset, wp a des fonctions pour des tâches simples comme celle-là.
Jake
3
Et vous pourriez tous les deux améliorer votre code en ne créant pas une fonction entièrement nouvelle pour retourner faux. WordPress fournit des fonctions pour le faire. codex.wordpress.org/Function_Reference/_return_false
Jake
1
C'est la bonne solution. Cette fonctionnalité est à peu près aussi bien pensée que wp_autop. J'utilise <picture> pour obtenir une direction artistique ainsi que des images réactives, et cela ne règle pas ce problème.
Peter Wooster
1
@Jake sur une échelle de 1 à 10, "créer une nouvelle fonction pour renvoyer faux" ajoute environ -2 ballonnements à WordPress. Un code auto-documenté que tout le monde (pas seulement un développeur WP) peut comprendre a une certaine valeur.
Mahmoud Al-Qudsi
1
@ MahmoudAl-Qudsi Parce que '__return_false' est tellement déroutant? Cette discussion, sur un forum WordPress, concerne la désactivation d'une fonctionnalité WordPress. Il n’est pas insensé d’utiliser simplement les fonctions de retour WordPress par défaut, très élémentaires et bien documentées, intégrées à WordPress pour le faire. Le fait que la fonction s'appelle "return_false" est assez auto-documenté. Essayez de deviner ce que ça fait?
Jake
7

Très probablement, la raison pour laquelle les URL de vos srcsetattributs affichent HTTPS de manière incorrecte est due au fait que les URL de toutes les images sont générées à l'aide de la valeur de l'option siteurl dans votre table wp_options. Si vous utilisez votre serveur frontal sur HTTPS, vous devez également modifier ces valeurs (via Paramètres> Général).

Voici le ticket associé sur le système de suivi des problèmes de WordPress: https://core.trac.wordpress.org/ticket/34945

Joemcgill
la source
5

Cela désactivera le code srcset en éliminant les images plus larges que 1 pixel.

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

À long terme, vous devriez essayer de résoudre le problème. Pourtant, cela fonctionne si vous avez besoin d'une solution rapide.

Otto
la source
1
create_function()
Pieter Goosen
1
Qu'en est-il de create_function ()? J'aime aussi que mes réponses fonctionnent en PHP 5.2.
Otto
2

Dans Paramètres / Général, assurez-vous que votre adresse WordPress (URL) et votre adresse de site (URL) sont définies sur https://votredomaine.com.

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

Joe McGill, qui a aidé à diriger les efforts pour obtenir des images réactives dans WordPress, a également répondu au fil de discussion et confirmé que la suggestion de Cree était correcte: «Si vous utilisez le protocole HTTPS en mode frontal, vous devez modifier les URL de votre maison et de votre site. URL dans Paramètres> Général pour qu'ils utilisent le schéma HTTPS », a-t-il déclaré.

utilisateur2969141
la source