web-dev-qa-db-fra.com

Comment puis-je limiter la longueur des posts précédents/suivants dans mon thème Wordpress?

J'utilise le code suivant pour afficher les publications suivantes/précédentes dans mon thème wordpress.

<?php
previous_post_link('<span class="left">&larr; %link</span>');
next_post_link('<span class="right">%link &rarr;</span>'); ?> 

Cela fonctionne, mais je veux limiter le titre de l'article qui est affiché dans le lien à une longueur spécifique, car les liens trop gros ne fonctionnent pas à cause de l'espace dont je dispose. Et je veux avoir la flèche dans le lien pour qu'il montre le lien et la flèche avec le même style. Est-ce possible aussi?

Je vous remercie!

3
Benedikt W

Voici un petit code qui devrait implémenter ceci pour vous:

<?php $max_length = 5; // set max character length here

$next = get_next_post()->ID;
$prev = get_previous_post()->ID;

if( $prev ) {
    $title = get_the_title( $prev );
    $link = get_the_permalink( $prev );
    $post_name = mb_strlen( $title ) > $max_length ? mb_substr( $title, 0, $max_length ) . ' ..' : $title;
    ?>
        <span class="left">
            <a href="<?php echo $link; ?>" rel="prev" title="<?php echo $title; ?>">&larr; <?php echo $post_name; ?></a>
        </span>
    <?php
}
if( $next ) {
    $title = get_the_title( $next );
    $link = get_the_permalink( $next );
    $post_name = mb_strlen( $title ) > $max_length ? mb_substr( $title, 0, $max_length ) . ' ..' : $title;
    ?>
        <span class="right">
            <a href="<?php echo $link; ?>" rel="next" title="<?php echo $title; ?>"><?php echo $post_name; ?> &rarr;</a>
        </span>
    <?php
} ?>

J'espère que cela aide dans votre modèle.

Edit: petit correctif pour que cela puisse fonctionner avec des caractères multi-octets. (mb_strlen - mb_substr)

5
Samuel Elh

Cela ne peut-il pas être fait par css?

.nav_posts .title {
    display: inline-block;
    text-overflow: Ellipsis;
    max-width: 30ex;
    white-space: nowrap;
    overflow: hidden;
}
<?php
previous_post_link('<span class="nav_posts left">&larr; <span class="title">%link</span></span>');
next_post_link('<span class="nav_posts right"><span class="title">%link</span> &rarr;</span>');
?>
1
Antony Gibbs

Ces deux méthodes devraient se redescendre vers la fonction get_adjacent_post_link(), qui transmet le résultat via le filtre dynamique {$adjacent}_post_link (où $adjacent est previous ou next).

Vous devriez pouvoir utiliser ce filtre pour apporter des modifications à la sortie finale.

0
Rarst