- WordPress :6.2
- Statut : non résolu
- Ce sujet contient 13 réponses, 3 participants et a été mis à jour pour la dernière fois par
ferman, le il y a 4 jours et 13 heures.
-
AuteurMessages
-
4 septembre 2023 à 16 h 35 min #2460106
Bonjour,
Je cherche le bout de code qui permettrait en créant un filtre dans functions.php de mon thème enfant
de limiter le nombre de caractères affichés sur les page catalogue produits…
Mais sur la page du produit je souhaite gardé la totalité de la description courte… De ce fait je serai peut-être obligé de surcharger un fichier, non ?
Jusque là ce que j’ai tenté ne fonctionne pas…Les bouts de code tentés :
/**
* Limit WooCommerce Short Description Field
*/
// add_filter( ‘woocommerce_short_description’, ‘prefix_filter_woocommerce_short_description’ );// function prefix_filter_woocommerce_short_description( $post_post_excerpt ) {
// // make filter magic happen here…
// if(! is_product() ) { // add in conditionals
// $text = $post_post_excerpt;
// $words = 25; // change word length
// $more = ‘…’; // add a more cta// $post_post_excerpt = wp_trim_words( $text, $words, $more );
// }
// echo ‘<p>’;
// return $post_post_excerpt;
// echo ‘</p>’;
// };Et celui-ci :
/* Limiter affichage description courte */
function custom_short_description_length($length) {
return 100; // Remplacez 100 par le nombre de caractères que vous souhaitez afficher
}
add_filter(‘woocommerce_short_description_length’, ‘custom_short_description_length’, 10);Merci pour votre aide.
Ma configuration WP actuelle
- Version de PHP/MySQL : 7.4 / 5.7
- Thème utilisé : DIVI
- Extensions en place : pas mal !
5 septembre 2023 à 22 h 47 min #2460163Salut, tu as oublié de nous donner les informations sur ton hébergement, le thème et les extensions utilisées.
Impossible de te répondre sans ça.
En général on peut limiter la partie extrait produit dans les widgets extrait ou grille de produits (constructeurs de page) ou le Bloc extrait (Gutenberg).
Tu as un code CSS pour faire un peut la même chose mais sur une seule ligne :
.truncate {
width: 250px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}6 septembre 2023 à 9 h 38 min #2460180Bonjour,
Merci pour ta réponse. mais j’aimerai vraiment
faire marcher du code en limitant le nombre de caractères, ou mieux, de mots,
pas en masquant ce qui dépasse avec overflow…
Mes pages grilles produits et produits sont construites avec le Theme Builder de DIVI….Pour compléter les infos :
Hébergement : OVH mutualisé Performance 4
Thème : DIVI + thème enfant
Extensions :
Akismet
BEAR – Bulk Editor and Products Manager Professional for WooCommerce
Code Snippets
Complianz | GDPR/CCPA Cookie Consent
Divi Plus
DIVI Section Enhancer
Divi Supreme Pro
Duplicate Page
Forminator
Google Listings and Ads
Health Check & Troubleshooting
HUSKY – Products Filter Professional for WooCommerce
Imagify
LightStart – Maintenance Mode, Coming Soon and Landing Page Builder
Loco Translate
Maps Marker Pro
Members
Really Simple SSL
Really Simple SSL Pro
Redirection
Récupération d’abandon de panier WooCommerce
Store Toolkit for WooCommerce
SVG Support
Table Rate Shipping for WooCommerce
TablePress
Variation Swatches for WooCommerce
Vosfactures
Woo Discount Rules
Woo Discount Rules PRO 2.0
WooCommerce
WooCommerce Product Batch Numbers
WooCommerce Shipping & Tax
WooCommerce Stripe Gateway
WP Activity Log
WP Menu Cart
WP Rocket
WP Rollback
YITH Point de vente pour WooCommerce
Yoast SEOMerci pour votree aide
6 septembre 2023 à 10 h 27 min #2460183Salut, tu utilises un thème Premium, les forums WPFR sont dédiés aux thèmes et extensions gratuits.
Sans disposer de ce thème il est impossible de t’aider.
Tu va trouver de l’aide sur ce Thème sur les pages FaceBook Divi et les forums Divi francophones.
6 septembre 2023 à 14 h 42 min #2460185Bonjour,
Essayez ce code:
add_filter('woocommerce_short_description', 'reigel_woocommerce_short_description', 10, 1);
function reigel_woocommerce_short_description($post_excerpt){
if (!is_product()) {
$post_excerpt = substr($post_excerpt, 0, 10);
}
return $post_excerpt;
}A mettre dans functions.php du thème. Testé et fonctionne chez moi (mais je n’utilise pas le thème Divi).
Le code se trouve ICI (voir « reigel_woocommerce_short_description »)
11 septembre 2023 à 16 h 25 min #2460401Bonjour,
Désolé d’utiliser un thème premium… C’est pour des raisons de confort dans la créativité…Ferman merci ! Cela fonctionne même avec Divi !
Le petit bémol : ça agit sur le nombre de caractères et pas le nombre de mots : donc ça coupe au milieu d’un mot…11 septembre 2023 à 16 h 37 min #2460403J’ai trouvé, grâce à ton lien, le morceau de pour agir sur le nombre de mots plutôt que les caractères :
add_filter('woocommerce_short_description', 'limit_woocommerce_short_description', 10, 1);
function limit_woocommerce_short_description($post_excerpt){
if (!is_product()) {
$pieces = explode(" ", $post_excerpt);
$post_excerpt = implode(" ", array_splice($pieces, 0, 30));
}
return $post_excerpt;
}Il me manque juste à essayer d’ajouter « … » à la fin…
Merci encore
11 septembre 2023 à 17 h 04 min #2460404Salut, pour les … à la fin tu ajoutes la règle CSS à ta balise p :
.laclasse p {
text-overflow : ellipsis;
}11 septembre 2023 à 17 h 40 min #2460408Bonjour,
Où dois je rajouter cette classe, directement dans le template ?…
Je souhaiterai directement dans le morceau de code php, un truc style :echo '...';
Mais jusque là ça ne marche pas…
Merci11 septembre 2023 à 18 h 06 min #2460411Remplacez :
return $post_excerpt;
Par:
return $post_excerpt."...";
14 septembre 2023 à 16 h 08 min #2460575Bonjour,
return $post_excerpt."...";
C’est parfait lorsque le nombre de caractère est supérieur à la limite définie, dans ce cas les points de suspension sont affiché à la fin du paragraphe.
Lorsque la description courte est inférieure à la limite définie, les « … » sont affiché après un retour ligne, voire 2, flottant seuls et hors mise en forme définie pas le css…
Merci15 septembre 2023 à 11 h 23 min #2460600Bonjour,
Lorsque la description courte est inférieure à la limite définie, les « … » sont affiché après un retour ligne, voire 2, flottant seuls et hors mise en forme définie pas le css…
Oui, quand on limite par nombre de mots (je pense que le problème n’existe pas quand on limite en caractères) les ‘…’ se retrouvent après le paragraphe d’où les retours à la ligne. Il y a aussi un autre problème: la limite en mots définie dans la fonction ‘limit_woocommerce_short_description’ n’est pas exacte; elle est supérieure à la limite réelle car les espaces blancs avant, après et entre les mots sont également pris en compte (vous pouvez vérifier sur votre excerpt). Il faut donc s’en débarrasser. Ensuite, pour que les ‘…’ soient dans tous les cas dans le paragraphe et non en dehors, il faut passer par du javascript.
Donc, on en arrive à la fonction suivante qui fonctionne chez moi:
function ferman_limit_woocommerce_short_description($post_excerpt){
$limit=30; //remplacez par la valeur souhaitée.
$post_excerpt = preg_replace('/\s+/', ' ', trim($post_excerpt));
$words = explode(" ", $post_excerpt);
$count= count($words);
if (!is_product()) {
if ($limit<$count){
$post_excerpt = implode(" ", array_splice($words, 0, $limit));
echo $post_excerpt;
?><script>$=jQuery; $('.woocommerce-products-header p').append('...')</script> <?php
return;
}
else{
return $post_excerpt;
}
}
}
add_filter('woocommerce_short_description', 'ferman_limit_woocommerce_short_description', 10, 1);En résumé: pas si simple.
-
Cette réponse a été modifiée le il y a 1 semaine et 2 jours par
ferman.
20 septembre 2023 à 17 h 08 min #2460827Bonjour,
Ferman, ta fonction ne fonctionne pas chez moi… :/
Sur la grille des produits ça n’affiche pas les « … » lorsque la limite définie est atteinte
et sur la page du produit, la description courte ne s’affiche plus du tout…
Merci20 septembre 2023 à 18 h 01 min #2460835Oui, effectivement, « légère » erreur au moment de mettre le code sur le forum. Juste une accolade mal placée mais ça suffit! Ci-dessous le code rectifié (et revérifié avant envoi 🙂 ). Ça devrait mieux fonctionner.
function ferman_limit_woocommerce_short_description($post_excerpt){
$limit=30; //remplacez par la valeur souhaitée.
$post_excerpt = preg_replace('/\s+/', ' ', trim($post_excerpt));
$words = explode(" ", $post_excerpt);
$count= count($words);
if (!is_product()) {
if ($limit<$count){
$post_excerpt = implode(" ", array_splice($words, 0, $limit));
echo $post_excerpt;
?><script>$=jQuery; $('.woocommerce-products-header p').append('...')</script> <?php
return;
}
}
else{
return $post_excerpt;
}
}
add_filter('woocommerce_short_description', 'ferman_limit_woocommerce_short_description', 10, 1);Si vous préférez, ça marche aussi simplement avec des CSS. Remplacez la ligne<script>…….</script> par celle ci:
<style> .woocommerce-products-header p:after{content:"..."}</style>
-
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.