Cómo hacer que el filtro excerpt_more se aplique al extracto real del post

17 jun 2011, 22:26:51
Vistas: 5.8K
Votos: 1

En la función get_blog_excerpt() a continuación, el filtro excerpt_more funciona perfectamente cuando el extracto del post no está presente, sin embargo, cuando el post tiene un extracto, no obtengo el enlace "Leer más".

Entiendo que the_excerpt primero verifica si hay un extracto del post presente, lo cual está bien, pero quiero que el enlace "Leer más" también se aplique en este caso.

¿Qué necesito cambiar para que excerpt_more se aplique en todos los casos?

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) . '">Leer más</a>'; // Traducido "Read More" a "Leer más"
}

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>';
}

El código anterior está dentro de functions.php

El código a continuación está dentro 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();
    }
} ?>    
4
Comentarios

¿Dónde se llama (o engancha) get_blog_excerpt()?

Chip Bennett Chip Bennett
17 jun 2011 22:33:25

Desde dentro de una función en functions.php

Scott B Scott B
17 jun 2011 23:23:58

Podría ser causado por un plugin. Acabo de tener exactamente el mismo problema, mi código en functions.php para cambiar la longitud y apariencia del extracto está bien (probado en una instalación limpia de wp) pero ha sido "matado" por un plugin, 'Event Calendar 3.1.4' en mi caso. Todo funciona bien si desactivo el plugin. Intenta mirar en esa dirección.

kevin kevin
21 jul 2011 18:53:59

Resolví mi problema usando este plugin: http://wordpress.org/extend/plugins/advanced-excerpt/

kevin kevin
21 jul 2011 19:00:56
Todas las respuestas a la pregunta 1
3

Voy a asumir que estás llamando a get_blog_excerpt() en tu plantilla en algún lugar.

Si es así, ¿qué pasa si simplemente llamas a the_excerpt(), y luego sacas las dos llamadas add_filter() de la función contenedora? Es decir, functions.php se vería así:

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) . '">Leer más</a>';
}
add_filter('excerpt_more', 'ce4_excerpt_more');

Y en tu plantilla, simplemente llamarías a the_excerpt().

Si eso funciona, entonces sospecho que el problema es que tus filtros no se están aplicando - probablemente porque están envueltos en la función contenedora.

17 jun 2011 22:38:07
Comentarios

Chip, gracias por el consejo. Pero mover los filtros fuera del contenedor no parece tener efecto en el script. Funcionó igual independientemente.

Scott B Scott B
17 jun 2011 23:29:23

get_blog_excerpt es llamado desde una función dentro de functions.php, que a su vez es llamado desde una función fuera del bucle en archive.php

Scott B Scott B
17 jun 2011 23:30:32

Entonces, ¿intentaste simplemente llamar a the_excerpt()?

Chip Bennett Chip Bennett
18 jun 2011 00:20:57