- WordPress :6.7
- Statut : résolu
- Ce sujet contient 6 réponses, 2 participants et a été mis à jour pour la dernière fois par
ferman, le il y a 3 semaines et 4 jours.
-
AuteurMessages
-
15 avril 2025 à 13 h 00 min #2487951
Bonjour,
Ma configuration WP actuelle
- Version de PHP/MySQL :
- Thème utilisé : thème enfant Astra
- Extensions en place :
- Nom de l’hébergeur : O2switch
- Adresse du site : trap-access.com
Problème(s) rencontré(s) :
Bonjour, je ne trouve pas de solution pour afficher la légende de mes images produits … (donc sur la page produit) … Y a t’il un réglage possible ? J’ai sans succès essayé de modifier le functions.php, mais de toute façon je préfère les solutions natives pour la « solidité’ dans le temps …
Merci15 avril 2025 à 15 h 12 min #2487952Bonjour,
Je ne connais pas de solution native mais pour moi ce snippet fonctionne:
function add_caption_below_product_image() {
echo '<p style="text-align: center;" class="image-caption">';
$caption = get_post( get_post_thumbnail_id() )->post_excerpt;
echo $caption;
echo '</p>';
}
add_action( 'woocommerce_product_thumbnails', 'add_caption_below_product_image' );15 avril 2025 à 16 h 06 min #2487954Merci @Ferman, sans succès pour moi … C’est bizarre car c’est la 3e version de code que j’utilise, et rien ne change
15 avril 2025 à 16 h 59 min #2487957Ah et bien si … je l’ai à présent à des endroits un peu bizarre, je vais essayer de le placer sous l’image, je reviendrai poster ma solution complète
15 avril 2025 à 17 h 41 min #2487963Ah et bien si … je l’ai à présent à des endroits un peu bizarre, je vais essayer de le placer sous l’image
Si vous avez créé votre légende dans la médiathèque, le code la place automatiquement sous l’image en position centrée. En tout cas c’est ce que j’observe.
17 avril 2025 à 9 h 16 min #2488032Alors finalement voici ce que j’ai pû faire (rien ne fonctionnait après plein d’essais et mix de code, je pense que Astra outrepasse le code classique) :
1) en functions.php (du theme enfant) j’ai finalement mis du java car rien ne fonctionnait
// JavaScript pour injecter la légende sous l’image principale
add_action('wp_footer', 'legende_js_desi');
function legende_js_desi() {
if ( ! is_product() ) return;
global $product;
$attachment_id = $product->get_image_id();
$caption = wp_get_attachment_caption($attachment_id);
if ( ! $caption ) return;
?>
<script>
document.addEventListener("DOMContentLoaded", function () {
var galleryImage = document.querySelector('.woocommerce-product-gallery__image');
if (galleryImage) {
var caption = document.createElement("p");
caption.className = "image-caption";
caption.innerText = <?php echo json_encode($caption); ?>;
galleryImage.appendChild(caption);
}
});
</script>
<?php2) en CSS (theme enfant) j’ai dû positionner en fixe
.image-caption {
position: absolute;
top: 10px;
left: 50%;
transform: translateX(-50%);
padding: 5px 10px;
max-width: 90%;
text-align: center;
z-index: 10;
}17 avril 2025 à 23 h 41 min #2488078Je ne comprenais pas bien pourquoi ça fonctionnait chez moi et pas chez vous. La réponse est ICI. Je n’utilisais pas de galerie; seulement une image produit. Et donc il faut du js. Il y avait un peu plus simple (sans avoir à ajouter du CSS) mais votre solution est tout à fait bonne. Donc, pour info:
function add_caption_below_product_image() {
echo '<p style="text-align: center;" class="image-caption">';
$caption = get_post( get_post_thumbnail_id() )->post_excerpt;
echo $caption;
echo '</p>';
?> <script>
$=jQuery; $('.woocommerce-product-gallery__image a .wp-post-image, .image-caption').wrapAll('<div class="layout-bis"></div>')
</script>
<?php
}
add_action( 'woocommerce_product_thumbnails', 'add_caption_below_product_image');-
Cette réponse a été modifiée le il y a 3 semaines et 4 jours par
ferman.
-
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.