Limiter nombre de caractères ou de mots de la description courte (Créer un compte)

  • WordPress :6.2
  • Statut : non résolu
14 sujets de 1 à 14 (sur un total de 14)
  • Auteur
    Messages
  • #2460106
    cafesolo
    Participant
    Initié WordPress
    10 contributions

    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 !

     

    #2460163
    momofr@free.fr
    Modérateur
    Maître WordPress
    6295 contributions

    Salut, 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;
    }

    #2460180
    cafesolo
    Participant
    Initié WordPress
    10 contributions

    Bonjour,
    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 SEO

    Merci pour votree aide

    #2460183
    momofr@free.fr
    Modérateur
    Maître WordPress
    6295 contributions

    Salut, 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.

    #2460185
    ferman
    Participant
    Maître WordPress
    6318 contributions

    Bonjour,

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

    • Cette réponse a été modifiée le il y a 2 semaines et 4 jours par ferman.
    • Cette réponse a été modifiée le il y a 2 semaines et 4 jours par ferman.
    #2460401
    cafesolo
    Participant
    Initié WordPress
    10 contributions

    Bonjour,
    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…

    #2460403
    cafesolo
    Participant
    Initié WordPress
    10 contributions

    J’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

    #2460404
    momofr@free.fr
    Modérateur
    Maître WordPress
    6295 contributions

    Salut, pour les … à la fin tu ajoutes la règle CSS à ta balise p :

    .laclasse p {
    text-overflow : ellipsis;
    }

    #2460408
    cafesolo
    Participant
    Initié WordPress
    10 contributions

    Bonjour,
    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…
    Merci

    #2460411
    ferman
    Participant
    Maître WordPress
    6318 contributions

    Remplacez :

    return $post_excerpt;

    Par:

    return $post_excerpt."...";

    #2460575
    cafesolo
    Participant
    Initié WordPress
    10 contributions

    Bonjour,

    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…
    Merci

    #2460600
    ferman
    Participant
    Maître WordPress
    6318 contributions

    Bonjour,

    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.
    #2460827
    cafesolo
    Participant
    Initié WordPress
    10 contributions

    Bonjour,
    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…
    Merci

    #2460835
    ferman
    Participant
    Maître WordPress
    6318 contributions

    Oui, 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>

     

    • Cette réponse a été modifiée le il y a 4 jours et 13 heures par ferman.
    • Cette réponse a été modifiée le il y a 4 jours et 13 heures par ferman.
14 sujets de 1 à 14 (sur un total de 14)
  • Vous devez être connecté pour répondre à ce sujet.