web-dev-qa-db-fra.com

add_image_size () pour des types de publication spécifiques

set_post_thumbnail_size( 80, 80, true ); // true for all post types

Supposons que deux types de publication soient en jeu sur mon blog: publication, vidéo et produit. Je souhaiterais peut-être une taille d’image de 80x80 pour mes publications, mais de 100x100 pour mes vidéos et de 50x100 pour mes produits. À ma connaissance, je suis obligé de créer des vignettes pour mes images Post aux dimensions de 100x100 et 50x100. Et pour mes produits, je suis obligé de créer des vignettes 80x80 et 100x100, même si je ne les utiliserai jamais.

Existe-t-il un moyen de créer des tailles d’image basées sur des types de publication afin de ne pas créer un tas d’images que vous ne prévoyez pas d’utiliser et de gaspiller des ressources qui pourraient être utilisées ailleurs?

17
Sampson

Il n’existe aucun moyen de baser les tailles d’image sur le type de publication, car les images ne sont pas encore attachées à une publication lorsque vous les téléchargez et que les tailles intermédiaires sont créées (lorsque vous les ajoutez simplement via "New Media", elles ne sont même pas jointes). à tout poste).

Cependant, j'ai récemment créé deux plugins qui ensemble feront ce que vous voulez. Les images virtuelles intermédiaires intercepteront la création des tailles d'image intermédiaires: elles ne seront pas créées sur le disque, mais existent toujours dans le tableau de métadonnées. Cela fait penser à WordPress qu’ils existent afin que vous puissiez les utiliser comme des images normales. Le plug-in compagnon, Resizer à la demande créera les tailles d'image manquantes à la demande. La première fois que l'image est demandée, elle est créée, toutes les demandes suivantes seront simplement servies à l'image nouvellement créée.

Ces plugins nécessitent une réécriture avant que je ne les mette dans le répertoire des plugins WordPress, mais ils devraient être sûrs. Ou au moins avoir des commentaires TODO où ils ne sont pas sûrs.

11
Jan Fabry

J'ai posté du code sur cet autre fil qui définit un transitoire avec le type de publication lors du téléchargement d'une image, puis vérifie la valeur de ce transitoire et ajuste la taille de la post-vignette en conséquence à la fin du téléchargement. Ce n'est pas parfait ou à l'épreuve des balles, mais il devrait au moins démontrer le concept.

2
goldenapples

Je suis venu avec la solution suivante. Il crée des images uniquement pour le type de publication personnalisé sans en créer d’autres. Le seul problème est que si vous utilisez des plugins comme des champs personnalisés avancés, lorsque vous essayez de restituer le champ de la galerie, il affiche uniquement les tailles d’images wordpress par défaut: "vignette", "moyen", "grand" et vous ne pouvez pas accéder aux tailles d’image de publication personnalisées créées. .

if ( function_exists ('add_image_size') ) {

function remove_default_img($sizes) {
    unset( $sizes['medium']);
    unset( $sizes['large']); 
    return $sizes;
}
add_filter('intermediate_image_sizes_advanced', 'remove_default_img');

$type = get_post_type($_REQUEST['post_id']);
// Post_Name Image Sizes ======================================================
if ( $type === "Custom_Post_Name" || $post_type === "Custom_Post_Name" ) {
add_image_size('custom_size_img', 165, 249, true);
}

}

0
No0n