web-dev-qa-db-fra.com

Comment limiter le nombre maximum de caractères dans le titre qui sont affichés

Je suis ce tutoriel - " Affichez vos messages populaires dans WordPress sans plugin " et souhaitez limiter le nombre maximal de caractères dans le titre qui sont affichés. Aussi, pourquoi la vignette est-elle parfois plus petite que le nombre que je définis dans le php?

1
qaedus

ajoutez d'abord cette fonction à votre fichier functions.php

function max_title_length($title){
     $max = 20;
    return substr( $title, 0, $max ). " …";
}

puis avant la boucle du code que vous avez lié, ajoutez cette ligne à la fonction ci-dessus:

add_filter( 'the_title', 'max_title_length');

et après la boucle, supprimez ce filtre:

remove_filter( 'the_title', 'max_title_length');

et remplacez simplement $max = 20; par ce que vous voulez.

3
Bainternet

Vous pouvez utiliser ce bit pour limiter le nombre de caractères affichés et ajouter un ellipse.

Dans cet exemple particulier, je l'ai configuré pour truniquer à 38 caractères et n'afficher les Ellipsis que si le titre était truniqué. Et quelle que soit la longueur, affichez le titre complet sur la page single_post.

<?php
//assign the title to a variable
$the_title = esc_attr ( the_title_attribute ( 'echo=0' ) );
//specify our desired max character count    
$max_length = 38;
//strlen gets the length of the string
$title_length = strlen ( $the_title ); 

// check if the length of the string is greater than our assigned max length
if ( $title_length > $max_length ) {
    // if it is display a substring of the title from the 
    // first character to the 38th character and append ...
    $title_excerpt = substr ( $the_title, 0, $max_length ) . '...';
} else {
    // otherwise just return the_title()
    $title_excerpt = $the_title;
} ?>

<h1 class="entry-title">
    <?php if ( is_single () ) { // If article page
        the_title ();
    } else {  // If homepage
    ?>

    <a href="<?php the_permalink (); ?>" title="<?php echo esc_attr ( the_title_attribute ( 'echo=0' ) ); ?>" rel="bookmark"><?php echo $title_excerpt; ?></a>
    <?php } ?>
</h1>
0
davidcondrey

J'ai amélioré la réponse @Bainternet pour afficher uniquement ... lorsque le titre est plus long que $max:

function max_title_length( $title ) { 
        $max = 30;
    if( strlen( $title ) > $max ) {
        return substr( $title, 0, $max ). " &hellip;";
    } else {
        return $title;
    }
}

Ensuite, vous pouvez accrocher comme ceci:

add_filter( 'the_title', 'max_title_length');
0
Manolo