web-dev-qa-db-fra.com

Comment faire en sorte que le filtre extrait_more s'applique au post-extrait réel?

Dans la fonction get_blog_excerpt () ci-dessous, le filtre excerpt_more fonctionne parfaitement lorsque l'extrait de publication n'est pas présent. Toutefois, lorsque la publication contient un extrait, je ne reçois pas le lien "Lire plus".

Je comprends que the_excerpt vérifie d’abord si un extrait de post est présent, ce qui est bien, mais je veux que le lien lire plus lui soit appliqué également.

Que dois-je changer pour que l'extrait soit appliqué dans tous les cas?

function get_blog_excerpt(){
    add_filter('excerpt_length', 'ce4_excerpt_length');
    add_filter('excerpt_more', 'ce4_excerpt_more');
    return the_excerpt();
}

function ce4_excerpt_length($length) {
    return 150;
}

function ce4_excerpt_more($more) {
    global $post;
    return '...<a href="'. get_permalink($post->ID) . '">Read More</a>';
}


function get_blog_links(){
    global $post;
    setup_postdata($post);
    $myposts = get_posts($args);echo '<div id="menuFooterRecent" class="blog">'; 
    echo '<ul>'; 
    foreach($myposts as $idx=>$post){ ?>
    <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
    <?php 
    echo get_blog_excerpt();
    echo '<div style="clear:both">&nbsp;</div>';?></li>
    <?php } echo '</ul></div>';
}

Le code ci-dessus est à l'intérieur de functions.php

Le code ci-dessous est à l'intérieur de archive.php

<?php 
if(is_category()){
    if (get_query_var('cat') == get_category_by_slug('blog')->term_id){
        get_blog_links();
    }
    else 
    {
    get_category_links();
    }
} ?>    
1
Scott B

Je suppose que vous appelez get_blog_excerpt() dans votre modèle quelque part?

Si tel est le cas, que se passera-t-il si vous appelez simplement the_excerpt(), puis retirez les deux appels add_filter() de la fonction conteneur? c'est-à-dire functions.php ressemblerait simplement à:

function ce4_excerpt_length($length) {
    return 150;
}
add_filter('excerpt_length', 'ce4_excerpt_length');

function ce4_excerpt_more($more) {
    global $post;
    return '...<a href="'. get_permalink($post->ID) . '">Read More</a>';
}
add_filter('excerpt_more', 'ce4_excerpt_more');

Et dans votre modèle, vous appelez simplement the_excerpt().

Si cela fonctionne, je suppose que le problème est que vos filtres ne sont pas appliqués - probablement à cause de leur encapsulation dans la fonction conteneur.

1
Chip Bennett