web-dev-qa-db-fra.com

limiter les mots dans le contenu du message et ajouter un lien en savoir plus

Comme vous pouvez le voir dans le code, la routine consiste à afficher le message qui a une id de 266. Maintenant, tout ce que je veux, c'est limiter le nombre de mots affichés dans le contenu de cet article. Disons que je veux limiter le nombre de mots à 300, puis ajouter un lien en savoir plus.

C'est le code que j'ai eu jusqu'à présent:

    $post_id = 266;
    echo "<div id='widgets-wrapper3'><div id='marginwidgets' style='overflow: auto; max-width: 100%; margin: 0 auto; border: none !important;'>";

    $queried_post = get_post($post_id); 
    echo "<div class='thewidgets'>";
    echo $queried_post->post_content;
    echo '</div>';

    echo "</div></div>";    
?>
4
Juliver Galleto

J'ai toujours le même problème avec post extrait, post contenu. Il existe divers crochets et fonctions à cet effet, comme l'a souligné @kaiser. Mais parfois, ils ne font pas exactement ce que je veux.

Voici ma solution, j'écris ma propre fonction qui prend le contenu du message et le tronque en un nombre spécifié de mots:

function wpse69204_excerpt( $num_words = 20, $ending = '...', $post_id = null )
{
    global $post;

    // Truncate post content
    $current_post = $post_id ? get_post( $post_id ) : $post;
    $excerpt = strip_shortcodes( $current_post->post_content );
    $excerpt = wp_trim_words( $excerpt, $num_words, $ending );

    // Read more link
    $excerpt .= '<a href="' . get_permalink( $post ) . '" title="">Continue reading...</a>';

    return $excerpt;
}
2
Anh Tran

Trois filtres contrôlent le lien "plus", en fonction de la fonction/balise de modèle utilisée. La mauvaise chose est qu'ils s'interceptent. La bonne chose à faire est que vous pouvez simplement modifier la sortie du filtre en utilisant current_filter() pour récupérer le nom du filtre actuellement lié et modifier la sortie.

Ensuite, nous avons obtenu le filtre 'excerpt_length'- pour limiter la longueur de l’extrait. Celui-ci ne nous permet pas d'ajouter un lien permanent, mais il nous aide en combinaison avec les autres filtres. Voir le 2dakota du Nord brancher.

Le plugin permalink-more

Ce plugin ajoute le lien permanent au contenu ou extrait - en fonction de ce qui est affiché. Il réinitialise également le filtre excerpt_more- en sortie rien , de sorte qu'il n'interfère pas avec les autres filtres.

<?php
/** Plugin Name: (#69204) »kaiser« Adds a permalink to the excerpt & content */

/**
 * Alters the display of the "more" link
 * 
 * @param  string $permalink
 * @param  string $text
 * @return string $html
 */
function wpse69204_more_link( $output )
{
    $html .= '<span class="post-more">&nbsp;';
    $html .= sprintf(
        '<a href="%s#more-%s" class="more-link" title="read more" >'
        ,get_permalink()
        ,get_the_ID()
    );
    $html .= '</a></span>';

    // Override 'excerpt_more'
    if ( 'excerpt_more' === current_filter() )
        return;

    // Strip the content for the `get_the_excerpt` filter.
    $output = wp_trim_words( $output, 300 );

    // Append for the excerpt
    if ( 'get_the_excerpt' === current_filter() )
        return $output.$html;

    // The permalink for the `the_content_more_link`-filter.
    return $html;
}
# "More" link for the content
add_filter( 'the_content_more_link', 'wpse69204_more_link' );
add_filter( 'get_the_excerpt', 'wpse69204_more_link' );
add_filter( 'excerpt_more', 'wpse69204_more_link' );

L'extrait-plus longueur plugin

Si vous souhaitez simplement modifier la longueur de l'extrait, vous pouvez utiliser une configuration de filtre beaucoup plus simple. Le plugin suivant fait un travail très astucieux. Il réduit le contenu (nous sommes dans la boucle et avons accès aux données de publication) à 300 mots. Dans l'étape suivante, il compte les lettres de chaque mot. Ensuite, il renvoie simplement ce numéro (attribué dynamiquement).

<?php
/** Plugin Name: (#69204) »kaiser« Limit excerpt length by Word count */

function wpse69204_excerpt_length( $length )
{
    $to_count = array_splice( get_the_content(), 300 );
    $i = 0;
    foreach ( $to_count as $Word )
    {
        $i += strlen( $Word );
    }

    return $i;
}
add_filter( 'excerpt_length', 'wpse69204_excerpt_length' );

Remarques

  1. Les deux plugins sont "configuration zéro". Il suffit de télécharger, activer, terminé.
  2. Vous devrez utiliser the_content() ou the_excerpt() dans votre thème pour utiliser ces plugins.
1
kaiser