web-dev-qa-db-fra.com

Largeur inattendue et attributs srcset pour the_post_thumbnail ();

Je modifie un thème, j'utilise un thème enfant et, dans un fichier modèle (single.php), je dois afficher une grande vignette de publication, ce qui fait que j'ai le code suivant:

the_post_thumbnail('large');

Dans Paramètres> Média, la taille maximale est définie sur largeur maximale = 1024 pixels et hauteur maximale = 1024 pixels (je suppose que ce sont les paramètres par défaut de Wordpress). Maintenant, le problème est que dans la page de publication je reçois ce code html:

<img src="https://example.com/wp-content/uploads/2018/07/example-image-4-1024x682.jpg"
class="attachment-large size-large wp-post-image" alt=""
srcset="https://www.example.com/wp-content/uploads/2018/07/example-image-4-1024x682.jpg 1024w,
https://www.example.com/wp-content/uploads/2018/07/example-image-4-300x200.jpg 300w,
https://www.example.com/wp-content/uploads/2018/07/example-image-4-768x512.jpg 768w,
https://www.example.com/wp-content/uploads/2018/07/example-image-4-272x182.jpg 272w,
https://www.example.com/wp-content/uploads/2018/07/example-image-4.jpg 1280w"
sizes="(max-width: 800px) 100vw, 800px" width="800" height="533">

Le résultat est que je reçois une image de 800 pixels de large au lieu d’une vraie "grande" image de 1024 pixels de large. Le problème semble être dans l'attribut "tailles" qui définit la largeur maximale à 800px et l'attribut "largeur" ​​qui définit l'image à 800px. Celles-ci me semblent fausses. Alors qu'est-ce qui se passe exactement? Si cela est causé par quelque chose dans le thème, comment puis-je savoir où il se trouve afin de pouvoir le changer?

En regardant la documentation liée à the_post_thumbnail (), j'ai vu ces filtres:

post_thumbnail_size
post_thumbnail_html
wp_get_attachment_image_attributes

Alors j'ai essayé de chercher la chaîne "post_thumbnail" et "attachment_image" dans le thème, mais cela n'a rien apporté d'utile. Alors qu'est-ce que je cherche d'autre? Notez que j'ai quelques plugins installés (comme Advanced Custom Fileds, etc.), mais j'ai essayé de les désactiver et le problème était toujours là. Je pense donc que la source du problème doit être le thème ou quelque chose que je ne comprends pas à propos de Wordpress. .

2
reed

Lors de la génération des attributs de largeur et de hauteur pour une image comportant des fonctions telles que the_post_thumbnail() ou wp_get_attachment_image(), les images sont placées dans la fonction image_downsize() . La dernière chose que cette fonction fait est de lancer l’image à travers la fonction image_constrain_size_for_editor() .

Cette fonction détermine la largeur et la hauteur de l'image en fonction de la taille donnée, large dans votre cas, en fonction des paramètres définis dans Paramètres> Média. Cependant, il définira la taille maximale possible des images medium, medium_large et large à quelque soit le thème Largeur du contenu est défini comme. Si votre thème définit la largeur du contenu sur 800, la largeur des images medium, medium_large ou large sera limitée à 800 (les tailles d'image personnalisées ne sont affectées que par l'éditeur).

Si vous souhaitez supprimer les dimensions maximales, vous pouvez utiliser le filtre editor_max_image_size pour renvoyer un tableau contenant la largeur et la hauteur maximales souhaitées ou 0 afin que les deux suppriment la limite. Vous pouvez utiliser les arguments $size et $context du filtre pour ne s'appliquer qu'aux images large du serveur frontal ou du serveur principal ('display' pour le client, 'edit' pour l'administrateur).

Cet exemple supprimera la limite de taille pour les images large sur le front-end:

function wpse_308298_max_image_size( $max_image_size, $size, $context ) {
    if ( $size === 'large' && $context === 'display' ) {
        $max_image_size = [0,0];
    }

    return $max_image_size;
}
add_filter( 'editor_max_image_size', 'wpse_308298_max_image_size' );
1
Jacob Peattie